[gnome-software] Only refine with PackageKit when the action will be required



commit 19a8a696df60fa9b933088c3317e3ab184d1df2f
Author: Richard Hughes <richard hughsie com>
Date:   Mon Oct 21 14:21:18 2013 +0100

    Only refine with PackageKit when the action will be required
    
    This reduces the cost of a default refine down to less than 10ms.

 src/gs-plugin.h                           |    1 +
 src/gs-shell-details.c                    |    3 ++-
 src/gs-shell-installed.c                  |    1 +
 src/gs-shell-search.c                     |    1 +
 src/plugins/gs-plugin-packagekit-refine.c |    4 +++-
 5 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/src/gs-plugin.h b/src/gs-plugin.h
index 7cf8242..cd35904 100644
--- a/src/gs-plugin.h
+++ b/src/gs-plugin.h
@@ -85,6 +85,7 @@ typedef enum {
        GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING           = 1 << 5,
        GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION          = 1 << 6,
        GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY          = 1 << 7,
+       GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION     = 1 << 8,
        GS_PLUGIN_REFINE_FLAGS_LAST
 } GsPluginRefineFlags;
 
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index f4f1593..9d4e557 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -597,7 +597,8 @@ gs_shell_details_set_app (GsShellDetails *shell_details, GsApp *app)
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE |
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
-                                          GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY|
+                                          GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+                                          GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL,
                                           priv->cancellable,
                                           gs_shell_details_app_refine_cb,
diff --git a/src/gs-shell-installed.c b/src/gs-shell-installed.c
index c26e535..7816fd4 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -323,6 +323,7 @@ gs_shell_installed_refresh (GsShellInstalled *shell_installed, gboolean scroll_u
        gs_plugin_loader_get_installed_async (priv->plugin_loader,
                                              GS_PLUGIN_REFINE_FLAGS_DEFAULT |
                                              GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
                                              GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION,
                                              priv->cancellable,
                                              gs_shell_installed_get_installed_cb,
diff --git a/src/gs-shell-search.c b/src/gs-shell-search.c
index 7c5846b..a7b9d8b 100644
--- a/src/gs-shell-search.c
+++ b/src/gs-shell-search.c
@@ -324,6 +324,7 @@ gs_shell_search_refresh (GsShellSearch *shell_search, const gchar *value, gboole
                                       GS_PLUGIN_REFINE_FLAGS_DEFAULT |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+                                      GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
                                       priv->cancellable,
                                       gs_shell_search_get_search_cb,
diff --git a/src/plugins/gs-plugin-packagekit-refine.c b/src/plugins/gs-plugin-packagekit-refine.c
index 297fbf9..49b9ad7 100644
--- a/src/plugins/gs-plugin-packagekit-refine.c
+++ b/src/plugins/gs-plugin-packagekit-refine.c
@@ -599,9 +599,11 @@ gs_plugin_refine (GsPlugin *plugin,
        }
        gs_profile_stop_full (plugin->profile, "packagekit-refine[name->id]");
 
-       /* add any missing ratings data */
+       /* set the package-id for an installed desktop file */
        gs_profile_start_full (plugin->profile, "packagekit-refine[desktop-filename->id]");
        for (l = list; l != NULL; l = l->next) {
+               if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION) == 0)
+                       continue;
                app = GS_APP (l->data);
                if (gs_app_get_metadata_item (app, "PackageKit::package-id") != NULL)
                        continue;


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