[gnome-software: 7/24] gs-plugin-job: Add helper function for SEARCH_FILES jobs
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 7/24] gs-plugin-job: Add helper function for SEARCH_FILES jobs
- Date: Tue, 3 May 2022 12:52:06 +0000 (UTC)
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]