[gnome-software/1630-new-updated-apps-are-not-actually-new: 8/9] gs-overview-page: Sort recent applications by their release date




commit 2c5403e02584889c2b9b179e97a41fe902ba98b3
Author: Milan Crha <mcrha redhat com>
Date:   Thu Feb 24 13:06:07 2022 +0100

    gs-overview-page: Sort recent applications by their release date
    
    Thus the list shows the most recently updated applications first.
    
    Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1630

 src/gs-overview-page.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/src/gs-overview-page.c b/src/gs-overview-page.c
index 50e2e2cfb..36463030a 100644
--- a/src/gs-overview-page.c
+++ b/src/gs-overview-page.c
@@ -169,6 +169,18 @@ out:
        gs_overview_page_decrement_action_cnt (self);
 }
 
+static gint
+gs_overview_page_sort_recent_cb (GsApp *app1,
+                                GsApp *app2,
+                                gpointer user_data)
+{
+       if (gs_app_get_release_date (app1) < gs_app_get_release_date (app2))
+               return 1;
+       if (gs_app_get_release_date (app1) == gs_app_get_release_date (app2))
+               return g_strcmp0 (gs_app_get_name (app1), gs_app_get_name (app2));
+       return -1;
+}
+
 static void
 gs_overview_page_get_recent_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
@@ -198,7 +210,7 @@ gs_overview_page_get_recent_cb (GObject *source_object, GAsyncResult *res, gpoin
                goto out;
        }
 
-       gs_app_list_randomize (list);
+       gs_app_list_sort (list, gs_overview_page_sort_recent_cb, NULL);
 
        gs_widget_remove_all (self->box_recent, (GsRemoveFunc) gtk_flow_box_remove);
 
@@ -515,12 +527,14 @@ gs_overview_page_load (GsOverviewPage *self)
                self->loading_recent = TRUE;
                plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_RECENT,
                                                 "age", (guint64) (60 * 60 * 24 * 60),
-                                                "max-results", 20,
+                                                /* To have large-enough set, in case filtering removes some 
non-applicable apps */
+                                                "max-results", 3 * N_TILES,
                                                 "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
                                                                 GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
                                                 "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
                                                                 GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
                                                 NULL);
+               gs_plugin_job_set_sort_func (plugin_job, gs_overview_page_sort_recent_cb, NULL);
                gs_plugin_loader_job_process_async (self->plugin_loader,
                                                    plugin_job,
                                                    self->cancellable,


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