Add internal APIs for system daemon
[platform/core/appfw/librua.git] / src / rua_internal.c
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <db-util.h>
18 #include <aul.h>
19
20 #include "rua_internal.h"
21 #include "db-schema.h"
22 #include "rua_util.h"
23
24 static int __exec(sqlite3 *db, char *query)
25 {
26         int r;
27         char *errmsg = NULL;
28
29         if (db == NULL)
30                 return -1;
31
32         r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
33
34         if (r != SQLITE_OK) {
35                 sqlite3_free(errmsg);
36                 return -1;
37         }
38
39         return 0;
40 }
41
42 static int __create_table(sqlite3 *db)
43 {
44         int r;
45
46         r = __exec(db, CREATE_RUA_HISTORY_TABLE);
47         if (r == -1)
48                 return -1;
49
50         return 0;
51 }
52
53 static sqlite3 *__db_init(uid_t uid)
54 {
55         int r;
56         sqlite3 *db = NULL;
57
58         r = _rua_util_open_db(&db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE,
59                         uid, RUA_DB_NAME);
60         if (r != SQLITE_OK)
61                 return NULL;
62
63         r = __create_table(db);
64         if (r) {
65                 db_util_close(db);
66                 return NULL;
67         }
68
69         return db;
70 }
71
72 int rua_db_delete_history(bundle *b)
73 {
74         return rua_usr_db_delete_history(b, getuid());
75 }
76
77 int rua_usr_db_delete_history(bundle *b, uid_t uid)
78 {
79         int r;
80         sqlite3 *db = NULL;
81         char query[QUERY_MAXLEN];
82         char *pkg_name = NULL;
83         char *app_path = NULL;
84         char *errmsg = NULL;
85         int result = 0;
86
87         db = __db_init(uid);
88         if (db == NULL) {
89                 LOGE("Error db null");
90                 return -1;
91         }
92
93         if (b != NULL) {
94                 bundle_get_str(b, AUL_K_RUA_PKGNAME, &pkg_name);
95                 bundle_get_str(b, AUL_K_RUA_APPPATH, &app_path);
96         }
97
98         if (pkg_name != NULL)
99                 snprintf(query, QUERY_MAXLEN, "delete from rua_history where pkg_name = '%s';", pkg_name);
100         else if (app_path != NULL)
101                 snprintf(query, QUERY_MAXLEN, "delete from rua_history where app_path = '%s';", app_path);
102         else
103                 snprintf(query, QUERY_MAXLEN, "delete from rua_history;");
104
105         LOGI("rua_delete_history_from_db : %s", query);
106         r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
107
108         if (r != SQLITE_OK) {
109                 LOGE("fail to exec delete query %s : %s", query, errmsg);
110                 sqlite3_free(errmsg);
111                 result = -1;
112         }
113
114         if (db != NULL)
115                 db_util_close(db);
116
117         return result;
118 }
119
120 int rua_db_add_history(struct rua_rec *rec)
121 {
122         return rua_usr_db_add_history(rec, getuid());
123 }
124
125 int rua_usr_db_add_history(struct rua_rec *rec, uid_t uid)
126 {
127         int r;
128         char query[QUERY_MAXLEN];
129         sqlite3 *db = NULL;
130
131         db = __db_init(uid);
132         if (db == NULL) {
133                 LOGE("Error db null");
134                 return -1;
135         }
136
137         if (rec == NULL) {
138                 LOGE("Error rec null");
139                 db_util_close(db);
140                 return -1;
141         }
142
143         snprintf(query, QUERY_MAXLEN,
144                 "insert or replace into %s ( pkg_name, app_path, arg, launch_time) "
145                 " values ( \"%s\", \"%s\", \"%s\", %d) ",
146                 RUA_HISTORY,
147                 rec->pkg_name ? rec->pkg_name : "",
148                 rec->app_path ? rec->app_path : "",
149                 rec->arg ? rec->arg : "", (int)rec->launch_time);
150
151         r = __exec(db, query);
152         if (r == -1) {
153                 LOGE("[RUA ADD HISTORY ERROR] %s\n", query);
154                 db_util_close(db);
155                 return -1;
156         }
157
158         db_util_close(db);
159         return r;
160 }