Change column name defined in query
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_appinfo.c
index b6d22b2..f1c3665 100644 (file)
@@ -61,13 +61,19 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
        char *condition = NULL;
        char buf[MAX_QUERY_LEN] = { '\0' };
        char tmp_query[MAX_QUERY_LEN] = { '\0' };
+       static const char query_pkg_disable[] = " AND ai.package IN "
+                       "(SELECT package FROM package_info WHERE package_disable='false')";
        GSList *list;
 
-       if (filter == NULL)
-               return PMINFO_R_OK;
-
        len += strlen(" WHERE 1=1");
        strncat(buf, " WHERE 1=1", MAX_QUERY_LEN - len - 1);
+
+       if (filter == NULL) {
+               strncat(buf, query_pkg_disable, MAX_QUERY_LEN - len - 1);
+               *query = strdup(buf);
+               return PMINFO_R_OK;
+       }
+
        for (list = filter->list; list; list = list->next) {
                joined |= __get_filter_condition(list->data, &condition, bind_params);
                if (condition == NULL)
@@ -101,6 +107,9 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
        }
        strncat(tmp_query, buf, MAX_QUERY_LEN - len - 1);
 
+       len += strlen(buf);
+       strncat(tmp_query, query_pkg_disable, MAX_QUERY_LEN - len - 1);
+
        *query = strdup(tmp_query);
        if (*query == NULL)
                return PMINFO_R_ERROR;
@@ -463,7 +472,9 @@ static int _appinfo_get_applications(uid_t db_uid, uid_t uid,
                "ai.app_package_type, ai.app_root_path, ai.app_api_version, "
                "ai.app_effective_appid, ai.app_disable, "
                "ai.app_splash_screen_display, ai.app_tep_name, "
-               "ai.app_zip_mount_file, ai.component_type, ai.package";
+               "ai.app_zip_mount_file, ai.component_type, ai.package, "
+               "ai.app_external_path, ai.app_package_system, ai.app_removable, "
+               "ai.app_package_installed_time, ai.app_support_mode";
        static const char query_label[] =
                ", COALESCE("
                "(SELECT app_label FROM package_app_localized_info WHERE ai.app_id=app_id AND app_locale=?), "
@@ -590,6 +601,12 @@ static int _appinfo_get_applications(uid_t db_uid, uid_t uid,
                _save_column_str(stmt, idx++, &info->zip_mount_file);
                _save_column_str(stmt, idx++, &info->component_type);
                _save_column_str(stmt, idx++, &info->package);
+               _save_column_str(stmt, idx++, &info->external_path);
+               _save_column_str(stmt, idx++, &info->package_system);
+               _save_column_str(stmt, idx++, &info->removable);
+               _save_column_str(stmt, idx++, &info->package_installed_time);
+               _save_column_str(stmt, idx++, &info->support_mode);
+
                info->for_all_users =
                        strdup((uid != GLOBAL_USER) ? "false" : "true");
 
@@ -659,6 +676,13 @@ static int _appinfo_get_applications(uid_t db_uid, uid_t uid,
                        }
                }
 
+               if (__appinfo_check_installed_storage(info) != PMINFO_R_OK) {
+                       ret = PMINFO_R_ERROR;
+                       pkgmgrinfo_basic_free_application(info);
+                       info = NULL;
+                       continue;
+               }
+
                g_hash_table_insert(applications, (gpointer)info->appid,
                                (gpointer)info);
        }
@@ -1607,7 +1631,7 @@ API int pkgmgrinfo_appinfo_get_metadata_value(pkgmgrinfo_appinfo_h handle, const
                                if (metadata->value == NULL)
                                        *metadata_value = "";
                                else
-                                       *metadata_value = (char*)metadata->value;
+                                       *metadata_value = (char *)metadata->value;
                                return PMINFO_R_OK;
                        }
                }
@@ -2120,6 +2144,23 @@ API int pkgmgrinfo_appinfo_get_api_version(pkgmgrinfo_appinfo_h handle, char **a
        return PMINFO_R_OK;
 }
 
+API int pkgmgrinfo_appinfo_get_installed_time(pkgmgrinfo_appinfo_h handle, int *installed_time)
+{
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       if (handle == NULL || installed_time == NULL) {
+               LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       if (info->app_info == NULL || info->app_info->package_installed_time == NULL)
+               return PMINFO_R_ERROR;
+
+       *installed_time = atoi(info->app_info->package_installed_time);
+
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_appinfo_usr_get_datacontrol_info(const char *providerid, const char *type, uid_t uid, char **appid, char **access)
 {
        retvm_if(providerid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
@@ -2205,6 +2246,20 @@ API int pkgmgrinfo_appinfo_get_datacontrol_appid(const char *providerid, char **
        return pkgmgrinfo_appinfo_usr_get_datacontrol_appid(providerid, _getuid(), appid);
 }
 
+API int pkgmgrinfo_appinfo_get_support_mode(pkgmgrinfo_appinfo_h  handle, int *support_mode)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
+       retvm_if(support_mode == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
+
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       if (info->app_info->support_mode)
+               *support_mode = atoi(info->app_info->support_mode);
+       else
+               *support_mode = 0;
+
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_appinfo_foreach_permission(pkgmgrinfo_appinfo_h handle,
                        pkgmgrinfo_app_permission_list_cb permission_func, void *user_data)
 {
@@ -2581,6 +2636,35 @@ API int pkgmgrinfo_appinfo_is_support_disable(pkgmgrinfo_appinfo_h handle,
        return PMINFO_R_OK;
 }
 
+API int pkgmgrinfo_appinfo_is_removable(pkgmgrinfo_appinfo_h handle,
+               bool *removable)
+{
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       if (info == NULL || info->app_info == NULL || removable == NULL) {
+               _LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       *removable = _get_bool_value(info->app_info->removable);
+
+       return PMINFO_R_OK;
+}
+
+API int pkgmgrinfo_appinfo_is_system(pkgmgrinfo_appinfo_h handle, bool *system)
+{
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+
+       if (info == NULL || info->app_info == NULL || system == NULL) {
+               _LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       *system = _get_bool_value(info->app_info->package_system);
+
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_appinfo_is_disabled(pkgmgrinfo_appinfo_h handle, bool *disabled)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
@@ -2647,8 +2731,8 @@ API int pkgmgrinfo_appinfo_filter_destroy(pkgmgrinfo_appinfo_filter_h handle)
 
 static gint __compare_func(gconstpointer data1, gconstpointer data2)
 {
-       pkgmgrinfo_node_x *node1 = (pkgmgrinfo_node_x*)data1;
-       pkgmgrinfo_node_x *node2 = (pkgmgrinfo_node_x*)data2;
+       pkgmgrinfo_node_x *node1 = (pkgmgrinfo_node_x *)data1;
+       pkgmgrinfo_node_x *node2 = (pkgmgrinfo_node_x *)data2;
        if (node1->prop == node2->prop)
                return 0;
        else if (node1->prop > node2->prop)
@@ -2672,8 +2756,8 @@ API int pkgmgrinfo_appinfo_filter_add_int(pkgmgrinfo_appinfo_filter_h handle,
                _LOGE("Invalid Integer Property\n");
                return PMINFO_R_EINVAL;
        }
-       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
-       pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x*)calloc(1, sizeof(pkgmgrinfo_node_x));
+       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x *)handle;
+       pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x *)calloc(1, sizeof(pkgmgrinfo_node_x));
        if (node == NULL) {
                _LOGE("Out of Memory!!!\n");
                return PMINFO_R_ERROR;
@@ -2712,8 +2796,8 @@ API int pkgmgrinfo_appinfo_filter_add_bool(pkgmgrinfo_appinfo_filter_h handle,
                _LOGE("Invalid Boolean Property\n");
                return PMINFO_R_EINVAL;
        }
-       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
-       pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x*)calloc(1, sizeof(pkgmgrinfo_node_x));
+       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x *)handle;
+       pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x *)calloc(1, sizeof(pkgmgrinfo_node_x));
        if (node == NULL) {
                _LOGE("Out of Memory!!!\n");
                return PMINFO_R_ERROR;
@@ -2758,8 +2842,8 @@ API int pkgmgrinfo_appinfo_filter_add_string(pkgmgrinfo_appinfo_filter_h handle,
                _LOGE("Invalid String Property\n");
                return PMINFO_R_EINVAL;
        }
-       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x*)handle;
-       pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x*)calloc(1, sizeof(pkgmgrinfo_node_x));
+       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x *)handle;
+       pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x *)calloc(1, sizeof(pkgmgrinfo_node_x));
        if (node == NULL) {
                _LOGE("Out of Memory!!!\n");
                return PMINFO_R_ERROR;
@@ -2872,7 +2956,7 @@ API int pkgmgrinfo_appinfo_usr_filter_foreach_appinfo(
 }
 
 API int pkgmgrinfo_appinfo_filter_foreach_appinfo(pkgmgrinfo_appinfo_filter_h handle,
-                               pkgmgrinfo_app_list_cb app_cb, void * user_data)
+                               pkgmgrinfo_app_list_cb app_cb, void *user_data)
 {
        return pkgmgrinfo_appinfo_usr_filter_foreach_appinfo(handle, app_cb, user_data, _getuid());
 }