From: Junghyun Yeon Date: Tue, 12 Jul 2016 09:48:31 +0000 (+0900) Subject: Implement functions for pkg enable/disable X-Git-Tag: accepted/tizen/common/20160719.171839^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F82%2F79682%2F4;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git Implement functions for pkg enable/disable Related changes [pkgmgr-tool] https://review.tizen.org/gerrit/78916 [slp-pkgmgr] https://review.tizen.org/gerrit/78917 [pkgmgr-server] https://review.tizen.org/gerrit/78918 [app-installers] https://review.tizen.org/gerrit/78919 [tpk-backend] https://review.tizen.org/gerrit/#/c/79070/ Change-Id: I70d8108c76e2062eed4c081fc35a35c105b47901 Signed-off-by: Junghyun Yeon --- diff --git a/parser/pkgmgr_parser_db.c b/parser/pkgmgr_parser_db.c index 4863257..1d02cf9 100644 --- a/parser/pkgmgr_parser_db.c +++ b/parser/pkgmgr_parser_db.c @@ -2248,6 +2248,34 @@ static int __enable_app(const char *appid) return ret; } +static int __disable_pkg(const char *pkgid) +{ + int ret = -1; + char query[MAX_QUERY_LEN] = {'\0'}; + sqlite3_snprintf(MAX_QUERY_LEN, query, + "UPDATE package_info SET package_disable='true' WHERE package=%Q", + pkgid); + ret = __exec_query(query); + if (ret == -1) + _LOGD("Update pkg disable info has failed\n"); + + return ret; +} + +static int __enable_pkg(const char *pkgid) +{ + int ret = -1; + char query[MAX_QUERY_LEN] = {'\0'}; + sqlite3_snprintf(MAX_QUERY_LEN, query, + "UPDATE package_info SET package_disable='false' WHERE package=%Q", + pkgid); + ret = __exec_query(query); + if (ret == -1) + _LOGD("Update pkg disable info has failed\n"); + + return ret; +} + static int __check_appinfo_for_uid_table(const char *appid, uid_t uid) { int ret = -1; @@ -2986,6 +3014,56 @@ API int pkgmgr_parser_update_app_disable_info_in_db(const char *appid, int is_di return pkgmgr_parser_update_app_disable_info_in_usr_db(appid, _getuid(), is_disable); } +API int pkgmgr_parser_update_pkg_disable_info_in_usr_db(const char *pkgid, uid_t uid, int is_disable) +{ + int ret = -1; + + ret = pkgmgr_parser_check_and_create_db(uid); + if (ret == -1) { + _LOGD("Failed to open DB\n"); + return ret; + } + + /*Begin transaction*/ + ret = sqlite3_exec(pkgmgr_parser_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL); + if (ret != SQLITE_OK) { + _LOGD("Failed to begin transaction\n"); + ret = -1; + goto err; + } + + _LOGD("Transaction Begin\n"); + if (is_disable) + ret = __disable_pkg(pkgid); + else + ret = __enable_pkg(pkgid); + + if (ret == -1) { + _LOGD("__update_pkg_disable_condition_in_db failed. Rollback now\n"); + sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL); + goto err; + } + + /*Commit transaction*/ + ret = sqlite3_exec(pkgmgr_parser_db, "COMMIT", NULL, NULL, NULL); + if (ret != SQLITE_OK) { + _LOGD("Failed to commit transaction, Rollback now\n"); + sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL); + ret = -1; + goto err; + } + _LOGD("Transaction Commit and End\n"); + +err: + pkgmgr_parser_close_db(); + return ret; +} + +API int pkgmgr_parser_update_pkg_disable_info_in_db(const char *pkgid, int is_disable) +{ + return pkgmgr_parser_update_pkg_disable_info_in_usr_db(pkgid, _getuid(), is_disable); +} + API int pkgmgr_parser_update_app_disable_info_in_usr_db(const char *appid, uid_t uid, int is_disable) { int ret = -1; diff --git a/parser/pkgmgr_parser_db.h b/parser/pkgmgr_parser_db.h index 03325eb..93fcc46 100644 --- a/parser/pkgmgr_parser_db.h +++ b/parser/pkgmgr_parser_db.h @@ -213,6 +213,32 @@ int pkgmgr_parser_update_app_disable_info_in_db(const char *appid, int is_disabl int pkgmgr_parser_update_app_disable_info_in_usr_db(const char *appid, uid_t uid, int is_disable); /** + * @fn int pkgmgr_parser_update_pkg_disable_info_in_db(const char *pkgid, int is_disable); + * @brief This API updates disable info about pkg + * + * @par This API is for package-manager installer backends + * @par Sync (or) Async : Synchronous API + * + * @param[in] pkgid package ID to be enabled or disabled + * @param[in] is_disable determine enable or disable of app + * @return 0 if success, error code(<0) if fail + * @pre None + * @post None + * @code +static int disable_pkg(const char *pkgid) +{ + int ret = 0; + ret = pkgmgr_parser_update_pkg_disable_info_in_db(pkgid, 1); + if (ret < 0) + return -1; + return 0; +} + * @endcode + */ +int pkgmgr_parser_update_pkg_disable_info_in_db(const char *pkgid, int is_disable); +int pkgmgr_parser_update_pkg_disable_info_in_usr_db(const char *pkgid, uid_t uid, int is_disable); + +/** * @fn int pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db(const char *appid, uid_t uid, int flag) * @brief This API updates splash screen display info about global app for user specified by uid *