From 8364f631e3c6e333f9ac7ba39af7a5d5890d52ca Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 21 Jun 2023 11:00:48 +0200 Subject: [PATCH 1/8] Misc: Markup-escape text passed to adw_status_page_set_description() The AdwStatusPage::description expects a markup-safe text, because the description can contain the markup (in contrast to title, which is a plain text only). Escape the text to make it markup safe. Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1970 --- src/gs-app-details-page.c | 4 +++- src/gs-repos-dialog.c | 4 ++-- src/gs-updates-page.c | 10 ++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/gs-app-details-page.c b/src/gs-app-details-page.c index 944a78e0f..63a9d8ffb 100644 --- a/src/gs-app-details-page.c +++ b/src/gs-app-details-page.c @@ -160,6 +160,7 @@ set_updates_description_ui (GsAppDetailsPage *page, GsApp *app) const gchar *update_details; GdkDisplay *display; g_autoptr (GtkIconPaintable) paintable = NULL; + g_autofree gchar *escaped_summary = NULL; /* FIXME support app == NULL */ @@ -175,8 +176,9 @@ set_updates_description_ui (GsAppDetailsPage *page, GsApp *app) update_details = _("No update description available."); } gtk_label_set_markup (GTK_LABEL (page->label_details), update_details); + escaped_summary = g_markup_escape_text (gs_app_get_summary (app), -1); adw_status_page_set_title (ADW_STATUS_PAGE (page->status_page), gs_app_get_name (app)); - adw_status_page_set_description (ADW_STATUS_PAGE (page->status_page), gs_app_get_summary (app)); + adw_status_page_set_description (ADW_STATUS_PAGE (page->status_page), escaped_summary); /* set the icon; fall back to 64px if 96px isn’t available, which sometimes * happens at 2× scale factor (hi-DPI) */ diff --git a/src/gs-repos-dialog.c b/src/gs-repos-dialog.c index 2a5af76a9..3151eae64 100644 --- a/src/gs-repos-dialog.c +++ b/src/gs-repos-dialog.c @@ -724,8 +724,8 @@ gs_repos_dialog_init (GsReposDialog *dialog) /* TRANSLATORS: This is the description text displayed in the Software Repositories dialog. %s gets replaced by the name of the actual distro, e.g. Fedora. */ - label_empty_text = g_strdup_printf (_("These repositories supplement the default software provided by %s."), - os_name); + label_empty_text = g_markup_printf_escaped (_("These repositories supplement the default software provided by %s."), + os_name); adw_status_page_set_description (ADW_STATUS_PAGE (dialog->status_empty), label_empty_text); } diff --git a/src/gs-updates-page.c b/src/gs-updates-page.c index 223a7b1ea..8e5752846 100644 --- a/src/gs-updates-page.c +++ b/src/gs-updates-page.c @@ -439,12 +439,13 @@ gs_updates_page_get_updates_cb (GsPluginLoader *plugin_loader, /* get the results */ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error); if (list == NULL) { + g_autofree gchar *escaped_text = NULL; gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPDATES); if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) g_warning ("updates-shell: failed to get updates: %s", error->message); - adw_status_page_set_description (ADW_STATUS_PAGE (self->updates_failed_page), - error->message); + escaped_text = g_markup_escape_text (error->message, -1); + adw_status_page_set_description (ADW_STATUS_PAGE (self->updates_failed_page), escaped_text); gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_FAILED); refresh_headerbar_updates_counter (self); return; @@ -723,6 +724,7 @@ gs_updates_page_refresh_cb (GsPluginLoader *plugin_loader, /* get the results */ ret = gs_plugin_loader_job_action_finish (plugin_loader, res, &error); if (!ret) { + g_autofree gchar *escaped_text = NULL; /* user cancel */ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) || g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { @@ -730,8 +732,8 @@ gs_updates_page_refresh_cb (GsPluginLoader *plugin_loader, return; } g_warning ("failed to refresh: %s", error->message); - adw_status_page_set_description (ADW_STATUS_PAGE (self->updates_failed_page), - error->message); + escaped_text = g_markup_escape_text (error->message, -1); + adw_status_page_set_description (ADW_STATUS_PAGE (self->updates_failed_page), escaped_text); gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_FAILED); return; } -- GitLab From afc5c8b506503989d8b5a75fa107ef17f5910b27 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:23:36 +0200 Subject: [PATCH 2/8] gs-app: Add function to check whether update details had been set This will help to determine whether anything at least tried to set update details, regardless whether empty/NULL string or an actual text. It will be used to not refine apps without update description. --- lib/gs-app.c | 24 ++++++++++++++++++++++++ lib/gs-app.h | 1 + 2 files changed, 25 insertions(+) diff --git a/lib/gs-app.c b/lib/gs-app.c index 8ec7a08d3..de6a94b16 100644 --- a/lib/gs-app.c +++ b/lib/gs-app.c @@ -92,6 +92,7 @@ typedef struct gchar *update_version; gchar *update_version_ui; gchar *update_details_markup; + gboolean update_details_set; AsUrgencyKind update_urgency; GsAppPermissions *update_permissions; GWeakRef management_plugin_weak; /* (element-type GsPlugin) */ @@ -3239,6 +3240,7 @@ gs_app_set_update_details_markup (GsApp *app, g_autoptr(GMutexLocker) locker = NULL; g_return_if_fail (GS_IS_APP (app)); locker = g_mutex_locker_new (&priv->mutex); + priv->update_details_set = TRUE; _g_set_str (&priv->update_details_markup, markup); } @@ -3262,6 +3264,7 @@ gs_app_set_update_details_text (GsApp *app, g_autoptr(GMutexLocker) locker = NULL; g_return_if_fail (GS_IS_APP (app)); locker = g_mutex_locker_new (&priv->mutex); + priv->update_details_set = TRUE; if (text == NULL) { _g_set_str (&priv->update_details_markup, NULL); } else { @@ -3271,6 +3274,27 @@ gs_app_set_update_details_text (GsApp *app, } } +/** + * gs_app_get_update_details_set: + * @app: a #GsApp + * + * Returns whether update details for the @app had been set. It does + * not matter whether it was set to %NULL or an actual text. + * + * Returns: whether update details for the @app had been set + * + * Since: 45 + **/ +gboolean +gs_app_get_update_details_set (GsApp *app) +{ + GsAppPrivate *priv = gs_app_get_instance_private (app); + g_autoptr(GMutexLocker) locker = NULL; + g_return_val_if_fail (GS_IS_APP (app), FALSE); + locker = g_mutex_locker_new (&priv->mutex); + return priv->update_details_set; +} + /** * gs_app_get_update_urgency: * @app: a #GsApp diff --git a/lib/gs-app.h b/lib/gs-app.h index 03908422d..fea4e38d1 100644 --- a/lib/gs-app.h +++ b/lib/gs-app.h @@ -373,6 +373,7 @@ void gs_app_set_update_details_markup const gchar *markup); void gs_app_set_update_details_text (GsApp *app, const gchar *text); +gboolean gs_app_get_update_details_set (GsApp *app); AsUrgencyKind gs_app_get_update_urgency (GsApp *app); void gs_app_set_update_urgency (GsApp *app, AsUrgencyKind update_urgency); -- GitLab From 1b53864dbfd2a5d9f275e01c4fe3e5cf71144ed7 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:33:35 +0200 Subject: [PATCH 3/8] gs-plugin-generic-updates: Merge system updates also when asking for update severity Use both update-details and update-severity refine flags to decide whether the merge of the packages to a "System Updates" proxy app is needed. This will help with the follow up changes, where the update-details flags will be used only rarely. --- plugins/core/gs-plugin-generic-updates.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/core/gs-plugin-generic-updates.c b/plugins/core/gs-plugin-generic-updates.c index 697d937f0..e4b23f748 100644 --- a/plugins/core/gs-plugin-generic-updates.c +++ b/plugins/core/gs-plugin-generic-updates.c @@ -94,7 +94,8 @@ gs_plugin_generic_updates_refine_async (GsPlugin *plugin, g_task_set_source_tag (task, gs_plugin_generic_updates_refine_async); /* not from get_updates() */ - if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) == 0) { + if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) == 0 && + (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY) == 0) { g_task_return_boolean (task, TRUE); return; } -- GitLab From 2d130418fae63392f296494f2704836c9f02aabc Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:37:05 +0200 Subject: [PATCH 4/8] packagekit: Use update-severity refine flag similar to update-details flag Use both update-details and update-severity refine flags to decide whether there is required package id. This will help with the follow up changes, where the update-details flags will be used only rarely. --- plugins/packagekit/gs-plugin-packagekit.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/packagekit/gs-plugin-packagekit.c b/plugins/packagekit/gs-plugin-packagekit.c index 6c9fe53e2..d58638f69 100644 --- a/plugins/packagekit/gs-plugin-packagekit.c +++ b/plugins/packagekit/gs-plugin-packagekit.c @@ -1247,6 +1247,8 @@ gs_plugin_refine_requires_package_id (GsApp *app, GsPluginRefineFlags flags) return TRUE; if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) > 0) return TRUE; + if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY) > 0) + return TRUE; if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE) > 0) return TRUE; if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION) > 0) -- GitLab From 31d218f8f66c75a134c8c4eb6a40816016261026 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:41:37 +0200 Subject: [PATCH 5/8] gs-app-details-page: Load update details on demand Load update details when needed (like when an app has not set it yet), instead of expecting it to be always present from the early calls by the other parts of the code base. Helps https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2230 --- src/gs-app-details-page.c | 130 ++++++++++++++++++++++++++++++++++---- src/gs-app-details-page.h | 3 +- src/gs-update-dialog.c | 2 +- 3 files changed, 122 insertions(+), 13 deletions(-) diff --git a/src/gs-app-details-page.c b/src/gs-app-details-page.c index 63a9d8ffb..06cf6fd34 100644 --- a/src/gs-app-details-page.c +++ b/src/gs-app-details-page.c @@ -30,6 +30,7 @@ typedef enum { PROP_APP = 1, + PROP_PLUGIN_LOADER, PROP_SHOW_BACK_BUTTON, PROP_TITLE, } GsAppDetailsPageProperty; @@ -55,7 +56,9 @@ struct _GsAppDetailsPage GtkWidget *status_page; AdwWindowTitle *window_title; + GsPluginLoader *plugin_loader; /* (owned) */ GsApp *app; /* (owned) (nullable) */ + GCancellable *refine_cancellable; /* (owned) (nullable) */ }; G_DEFINE_TYPE (GsAppDetailsPage, gs_app_details_page, GTK_TYPE_BOX) @@ -152,16 +155,79 @@ populate_permissions_section (GsAppDetailsPage *page, (GS_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL & ~MEDIUM_PERMISSIONS) != 0); } +static void +set_update_description (GsAppDetailsPage *self, + gboolean can_call_refine); + +static void +refine_app_finished_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object); + GsAppDetailsPage *self = user_data; + g_autoptr(GError) error = NULL; + + g_clear_object (&self->refine_cancellable); + + if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) { + if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) && + !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + g_warning ("Failed to refine app: %s", error->message); + } + return; + } + + set_update_description (self, FALSE); +} + +static void +set_update_description (GsAppDetailsPage *self, + gboolean can_call_refine) +{ + const gchar *update_details; + + update_details = gs_app_get_update_details_markup (self->app); + if (update_details == NULL) { + if (self->plugin_loader == NULL || !can_call_refine || + gs_app_get_update_details_set (self->app)) { + /* TRANSLATORS: this is where the packager did not write + * a description for the update */ + update_details = _("No update description available."); + } else { + g_autoptr(GsPluginJob) plugin_job = NULL; + + update_details = "…"; + /* to not refine the app again, when there is no description */ + gs_app_set_update_details_text (self->app, NULL); + + g_assert (self->refine_cancellable == NULL); + self->refine_cancellable = g_cancellable_new (); + plugin_job = gs_plugin_job_refine_new_for_app (self->app, GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS); + gs_plugin_job_set_interactive (plugin_job, TRUE); + gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job, + self->refine_cancellable, + refine_app_finished_cb, + self); + } + } + gtk_label_set_markup (GTK_LABEL (self->label_details), update_details); +} + static void set_updates_description_ui (GsAppDetailsPage *page, GsApp *app) { g_autoptr(GIcon) icon = NULL; guint icon_size; - const gchar *update_details; GdkDisplay *display; g_autoptr (GtkIconPaintable) paintable = NULL; g_autofree gchar *escaped_summary = NULL; + if (page->refine_cancellable != NULL) { + g_cancellable_cancel (page->refine_cancellable); + g_clear_object (&page->refine_cancellable); + } + /* FIXME support app == NULL */ /* set window title */ @@ -169,13 +235,7 @@ set_updates_description_ui (GsAppDetailsPage *page, GsApp *app) g_object_notify_by_pspec (G_OBJECT (page), obj_props[PROP_TITLE]); /* set update header */ - update_details = gs_app_get_update_details_markup (app); - if (update_details == NULL) { - /* TRANSLATORS: this is where the packager did not write - * a description for the update */ - update_details = _("No update description available."); - } - gtk_label_set_markup (GTK_LABEL (page->label_details), update_details); + set_update_description (page, TRUE); escaped_summary = g_markup_escape_text (gs_app_get_summary (app), -1); adw_status_page_set_title (ADW_STATUS_PAGE (page->status_page), gs_app_get_name (app)); adw_status_page_set_description (ADW_STATUS_PAGE (page->status_page), escaped_summary); @@ -314,6 +374,11 @@ gs_app_details_page_dispose (GObject *object) { GsAppDetailsPage *page = GS_APP_DETAILS_PAGE (object); + if (page->refine_cancellable) + g_cancellable_cancel (page->refine_cancellable); + + g_clear_object (&page->refine_cancellable); + g_clear_object (&page->plugin_loader); g_clear_object (&page->app); G_OBJECT_CLASS (gs_app_details_page_parent_class)->dispose (object); @@ -328,6 +393,9 @@ gs_app_details_page_get_property (GObject *object, guint prop_id, GValue *value, case PROP_APP: g_value_set_object (value, gs_app_details_page_get_app (page)); break; + case PROP_PLUGIN_LOADER: + g_value_set_object (value, gs_app_details_page_get_plugin_loader (page)); + break; case PROP_SHOW_BACK_BUTTON: g_value_set_boolean (value, gs_app_details_page_get_show_back_button (page)); break; @@ -349,6 +417,10 @@ gs_app_details_page_set_property (GObject *object, guint prop_id, const GValue * case PROP_APP: gs_app_details_page_set_app (page, g_value_get_object (value)); break; + case PROP_PLUGIN_LOADER: + g_assert (page->plugin_loader == NULL); + page->plugin_loader = g_value_dup_object (value); + break; case PROP_SHOW_BACK_BUTTON: gs_app_details_page_set_show_back_button (page, g_value_get_boolean (value)); break; @@ -386,6 +458,20 @@ gs_app_details_page_class_init (GsAppDetailsPageClass *klass) GS_TYPE_APP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * GsAppDetailsPage:plugin-loader: (nullable) + * + * A plugin loader to use to refine apps. + * + * If this is %NULL, no refine will be executed. + * + * Since: 45 + */ + obj_props[PROP_PLUGIN_LOADER] = + g_param_spec_object ("plugin-loader", NULL, NULL, + GS_TYPE_PLUGIN_LOADER, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GsAppDetailsPage:show-back-button * @@ -441,14 +527,36 @@ gs_app_details_page_class_init (GsAppDetailsPageClass *klass) /** * gs_app_details_page_new: + * @plugin_loader: (nullable): a #GsPluginLoader * * Create a new #GsAppDetailsPage. * * Returns: (transfer full): a new #GsAppDetailsPage - * Since: 41 + * Since: 45 */ GtkWidget * -gs_app_details_page_new (void) +gs_app_details_page_new (GsPluginLoader *plugin_loader) { - return GTK_WIDGET (g_object_new (GS_TYPE_APP_DETAILS_PAGE, NULL)); + g_return_val_if_fail (plugin_loader == NULL || GS_IS_PLUGIN_LOADER (plugin_loader), NULL); + + return g_object_new (GS_TYPE_APP_DETAILS_PAGE, + "plugin-loader", plugin_loader, + NULL); +} + +/** + * gs_app_details_page_get_plugin_loader: + * @page: a #GsAppDetailsPage + * + * Returns the #GsPluginLoader the @page was created with + * + * Returns: (transfer none) (nullable): the #GsPluginLoader the @page was created with + * Since: 45 + **/ +GsPluginLoader * +gs_app_details_page_get_plugin_loader (GsAppDetailsPage *page) +{ + g_return_val_if_fail (GS_IS_APP_DETAILS_PAGE (page), NULL); + + return page->plugin_loader; } diff --git a/src/gs-app-details-page.h b/src/gs-app-details-page.h index 8de5edb40..17c0402df 100644 --- a/src/gs-app-details-page.h +++ b/src/gs-app-details-page.h @@ -18,7 +18,8 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (GsAppDetailsPage, gs_app_details_page, GS, APP_DETAILS_PAGE, GtkBox) -GtkWidget *gs_app_details_page_new (void); +GtkWidget *gs_app_details_page_new (GsPluginLoader *plugin_loader); +GsPluginLoader *gs_app_details_page_get_plugin_loader (GsAppDetailsPage *page); GsApp *gs_app_details_page_get_app (GsAppDetailsPage *page); void gs_app_details_page_set_app (GsAppDetailsPage *page, GsApp *app); diff --git a/src/gs-update-dialog.c b/src/gs-update-dialog.c index 8e097fa6f..d632faca5 100644 --- a/src/gs-update-dialog.c +++ b/src/gs-update-dialog.c @@ -212,7 +212,7 @@ gs_update_dialog_show_update_details (GsUpdateDialog *dialog, GsApp *app) G_CALLBACK (app_activated_cb), dialog); gs_os_update_page_set_show_back_button (GS_OS_UPDATE_PAGE (page), dialog->showing_installed_updates); } else { - page = gs_app_details_page_new (); + page = gs_app_details_page_new (dialog->plugin_loader); gs_app_details_page_set_app (GS_APP_DETAILS_PAGE (page), app); } -- GitLab From 226dedfc7894c0ffd1de2e45608428f5e2b41494 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:43:44 +0200 Subject: [PATCH 6/8] gs-update-dialog: Stop requesting update-details for the apps Getting update-details is an expensive operation, which can take significant time, thus avoid it as much as possible. Helps https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2230 --- src/gs-update-dialog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gs-update-dialog.c b/src/gs-update-dialog.c index d632faca5..186451059 100644 --- a/src/gs-update-dialog.c +++ b/src/gs-update-dialog.c @@ -155,7 +155,7 @@ gs_update_dialog_show_installed_updates (GsUpdateDialog *dialog) gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "spinner"); plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL, - "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS | + "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY | GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON | GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION, NULL); -- GitLab From d154c3a92ada68ae5ddb3d1a312e6070bda8a94d Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:45:28 +0200 Subject: [PATCH 7/8] gs-update-monitor: Stop requesting update-details for the apps Getting update-details is an expensive operation, which can take significant time, thus avoid it as much as possible. Helps https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2230 --- src/gs-update-monitor.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gs-update-monitor.c b/src/gs-update-monitor.c index 59e95c548..94e115cc2 100644 --- a/src/gs-update-monitor.c +++ b/src/gs-update-monitor.c @@ -786,8 +786,7 @@ get_updates (GsUpdateMonitor *monitor, /* NOTE: this doesn't actually do any network access */ g_debug ("Getting updates"); plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES, - "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS | - GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY, + "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY, NULL); gs_plugin_loader_job_process_async (monitor->plugin_loader, plugin_job, -- GitLab From 974b5576b74ca0ea0df305380d7dfc8ec23c967b Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 26 Jul 2023 09:46:02 +0200 Subject: [PATCH 8/8] gs-updates-page: Stop requesting update-details for the apps Getting update-details is an expensive operation, which can take significant time, thus avoid it as much as possible. Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2230 --- src/gs-updates-page.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gs-updates-page.c b/src/gs-updates-page.c index 8e5752846..84e8d263d 100644 --- a/src/gs-updates-page.c +++ b/src/gs-updates-page.c @@ -604,7 +604,6 @@ gs_updates_page_get_system_finished_cb (GObject *source_object, refine_flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON | GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE | - GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS | GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION; helper = gs_page_helper_new (self, app); @@ -632,7 +631,6 @@ gs_updates_page_load (GsUpdatesPage *self) refine_flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON | GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE | - GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS | GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION; gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES); self->action_cnt++; -- GitLab