[gnome-software: 7/24] gs-plugin-job: Add helper function for SEARCH_FILES jobs




commit 3d08c9ac3fa1bbac5e553f2feb04702650571bd9
Author: Philip Withnall <pwithnall endlessos org>
Date:   Fri Apr 8 16:47:46 2022 +0100

    gs-plugin-job: Add helper function for SEARCH_FILES jobs
    
    This creates a `GsPluginJob` for a `SEARCH_FILES` action. In
    subsequent commits it will be turned into a full `GsPluginJob`
    subclass; this commit is factored out first so the call sites don’t
    have to change again later.
    
    Signed-off-by: Philip Withnall <pwithnall endlessos org>
    
    Helps: #1472

 lib/gnome-software.h          |  1 +
 lib/gs-plugin-job-list-apps.c | 47 +++++++++++++++++++++++++++++++++++++++++++
 lib/gs-plugin-job-list-apps.h | 25 +++++++++++++++++++++++
 lib/meson.build               |  2 ++
 src/gs-extras-page.c          | 13 ++++++++----
 5 files changed, 84 insertions(+), 4 deletions(-)
---
diff --git a/lib/gnome-software.h b/lib/gnome-software.h
index 8c3bd4f15..cbbd215ac 100644
--- a/lib/gnome-software.h
+++ b/lib/gnome-software.h
@@ -28,6 +28,7 @@
 #include <gs-plugin.h>
 #include <gs-plugin-helpers.h>
 #include <gs-plugin-job.h>
+#include <gs-plugin-job-list-apps.h>
 #include <gs-plugin-job-list-distro-upgrades.h>
 #include <gs-plugin-job-list-installed-apps.h>
 #include <gs-plugin-job-refine.h>
diff --git a/lib/gs-plugin-job-list-apps.c b/lib/gs-plugin-job-list-apps.c
new file mode 100644
index 000000000..06eb447ec
--- /dev/null
+++ b/lib/gs-plugin-job-list-apps.c
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2022 Endless OS Foundation LLC
+ *
+ * Author: Philip Withnall <pwithnall endlessos org>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <glib.h>
+
+#include "gs-app-query.h"
+#include "gs-plugin-job.h"
+#include "gs-plugin-job-list-apps.h"
+#include "gs-plugin-types.h"
+
+/**
+ * gs_plugin_job_list_apps_new:
+ * @query: (nullable) (transfer none): query to affect which apps to return
+ * @flags: flags affecting how the operation runs
+ *
+ * Create a new #GsPluginJobListApps for listing apps according to the given
+ * @query.
+ *
+ * Returns: (transfer full): a new #GsPluginJobListApps
+ * Since: 43
+ */
+GsPluginJob *
+gs_plugin_job_list_apps_new (GsAppQuery            *query,
+                             GsPluginListAppsFlags  flags)
+{
+       g_autofree gchar *search = NULL;
+       GsPluginRefineFlags refine_flags = GS_PLUGIN_REFINE_FLAGS_NONE;
+
+       g_return_val_if_fail (query == NULL || GS_IS_APP_QUERY (query), NULL);
+
+       if (query != NULL && gs_app_query_get_provides_files (query) != NULL) {
+               search = g_strjoinv (" ", (gchar **) gs_app_query_get_provides_files (query));
+               refine_flags = gs_app_query_get_refine_flags (query);
+       }
+
+       return gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH_FILES,
+                                  "search", search,
+                                  "refine-flags", refine_flags,
+                                  NULL);
+}
diff --git a/lib/gs-plugin-job-list-apps.h b/lib/gs-plugin-job-list-apps.h
new file mode 100644
index 000000000..23450c90c
--- /dev/null
+++ b/lib/gs-plugin-job-list-apps.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2022 Endless OS Foundation LLC
+ *
+ * Author: Philip Withnall <pwithnall endlessos org>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gio/gio.h>
+
+#include "gs-app-query.h"
+#include "gs-plugin-job.h"
+
+G_BEGIN_DECLS
+
+GsPluginJob    *gs_plugin_job_list_apps_new    (GsAppQuery            *query,
+                                                GsPluginListAppsFlags  flags);
+
+G_END_DECLS
diff --git a/lib/meson.build b/lib/meson.build
index 7ec69acb2..34c9ba946 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -23,6 +23,7 @@ libgnomesoftware_public_headers = [
   'gs-plugin-event.h',
   'gs-plugin-helpers.h',
   'gs-plugin-job.h',
+  'gs-plugin-job-list-apps.h',
   'gs-plugin-job-list-distro-upgrades.h',
   'gs-plugin-job-list-installed-apps.h',
   'gs-plugin-job-refine.h',
@@ -104,6 +105,7 @@ libgnomesoftware = library(
     'gs-plugin-event.c',
     'gs-plugin-helpers.c',
     'gs-plugin-job.c',
+    'gs-plugin-job-list-apps.c',
     'gs-plugin-job-list-distro-upgrades.c',
     'gs-plugin-job-list-installed-apps.c',
     'gs-plugin-job-refine.c',
diff --git a/src/gs-extras-page.c b/src/gs-extras-page.c
index 44bfd8257..2e0c4bbdf 100644
--- a/src/gs-extras-page.c
+++ b/src/gs-extras-page.c
@@ -738,10 +738,15 @@ gs_extras_page_load (GsExtrasPage *self, GPtrArray *array_search_data)
                search_data = g_ptr_array_index (self->array_search_data, i);
                if (search_data->search_filename != NULL) {
                        g_autoptr(GsPluginJob) plugin_job = NULL;
-                       plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH_FILES,
-                                                        "search", search_data->search_filename,
-                                                        "refine-flags", refine_flags,
-                                                        NULL);
+                       g_autoptr(GsAppQuery) query = NULL;
+                       const gchar *provides_files[2] = { search_data->search_filename, NULL };
+
+                       query = gs_app_query_new ("provides-files", provides_files,
+                                                 "refine-flags", refine_flags,
+                                                 NULL);
+
+                       plugin_job = gs_plugin_job_list_apps_new (query, 
GS_PLUGIN_LIST_APPS_FLAGS_INTERACTIVE);
+
                        g_debug ("searching filename: '%s'", search_data->search_filename);
                        gs_plugin_loader_job_process_async (self->plugin_loader,
                                                            plugin_job,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]