X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=parser%2Fsrc%2Fpkgmgr_parser_db.c;h=7b9d10e18decb3d724bfc469bdb2631b24e5519e;hb=refs%2Fchanges%2F33%2F140333%2F3;hp=eac76407f87de7043706ccddeab8339e232542f2;hpb=b60b2c68f073edca34c7a36460f6b40934059cb6;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git diff --git a/parser/src/pkgmgr_parser_db.c b/parser/src/pkgmgr_parser_db.c index eac7640..7b9d10e 100644 --- a/parser/src/pkgmgr_parser_db.c +++ b/parser/src/pkgmgr_parser_db.c @@ -191,11 +191,8 @@ static int __set_db_version(sqlite3 *db) static const char query_raw[] = "PRAGMA user_version="; char query[BUFSIZE]; int ret; - int version; - version = atoi(TIZEN_MAJOR_VER) * 10000 + atoi(TIZEN_MINOR_VER) * 100 + - atoi(TIZEN_PATCH_VER); - snprintf(query, sizeof(query), "%s%d", query_raw, version); + snprintf(query, sizeof(query), "%s%d", query_raw, PKG_DB_VERSION); ret = sqlite3_exec(db, query, NULL, NULL, NULL); if (ret != SQLITE_OK) { @@ -301,17 +298,14 @@ static const char *parser_init_queries[] = { QUERY_CREATE_TABLE_PACKAGE_INFO, QUERY_CREATE_TABLE_PACKAGE_LOCALIZED_INFO, QUERY_CREATE_TABLE_PACKAGE_PRIVILEGE_INFO, + QUERY_CREATE_TABLE_PACKAGE_APPDEFINED_PRIVILEGE_INFO, QUERY_CREATE_TABLE_PACKAGE_UPDATE_INFO, QUERY_CREATE_TABLE_PACKAGE_APP_INFO, QUERY_CREATE_TABLE_PACKAGE_APP_LOCALIZED_INFO, - QUERY_CREATE_TABLE_PACKAGE_APP_ICON_SECTION_INFO, /* ? */ - QUERY_CREATE_TABLE_PACKAGE_APP_IMAGE_INFO, /* ? */ QUERY_CREATE_TABLE_PACKAGE_APP_APP_CONTROL, + QUERY_CREATE_TABLE_PACKAGE_APP_APP_CONTROL_PRIVILEGE, QUERY_CREATE_TABLE_PACKAGE_APP_APP_CATEGORY, QUERY_CREATE_TABLE_PACKAGE_APP_APP_METADATA, - QUERY_CREATE_TABLE_PACKAGE_APP_APP_PERMISSION, /* ? */ - QUERY_CREATE_TABLE_PACKAGE_APP_SHARE_ALLOWED, /* ? */ - QUERY_CREATE_TABLE_PACKAGE_APP_SHARE_REQUEST, /* ? */ QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL, QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL_PRIVILEGE, QUERY_CREATE_TABLE_PACKAGE_APP_INFO_FOR_UID, @@ -558,6 +552,60 @@ static const char *__find_effective_appid(GList *metadata_list) return NULL; } +static int __insert_appcontrol_privilege_info(sqlite3 *db, const char *appid, + appcontrol_x *ac) +{ + static const char query[] = + "INSERT INTO package_app_app_control_privilege (app_id," + " app_control, privilege) VALUES (?, ?, ?)"; + int ret; + sqlite3_stmt *stmt; + int idx; + char app_control[BUFSIZE]; + GList *tmp; + char *privilege; + + if (ac == NULL) + return 0; + + ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL); + if (ret != SQLITE_OK) { + _LOGE("prepare failed: %s", sqlite3_errmsg(db)); + return -1; + } + + for (tmp = ac->privileges; tmp; tmp = tmp->next) { + privilege = (char *)tmp->data; + if (privilege == NULL || !strlen(privilege)) + continue; + + idx = 1; + snprintf(app_control, sizeof(app_control), "%s|%s|%s", + ac->operation ? (strlen(ac->operation) > 0 ? + ac->operation : "NULL") : "NULL", + ac->uri ? (strlen(ac->uri) > 0 ? + ac->uri : "NULL") : "NULL", + ac->mime ? (strlen(ac->mime) > 0 ? + ac->mime : "NULL") : "NULL"); + __BIND_TEXT(db, stmt, idx++, appid); + __BIND_TEXT(db, stmt, idx++, app_control); + __BIND_TEXT(db, stmt, idx++, privilege); + + ret = sqlite3_step(stmt); + if (ret != SQLITE_DONE) { + _LOGE("step failed: %s", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + return -1; + } + + sqlite3_reset(stmt); + } + + sqlite3_finalize(stmt); + + return 0; +} + static int __insert_appcontrol_info(sqlite3 *db, application_x *app) { static const char query[] = @@ -601,6 +649,11 @@ static int __insert_appcontrol_info(sqlite3 *db, application_x *app) return -1; } + if (__insert_appcontrol_privilege_info(db, app->appid, ac)) { + sqlite3_finalize(stmt); + return -1; + } + sqlite3_reset(stmt); } @@ -1508,6 +1561,50 @@ static int __insert_package_privilege_info(sqlite3 *db, manifest_x *mfx) return 0; } +static int __insert_package_appdefined_privilege_info(sqlite3 *db, + manifest_x *mfx) +{ + static const char query[] = + "INSERT INTO package_appdefined_privilege_info " + "(package, privilege, license, type) " + "VALUES (?, ?, ?, ?)"; + int ret; + sqlite3_stmt *stmt; + int idx; + GList *tmp; + appdefined_privilege_x *priv; + + ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL); + if (ret != SQLITE_OK) { + _LOGE("prepare failed: %s", sqlite3_errmsg(db)); + return -1; + } + + for (tmp = mfx->appdefined_privileges; tmp; tmp = tmp->next) { + priv = (appdefined_privilege_x *)tmp->data; + if (priv == NULL) + continue; + + idx = 1; + __BIND_TEXT(db, stmt, idx++, mfx->package); + __BIND_TEXT(db, stmt, idx++, priv->value); + __BIND_TEXT(db, stmt, idx++, priv->license); + __BIND_TEXT(db, stmt, idx++, priv->type); + + ret = sqlite3_step(stmt); + if (ret != SQLITE_DONE) { + _LOGE("step failed: %s", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + return -1; + } + sqlite3_reset(stmt); + } + + sqlite3_finalize(stmt); + + return 0; +} + /* _PRODUCT_LAUNCHING_ENHANCED_ * app->indicatordisplay, app->portraitimg, app->landscapeimg, * app->guestmode_appstatus @@ -1844,6 +1941,8 @@ static int __insert_package_info(sqlite3 *db, manifest_x *mfx) return -1; if (__insert_package_privilege_info(db, mfx)) return -1; + if (__insert_package_appdefined_privilege_info(db, mfx)) + return -1; return 0; } @@ -2374,6 +2473,72 @@ API int pkgmgr_parser_update_app_label_info_in_db(const char *appid, label); } +static int __set_app_icon(sqlite3 *db, const char *appid, const char *icon_path) +{ + static const char query[] = + "UPDATE package_app_localized_info SET app_icon=? " + "WHERE app_id=? AND app_icon IS NOT NULL"; + int ret; + sqlite3_stmt *stmt; + int idx = 1; + + ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL); + if (ret != SQLITE_OK) { + _LOGE("prepare failed: %s", sqlite3_errmsg(db)); + return -1; + } + + __BIND_TEXT(db, stmt, idx++, icon_path); + __BIND_TEXT(db, stmt, idx++, appid); + + ret = sqlite3_step(stmt); + if (ret != SQLITE_DONE) { + _LOGE("step failed: %s", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + return -1; + } + + sqlite3_finalize(stmt); + + return 0; +} + +API int pkgmgr_parser_update_app_icon_info_in_usr_db(const char *appid, + uid_t uid, const char *icon_path) +{ + int ret; + const char *dbpath; + sqlite3 *db; + + if (appid == NULL) { + _LOGE("invalid parameter"); + return PM_PARSER_R_EINVAL; + } + + dbpath = __get_parser_db_path(uid); + + ret = __open_db(uid, dbpath, &db, SQLITE_OPEN_READWRITE); + if (ret != SQLITE_OK) { + _LOGE("open db failed: %d", ret); + return PM_PARSER_R_ERROR; + } + + __BEGIN_TRANSACTION(db); + __DO_TRANSACTION(db, __set_app_icon(db, appid, icon_path)); + __END_TRANSACTION(db); + + sqlite3_close_v2(db); + + return PM_PARSER_R_OK; +} + +API int pkgmgr_parser_update_app_icon_info_in_db(const char *appid, + const char *icon_path) +{ + return pkgmgr_parser_update_app_icon_info_in_usr_db(appid, __getuid(), + icon_path); +} + static int __set_tep_path(sqlite3 *db, const char *pkgid, const char *tep_path) { static const char query[] =