From: Jiwoong Im Date: Tue, 26 May 2015 07:09:26 +0000 (+0900) Subject: add api to support event system. X-Git-Tag: submit/tizen/20150601.084214^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8461fc5702408da655f37bced38b7d985e513770;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git add api to support event system. add api which find event_launch_list in package_app_app_control table. JIRA ticket : TC-2473 Change-Id: I1980d96da012d96a0560a03056d0c0ef311aa3b1 Signed-off-by: Jiwoong Im --- diff --git a/include/pkgmgr-info.h b/include/pkgmgr-info.h index a82ab8b..79c7b5f 100644 --- a/include/pkgmgr-info.h +++ b/include/pkgmgr-info.h @@ -48,6 +48,7 @@ #include #include +#include #include #include @@ -311,6 +312,11 @@ typedef int (*pkgmgrinfo_app_metadata_list_cb ) (const char *metadata_key, typedef int (*pkgmgrinfo_app_control_list_cb ) (pkgmgrinfo_appcontrol_h handle, void *user_data); +typedef struct eventsystem_info { + char *appid; + char *event_name; +} eventsystem_info_s; + /** * @brief Install Location Types */ @@ -5563,6 +5569,13 @@ int pkgmgrinfo_client_listen_status(pkgmgrinfo_client *pc, pkgmgrinfo_handler ev int pkgmgrinfo_client_free(pkgmgrinfo_client *pc); int pkgmgrinfo_client_request_enable_external_pkg(char *pkgid); + +int pkgmgrinfo_appinfo_get_event_launch_list(GList **es_info); +int pkgmgrinfo_appinfo_get_usr_event_launch_list(GList **es_info, uid_t uid); +int pkgmgrinfo_appinfo_get_event_launch_list_by_appid(const char *appid, GList **es_info); +int pkgmgrinfo_appinfo_get_usr_event_launch_list_by_appid(const char *appid, GList **es_info, uid_t uid); + + /** * @pkgmgrinfo client API end **/ diff --git a/packaging/pkgmgr-info.spec b/packaging/pkgmgr-info.spec index b9e6c07..16a87b2 100644 --- a/packaging/pkgmgr-info.spec +++ b/packaging/pkgmgr-info.spec @@ -15,7 +15,7 @@ BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dbus-glib-1) BuildRequires: pkgconfig(libtzplatform-config) -BuildRequires: pkgconfig(libsmack) +BuildRequires: pkgconfig(libsmack) %description Packager Manager infomation api for packaging diff --git a/src/pkgmgr-info.c b/src/pkgmgr-info.c index 46b28c0..54fd1b1 100644 --- a/src/pkgmgr-info.c +++ b/src/pkgmgr-info.c @@ -5855,6 +5855,153 @@ catch: return ret; } +#define OPERATION_LAUNCH_ON_EVENT "http://tizen.org/appcontrol/operation/launch_on_event" + +API int pkgmgrinfo_appinfo_get_event_launch_list(GList **es_info) +{ + pkgmgrinfo_appinfo_get_usr_event_launch_list(es_info, GLOBAL_USER); +} + +API int pkgmgrinfo_appinfo_get_usr_event_launch_list(GList **es_info, uid_t uid) +{ + int ret = PMINFO_R_OK; + char *query = NULL; + sqlite3_stmt *stmt = NULL; + const char* user_pkg_parser = NULL; + + /*open db*/ + user_pkg_parser = getUserPkgParserDBPathUID(uid); + ret = __open_manifest_db(uid); + retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, + "connect db [%s] failed!", user_pkg_parser); + + /*Start constructing query*/ + query = sqlite3_mprintf("select * from package_app_app_control"); + + /*prepare query*/ + ret = sqlite3_prepare_v2(GET_DB(manifest_db), query, strlen(query), &stmt, NULL); + tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, + "sqlite3_prepare_v2 failed[%s] : %s\n", query, sqlite3_errmsg(GET_DB(manifest_db))); + + /*step query*/ + while (sqlite3_step(stmt) == SQLITE_ROW) { + char *app_ctrl; + app_ctrl = (char *)sqlite3_column_text(stmt, 1); + if (app_ctrl == NULL) { + continue; + } + + gchar **appctrlv; + int len_acv, cnt_acv; + appctrlv = g_strsplit(app_ctrl, ";", 0); + for (len_acv = 0; appctrlv[len_acv] != NULL; len_acv++); + for (cnt_acv = 0; cnt_acv < len_acv; cnt_acv++) { + if (strncmp(OPERATION_LAUNCH_ON_EVENT, + (char *)appctrlv[cnt_acv], + strlen(OPERATION_LAUNCH_ON_EVENT)) != 0) { + continue; + } + + gchar **launch_onevt; + int len_lo; + launch_onevt = g_strsplit(appctrlv[cnt_acv], "|", 3); + for (len_lo = 0; launch_onevt[len_lo] != NULL; len_lo++); + if (len_lo > 2 && g_str_has_prefix(launch_onevt[1], "event://") && + strlen(launch_onevt[1]) > 8) { + eventsystem_info_s *esi = + (eventsystem_info_s *)calloc(1, + sizeof(eventsystem_info_s)); + esi->appid = + strdup((const char *)sqlite3_column_text(stmt, 0)); + esi->event_name = strdup((const char*)&launch_onevt[1][8]); + *es_info = g_list_append(*es_info, esi); + } + g_strfreev(launch_onevt); + } + g_strfreev(appctrlv); + } + + ret = PMINFO_R_OK; +catch: + sqlite3_free(query); + sqlite3_finalize(stmt); + __close_manifest_db(); + return ret; +} + +API int pkgmgrinfo_appinfo_get_event_launch_list_by_appid(const char *appid, GList **es_info) +{ + pkgmgrinfo_appinfo_get_usr_event_launch_list_by_appid(appid, + es_info, GLOBAL_USER); +} + +API int pkgmgrinfo_appinfo_get_usr_event_launch_list_by_appid(const char *appid, GList **es_info, uid_t uid) +{ + int ret = PMINFO_R_OK; + char *query = NULL; + sqlite3_stmt *stmt = NULL; + const char* user_pkg_parser = NULL; + + /*open db*/ + user_pkg_parser = getUserPkgParserDBPathUID(uid); + ret = __open_manifest_db(uid); + retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, + "connect db [%s] failed!", user_pkg_parser); + + /*Start constructing query*/ + query = sqlite3_mprintf("select * from package_app_app_control where app_id=%Q", + appid); + + /*prepare query*/ + ret = sqlite3_prepare_v2(GET_DB(manifest_db), query, strlen(query), &stmt, NULL); + tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, + "sqlite3_prepare_v2 failed[%s] : %s\n", query, sqlite3_errmsg(GET_DB(manifest_db))); + + /*step query*/ + while (sqlite3_step(stmt) == SQLITE_ROW) { + char *app_ctrl; + app_ctrl = (char *)sqlite3_column_text(stmt, 1); + if (app_ctrl == NULL) { + continue; + } + + gchar **appctrlv; + int len_acv, cnt_acv; + appctrlv = g_strsplit(app_ctrl, ";", 0); + for (len_acv = 0; appctrlv[len_acv] != NULL; len_acv++); + for (cnt_acv = 0; cnt_acv < len_acv; cnt_acv++) { + if (strncmp(OPERATION_LAUNCH_ON_EVENT, + (char *)appctrlv[cnt_acv], + strlen(OPERATION_LAUNCH_ON_EVENT)) != 0) { + continue; + } + + gchar **launch_onevt; + int len_lo; + launch_onevt = g_strsplit(appctrlv[cnt_acv], "|", 3); + for (len_lo = 0; launch_onevt[len_lo] != NULL; len_lo++); + if (len_lo > 2 && g_str_has_prefix(launch_onevt[1], "event://") && + strlen(launch_onevt[1]) > 8) { + eventsystem_info_s *esi = + (eventsystem_info_s *)calloc(1, + sizeof(eventsystem_info_s)); + esi->appid = strdup(appid); + esi->event_name = strdup((const char*)&launch_onevt[1][8]); + *es_info = g_list_append(*es_info, esi); + } + g_strfreev(launch_onevt); + } + g_strfreev(appctrlv); + } + + ret = PMINFO_R_OK; +catch: + sqlite3_free(query); + sqlite3_finalize(stmt); + __close_manifest_db(); + return ret; +} + API int pkgmgrinfo_appinfo_foreach_permission(pkgmgrinfo_appinfo_h handle, pkgmgrinfo_app_permission_list_cb permission_func, void *user_data) {