X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git;a=blobdiff_plain;f=src%2Fpkgmgrinfo_appinfo.c;h=bc420926eb0ca65ff5b3c6f296fad460bba64959;hp=3ea034fa3dedced3ffa1dac56ce4c1ccfad834c2;hb=8dcd34312e0012d1509e623daedfb43388889a94;hpb=aa88d97f98ae9093f07947ec8397e15e07e1dac3 diff --git a/src/pkgmgrinfo_appinfo.c b/src/pkgmgrinfo_appinfo.c index 3ea034f..bc42092 100644 --- a/src/pkgmgrinfo_appinfo.c +++ b/src/pkgmgrinfo_appinfo.c @@ -332,6 +332,52 @@ static int _appinfo_get_splashscreens(sqlite3 *db, const char *appid, return PMINFO_R_OK; } +static int _appinfo_get_component_info(sqlite3 *db, const char *appid, + GList **components) +{ + static const char query_raw[] = + "SELECT component_id, type, launch_mode " + "FROM package_app_component_info " + "WHERE app_id=%Q"; + int ret; + char *query; + sqlite3_stmt *stmt; + int idx; + component_x *info; + + query = sqlite3_mprintf(query_raw, appid); + if (query == NULL) { + LOGE("out of memory"); + return PMINFO_R_ERROR; + } + + ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL); + sqlite3_free(query); + if (ret != SQLITE_OK) { + LOGE("prepare failed: %s", sqlite3_errmsg(db)); + return PMINFO_R_ERROR; + } + + while (sqlite3_step(stmt) == SQLITE_ROW) { + info = calloc(1, sizeof(component_x)); + if (info == NULL) { + LOGE("out of memory"); + sqlite3_finalize(stmt); + return PMINFO_R_ERROR; + } + + idx = 0; + _save_column_str(stmt, idx++, &info->id); + _save_column_str(stmt, idx++, &info->type); + _save_column_str(stmt, idx++, &info->launch_mode); + *components = g_list_append(*components, info); + } + + sqlite3_finalize(stmt); + + return PMINFO_R_OK; +} + static GList *__get_background_category(const char *value) { GList *category_list = NULL; @@ -703,6 +749,15 @@ static int _appinfo_get_applications(uid_t db_uid, uid_t uid, } } + if (info->component && + !strcmp(info->component, "componentbasedapp")) { + if (_appinfo_get_component_info(db, info->appid, + &info->components)) { + ret = PMINFO_R_ERROR; + goto catch; + } + } + if (is_check_storage && __appinfo_check_installed_storage(info) != PMINFO_R_OK) { ret = PMINFO_R_ERROR; @@ -1080,6 +1135,28 @@ static gpointer __copy_splashscreens(gconstpointer src, gpointer data) return splashscreen; } +static gpointer __copy_components(gconstpointer src, gpointer data) +{ + component_x *tmp = (component_x *)src; + component_x *component; + + component = (component_x *)calloc(1, sizeof(component_x)); + if (component == NULL) { + LOGE("memory alloc failed"); + *(int *)data = -1; + return NULL; + } + + if (tmp->id) + component->id = strdup(tmp->id); + if (tmp->type) + component->type = strdup(tmp->type); + if (tmp->launch_mode) + component->launch_mode = strdup(tmp->launch_mode); + + return component; +} + static int _appinfo_copy_appinfo(application_x **application, application_x *data) { application_x *app_info; @@ -1223,6 +1300,15 @@ static int _appinfo_copy_appinfo(application_x **application, application_x *dat return PMINFO_R_ERROR; } + ret = 0; + app_info->components = g_list_copy_deep(data->components, + __copy_components, &ret); + if (ret < 0) { + LOGE("memory alloc failed"); + pkgmgrinfo_basic_free_application(app_info); + return PMINFO_R_ERROR; + } + *application = app_info; return PMINFO_R_OK; @@ -1725,6 +1811,8 @@ static pkgmgrinfo_app_component __appcomponent_convert(const char *comp) return PMINFO_WIDGET_APP; else if (strcasecmp(comp, "watchapp") == 0) return PMINFO_WATCH_APP; + else if (strcasecmp(comp, "componentbasedapp") == 0) + return PMINFO_COMPONENT_BASED_APP; else return -1; } @@ -1740,6 +1828,8 @@ static const char *__appcomponent_str(pkgmgrinfo_app_component comp) return "widgetapp"; case PMINFO_WATCH_APP: return "watchapp"; + case PMINFO_COMPONENT_BASED_APP: + return "componentbasedapp"; default: return NULL; } @@ -3687,3 +3777,25 @@ API int pkgmgrinfo_appinfo_foreach_remote_appcontrol_v2( return PMINFO_R_OK; } + +API int pkgmgrinfo_appinfo_foreach_component_info(pkgmgrinfo_appinfo_h handle, + pkgmgrinfo_component_info_list_cb callback, void *user_data) +{ + retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL"); + retvm_if(callback == NULL, PMINFO_R_EINVAL, "callback is NULL"); + pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle; + pkgmgr_compinfo_x compinfo; + GList *tmp; + + if (info->app_info == NULL) + return PMINFO_R_ERROR; + + compinfo.appid = info->app_info->appid; + for (tmp = info->app_info->components; tmp; tmp = tmp->next) { + compinfo.comp_info = (component_x *)tmp->data; + if (callback(&compinfo, user_data) < 0) + break; + } + + return PMINFO_R_OK; +}