From be925f12287faee9d4c65635a3e69d18617b0213 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Mon, 8 Oct 2018 11:34:15 +0200
Subject: [PATCH 2/2] Sort distro upgrades in the plugin loader
... so that we can rely on the order in UI code.
---
lib/gs-plugin-loader.c | 13 +++++++++++++
src/gs-update-monitor.c | 5 +++--
src/gs-updates-page.c | 3 ++-
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index 2fb02e3c6..033438a88 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -1484,6 +1484,13 @@ gs_plugin_loader_app_sort_match_value_cb (GsApp *app1, GsApp *app2, gpointer use
return 0;
}
+static gint
+gs_plugin_loader_app_sort_version_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ return as_utils_vercmp (gs_app_get_version (app1),
+ gs_app_get_version (app2));
+}
+
/******************************************************************************/
static gboolean
@@ -3673,6 +3680,12 @@ gs_plugin_loader_job_process_async (GsPluginLoader *plugin_loader,
gs_plugin_loader_app_sort_name_cb);
}
break;
+ case GS_PLUGIN_ACTION_GET_DISTRO_UPDATES:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_version_cb);
+ }
+ break;
default:
break;
}
diff --git a/src/gs-update-monitor.c b/src/gs-update-monitor.c
index 3441b161f..2f39ae0bd 100644
--- a/src/gs-update-monitor.c
+++ b/src/gs-update-monitor.c
@@ -308,8 +308,9 @@ get_upgrades_finished_cb (GObject *object,
g_settings_set (monitor->settings, "upgrade-notification-timestamp", "x",
g_date_time_to_unix (now));
- /* just get the first result : FIXME, do we sort these by date? */
- app = gs_app_list_index (apps, 0);
+ /* rely on the app list already being sorted with the
+ * chronologically newest release last */
+ app = gs_app_list_index (apps, gs_app_list_length (apps) - 1);
/* TRANSLATORS: this is a distro upgrade, the replacement would be the
* distro name, e.g. 'Fedora' */
diff --git a/src/gs-updates-page.c b/src/gs-updates-page.c
index cd9db05d4..e84293e03 100644
--- a/src/gs-updates-page.c
+++ b/src/gs-updates-page.c
@@ -1084,7 +1084,8 @@ gs_updates_page_get_upgrades_cb (GObject *source_object,
gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPGRADES);
gtk_widget_set_visible (self->upgrade_banner, FALSE);
} else {
- /* rely on the app list already being sorted */
+ /* rely on the app list already being sorted with the
+ * chronologically newest release last */
GsApp *app = gs_app_list_index (list, gs_app_list_length (list) - 1);
g_debug ("got upgrade %s", gs_app_get_id (app));
gs_upgrade_banner_set_app (GS_UPGRADE_BANNER (self->upgrade_banner), app);
--
2.19.1