Use %license macro to copy license file
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_appinfo.c
index 6d9bc49..a25f671 100644 (file)
@@ -91,6 +91,28 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
                condition = NULL;
        }
 
+       if (filter->list_metadata) {
+               len += strlen(" AND (");
+               strncat(buf, " AND (", MAX_QUERY_LEN - len - 1);
+       }
+       for (list = filter->list_metadata; list; list = list->next) {
+               joined |= __get_metadata_filter_condition(list->data,
+                               &condition, bind_params);
+               if (condition == NULL)
+                       continue;
+               len += strlen(condition);
+               strncat(buf, condition, sizeof(buf) - len - 1);
+               free(condition);
+               condition = NULL;
+
+               len += strlen(" OR ");
+               strncat(buf, " OR ", MAX_QUERY_LEN - len - 1);
+       }
+       if (filter->list_metadata) {
+               len += strlen("1=0)");
+               strncat(buf, "1=0)", MAX_QUERY_LEN - len - 1);
+       }
+
        if (joined & E_PMINFO_APPINFO_JOIN_LOCALIZED_INFO) {
                strncat(tmp_query, join_localized_info, MAX_QUERY_LEN - len - 1);
                len += strlen(join_localized_info);
@@ -1428,6 +1450,12 @@ API int pkgmgrinfo_appinfo_get_usr_installed_list_full(
                return PMINFO_R_ERROR;
        }
 
+       if (pkgmgrinfo_appinfo_filter_add_bool(filter,
+                       PMINFO_APPINFO_PROP_APP_CHECK_STORAGE, false)) {
+               pkgmgrinfo_appinfo_filter_destroy(filter);
+               return PMINFO_R_ERROR;
+       }
+
        ret = _appinfo_get_filtered_foreach_appinfo(uid, filter, flag, app_func,
                        user_data);
 
@@ -1443,20 +1471,6 @@ API int pkgmgrinfo_appinfo_get_installed_list_full(
                        _getuid(), flag, user_data);
 }
 
-API int pkgmgrinfo_appinfo_get_usr_install_list(pkgmgrinfo_app_list_cb app_func,
-               uid_t uid, void *user_data)
-{
-       return pkgmgrinfo_appinfo_get_usr_installed_list_full(app_func,
-                       uid, PMINFO_APPINFO_GET_ALL, user_data);
-}
-
-API int pkgmgrinfo_appinfo_get_install_list(pkgmgrinfo_app_list_cb app_func,
-               void *user_data)
-{
-       return pkgmgrinfo_appinfo_get_usr_installed_list_full(app_func,
-                       _getuid(), PMINFO_APPINFO_GET_ALL, user_data);
-}
-
 API int pkgmgrinfo_appinfo_get_usr_installed_list(
                pkgmgrinfo_app_list_cb app_func, uid_t uid, void *user_data)
 {
@@ -3067,23 +3081,30 @@ API int pkgmgrinfo_appinfo_metadata_filter_add(
                pkgmgrinfo_appinfo_metadata_filter_h handle,
                const char *key, const char *value)
 {
-       int ret;
-
-       ret = pkgmgrinfo_appinfo_filter_add_string(handle,
-                       PMINFO_APPINFO_PROP_APP_METADATA_KEY, key);
-       if (ret != PMINFO_R_OK)
-               return ret;
+       pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x *)handle;
+       pkgmgrinfo_metadata_node_x *node;
 
        /* value can be NULL.
         * In that case all apps with specified key should be displayed
         */
-       if (value && strlen(value)) {
-               ret = pkgmgrinfo_appinfo_filter_add_string(handle,
-                               PMINFO_APPINFO_PROP_APP_METADATA_VALUE, value);
-               if (ret != PMINFO_R_OK)
-                       return ret;
+       if (key == NULL) {
+               LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       node = calloc(1, sizeof(pkgmgrinfo_metadata_node_x));
+       if (node == NULL) {
+               LOGE("out of memory");
+               return PMINFO_R_ERROR;
        }
 
+       node->key = strdup(key);
+       if (value && strlen(value))
+               node->value = strdup(value);
+
+       filter->list_metadata = g_slist_append(filter->list_metadata,
+                       (gpointer)node);
+
        return PMINFO_R_OK;
 }