add api to support event system. 03/39903/1
authorJiwoong Im <jiwoong.im@samsung.com>
Tue, 26 May 2015 07:09:26 +0000 (16:09 +0900)
committerJiwoong Im <jiwoong.im@samsung.com>
Tue, 26 May 2015 07:20:26 +0000 (16:20 +0900)
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 <jiwoong.im@samsung.com>
include/pkgmgr-info.h
packaging/pkgmgr-info.spec
src/pkgmgr-info.c

index a82ab8b..79c7b5f 100644 (file)
@@ -48,6 +48,7 @@
 
 #include <errno.h>
 #include <stdbool.h>
+#include <glib.h>
 #include <unistd.h>
 #include <sys/types.h>
 
@@ -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
 **/
index b9e6c07..16a87b2 100644 (file)
@@ -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
index 46b28c0..54fd1b1 100644 (file)
@@ -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)
 {