diff --git a/0003-refresh-on-repository-change.patch b/0003-refresh-on-repository-change.patch new file mode 100644 index 0000000..3af8ef8 --- /dev/null +++ b/0003-refresh-on-repository-change.patch @@ -0,0 +1,233 @@ +From 5c203ae1b07e2c31ca39c3d6a793534d45c49125 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 5 Oct 2021 19:42:37 +0200 +Subject: [PATCH 1/5] gs-shell: Remove left-over function prototype declaration + +The function body does not exist. +--- + src/gs-shell.h | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/gs-shell.h b/src/gs-shell.h +index bb39fc928..46661db16 100644 +--- a/src/gs-shell.h ++++ b/src/gs-shell.h +@@ -43,8 +43,6 @@ typedef enum { + + GsShell *gs_shell_new (void); + void gs_shell_activate (GsShell *shell); +-void gs_shell_refresh (GsShell *shell, +- GCancellable *cancellable); + void gs_shell_change_mode (GsShell *shell, + GsShellMode mode, + gpointer data, +-- +GitLab + + +From ca49eb3974e220ff17262c6189e3cdf0a92746fe Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 5 Oct 2021 19:45:10 +0200 +Subject: [PATCH 2/5] gs-application: Introduce gs_application_refresh() + +It can be used to call a non-interactive refresh call for the plugins. +--- + src/gs-application.c | 28 ++++++++++++++++++++++++++++ + src/gs-application.h | 3 ++- + 2 files changed, 30 insertions(+), 1 deletion(-) + +diff --git a/src/gs-application.c b/src/gs-application.c +index 90487df62..df982df19 100644 +--- a/src/gs-application.c ++++ b/src/gs-application.c +@@ -1371,3 +1371,31 @@ gs_application_emit_install_resources_done (GsApplication *application, + { + g_signal_emit (application, signals[INSTALL_RESOURCES_DONE], 0, ident, op_error, NULL); + } ++ ++static void ++gs_application_refresh_cb (GsPluginLoader *plugin_loader, ++ GAsyncResult *result, ++ GsApplication *self) ++{ ++ gboolean success; ++ g_autoptr(GError) error = NULL; ++ ++ success = gs_plugin_loader_job_action_finish (plugin_loader, result, &error); ++ if (!success && ++ !g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) ++ g_warning ("failed to refresh: %s", error->message); ++} ++ ++void ++gs_application_refresh (GsApplication *self) ++{ ++ g_autoptr(GsPluginJob) plugin_job = NULL; ++ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH, ++ "interactive", FALSE, ++ "age", (guint64) 1, ++ NULL); ++ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job, ++ self->cancellable, ++ (GAsyncReadyCallback) gs_application_refresh_cb, ++ self); ++} +diff --git a/src/gs-application.h b/src/gs-application.h +index 40bad4d4c..92978e1f5 100644 +--- a/src/gs-application.h ++++ b/src/gs-application.h +@@ -23,4 +23,5 @@ gboolean gs_application_has_active_window (GsApplication *application); + void gs_application_emit_install_resources_done + (GsApplication *application, + const gchar *ident, +- const GError *op_error); +\ No newline at end of file ++ const GError *op_error); ++void gs_application_refresh (GsApplication *self); +-- +GitLab + + +From 2781d350a9a9ee1fd2078928f4e0933a34e05b9f Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Tue, 5 Oct 2021 19:46:17 +0200 +Subject: [PATCH 3/5] gs-repos-dialog: Call refresh on repository setup change + +When a repository is enabled/disabled/removed, call also the refresh +on the plugins, thus the data from those repos are available for the user. + +Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1486 +--- + src/gs-repos-dialog.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/src/gs-repos-dialog.c b/src/gs-repos-dialog.c +index 1d6a82f48..c986ad724 100644 +--- a/src/gs-repos-dialog.c ++++ b/src/gs-repos-dialog.c +@@ -13,6 +13,7 @@ + #include "gs-repos-dialog.h" + + #include "gnome-software-private.h" ++#include "gs-application.h" + #include "gs-common.h" + #include "gs-os-release.h" + #include "gs-repo-row.h" +@@ -35,6 +36,8 @@ struct _GsReposDialog + GtkWidget *content_page; + GtkWidget *spinner; + GtkWidget *stack; ++ ++ gboolean changed; + }; + + G_DEFINE_TYPE (GsReposDialog, gs_repos_dialog, HDY_TYPE_WINDOW) +@@ -115,6 +118,8 @@ repo_enabled_cb (GObject *source, + } + + g_debug ("finished %s repo %s", action_str, gs_app_get_id (install_remove_data->repo)); ++ ++ install_remove_data->dialog->changed = TRUE; + } + + static void +@@ -710,6 +715,17 @@ gs_repos_dialog_dispose (GObject *object) + g_clear_object (&dialog->cancellable); + g_clear_object (&dialog->settings); + ++ if (dialog->changed) { ++ GApplication *app; ++ ++ dialog->changed = FALSE; ++ g_debug ("Repository setup changed, calling refresh..."); ++ ++ app = g_application_get_default (); ++ if (app) ++ gs_application_refresh (GS_APPLICATION (app)); ++ } ++ + G_OBJECT_CLASS (gs_repos_dialog_parent_class)->dispose (object); + } + +-- +GitLab + + +From 4c6f4f20c904600a3c5d8ea446ed3c3b0ef0808d Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Wed, 6 Oct 2021 14:41:55 +0200 +Subject: [PATCH 4/5] gs-application: Invoke page reload after the refresh is + finished + +The refresh can cause new applications or alternative sources being +found in the newly enabled repositories, thus reload the pages, to +reflect the current state. +--- + src/gs-application.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/gs-application.c b/src/gs-application.c +index df982df19..6ecc093f1 100644 +--- a/src/gs-application.c ++++ b/src/gs-application.c +@@ -1384,6 +1384,9 @@ gs_application_refresh_cb (GsPluginLoader *plugin_loader, + if (!success && + !g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) + g_warning ("failed to refresh: %s", error->message); ++ ++ if (success) ++ g_signal_emit_by_name (self->plugin_loader, "reload", 0, NULL); + } + + void +-- +GitLab + + +From b1277d97ba4495de434eb3be4ea1f17b80ac1ef8 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Wed, 6 Oct 2021 14:44:09 +0200 +Subject: [PATCH 5/5] gs-overview-page: Refresh the application after + third-party repositories enable/disable + +The enable/disable can cause other applications being found, thus call +the refresh, to update the repositories information. +--- + src/gs-overview-page.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/gs-overview-page.c b/src/gs-overview-page.c +index 9ba33fb2b..bcf02243d 100644 +--- a/src/gs-overview-page.c ++++ b/src/gs-overview-page.c +@@ -13,6 +13,7 @@ + #include + #include + ++#include "gs-application.h" + #include "gs-shell.h" + #include "gs-overview-page.h" + #include "gs-app-list-private.h" +@@ -568,6 +569,8 @@ third_party_response_cb (GtkInfoBar *info_bar, + gint response_id, + GsOverviewPage *self) + { ++ GApplication *application; ++ + if (response_id == GTK_RESPONSE_YES) + fedora_third_party_enable (self); + else +@@ -575,6 +578,10 @@ third_party_response_cb (GtkInfoBar *info_bar, + + self->third_party_needs_question = FALSE; + refresh_third_party_repo (self); ++ ++ application = g_application_get_default (); ++ if (application) ++ gs_application_refresh (GS_APPLICATION (application)); + } + + static gboolean +-- +GitLab + diff --git a/gnome-software.spec b/gnome-software.spec index cbc22a8..3d5d2f8 100644 --- a/gnome-software.spec +++ b/gnome-software.spec @@ -12,7 +12,7 @@ Name: gnome-software Version: 41.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A software center for GNOME License: GPLv2+ @@ -21,6 +21,7 @@ Source0: https://download.gnome.org/sources/gnome-software/41/%{name}-%{tarbal Patch01: 0001-crash-with-broken-theme.patch Patch02: 0002-correct-update-notifications.patch +Patch03: 0003-refresh-on-repository-change.patch BuildRequires: appstream-devel >= %{appstream_version} BuildRequires: gcc @@ -203,6 +204,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_datadir}/gtk-doc/html/gnome-software %changelog +* Thu Oct 07 2021 Milan Crha - 41.0-3 +- Resolves: #2010740 (Refresh on repository setup change) + * Mon Oct 04 2021 Milan Crha - 41.0-2 - Resolves: #2009063 (Correct update notifications)