summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2016-08-04 21:18:57 +0100
committerRichard Hughes <richard@hughsie.com>2016-08-04 21:27:49 +0100
commit0bf85282254910808c60a1a68152b9715d055d0e (patch)
tree2e19aafad495bbb7fdce97b075fb6b6f2383d6fa /client
parent86ebfd1d4b94f626a2d5aeb3843b5c551e06447d (diff)
downloadappstream-glib-0bf85282254910808c60a1a68152b9715d055d0e.tar.gz
Support merge components
This allows us to match soon-to-be-specified merge components to every component in the store.
Diffstat (limited to 'client')
-rw-r--r--client/as-util.c62
1 files changed, 61 insertions, 1 deletions
diff --git a/client/as-util.c b/client/as-util.c
index 84648b3..77482f2 100644
--- a/client/as-util.c
+++ b/client/as-util.c
@@ -1200,7 +1200,9 @@ as_util_search (AsUtilPrivate *priv, gchar **values, GError **error)
/* load system database */
store = as_store_new ();
- as_store_set_add_flags (store, AS_STORE_ADD_FLAG_USE_UNIQUE_ID);
+ as_store_set_add_flags (store,
+ AS_STORE_ADD_FLAG_USE_UNIQUE_ID |
+ AS_STORE_ADD_FLAG_USE_MERGE_HEURISTIC);
if (!as_store_load (store,
AS_STORE_LOAD_FLAG_IGNORE_INVALID |
AS_STORE_LOAD_FLAG_APP_INFO_SYSTEM |
@@ -1254,6 +1256,9 @@ as_util_search_pkgname (AsUtilPrivate *priv, gchar **values, GError **error)
/* load system database */
store = as_store_new ();
+ as_store_set_add_flags (store,
+ AS_STORE_ADD_FLAG_USE_UNIQUE_ID |
+ AS_STORE_ADD_FLAG_USE_MERGE_HEURISTIC);
if (!as_store_load (store,
AS_STORE_LOAD_FLAG_IGNORE_INVALID |
AS_STORE_LOAD_FLAG_APP_INFO_SYSTEM |
@@ -1273,6 +1278,55 @@ as_util_search_pkgname (AsUtilPrivate *priv, gchar **values, GError **error)
return TRUE;
}
+static gboolean
+as_util_search_category (AsUtilPrivate *priv, gchar **values, GError **error)
+{
+ GPtrArray *apps;
+ guint i, j;
+ g_autoptr(AsStore) store = NULL;
+
+ /* check args */
+ if (g_strv_length (values) < 1) {
+ g_set_error_literal (error,
+ AS_ERROR,
+ AS_ERROR_INVALID_ARGUMENTS,
+ "Not enough arguments, "
+ "expected search terms");
+ return FALSE;
+ }
+
+ /* load system database */
+ store = as_store_new ();
+ as_store_set_add_flags (store,
+ AS_STORE_ADD_FLAG_USE_UNIQUE_ID |
+ AS_STORE_ADD_FLAG_USE_MERGE_HEURISTIC);
+ if (!as_store_load (store,
+ AS_STORE_LOAD_FLAG_IGNORE_INVALID |
+ AS_STORE_LOAD_FLAG_APP_INFO_SYSTEM |
+ AS_STORE_LOAD_FLAG_APP_INFO_USER |
+ AS_STORE_LOAD_FLAG_APPDATA |
+ AS_STORE_LOAD_FLAG_DESKTOP,
+ NULL, error))
+ return FALSE;
+
+ /* find by source */
+ apps = as_store_get_apps (store);
+ for (j = 0; j < apps->len; j++) {
+ gboolean found = FALSE;
+ AsApp *app = g_ptr_array_index (apps, j);
+ for (i = 0; values[i] != NULL; i++) {
+ if (as_app_has_category (app, values[i])) {
+ found = TRUE;
+ break;
+ }
+ }
+ if (!found)
+ continue;
+ g_print ("%s\n", as_app_get_unique_id (app));
+ }
+ return TRUE;
+}
+
static gint
as_util_search_token_sort_cb (gconstpointer a, gconstpointer b, gpointer user_data)
{
@@ -3876,6 +3930,12 @@ main (int argc, char *argv[])
_("Search for AppStream applications by package name"),
as_util_search_pkgname);
as_util_add (priv->cmd_array,
+ "search-category",
+ NULL,
+ /* TRANSLATORS: command description */
+ _("Search for AppStream applications by category name"),
+ as_util_search_category);
+ as_util_add (priv->cmd_array,
"show-search-tokens",
NULL,
/* TRANSLATORS: command description */