[gnome-software] Only refine with PackageKit when the state or version number is unknown and required



commit 7ac9f493da98c103941ea1dd2773fa9ea3326be8
Author: Richard Hughes <richard hughsie com>
Date:   Mon Oct 21 13:24:11 2013 +0100

    Only refine with PackageKit when the state or version number is unknown and required

 src/gs-plugin.h                           |    1 +
 src/gs-shell-details.c                    |    1 +
 src/gs-shell-installed.c                  |    3 +-
 src/gs-shell-search.c                     |    1 +
 src/gs-shell-updates.c                    |    4 ++-
 src/plugins/gs-plugin-packagekit-refine.c |   35 +++++++++++++++++++++-------
 6 files changed, 34 insertions(+), 11 deletions(-)
---
diff --git a/src/gs-plugin.h b/src/gs-plugin.h
index 4794b65..4c1906a 100644
--- a/src/gs-plugin.h
+++ b/src/gs-plugin.h
@@ -83,6 +83,7 @@ typedef enum {
        GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION      = 1 << 3,
        GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE             = 1 << 4,
        GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING           = 1 << 5,
+       GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION          = 1 << 6,
        GS_PLUGIN_REFINE_FLAGS_LAST
 } GsPluginRefineFlags;
 
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index 9ad128d..a3df389 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -596,6 +596,7 @@ gs_shell_details_set_app (GsShellDetails *shell_details, GsApp *app)
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENCE |
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE |
                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
+                                          GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
                                           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 3169440..2cb4de7 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -321,7 +321,8 @@ gs_shell_installed_refresh (GsShellInstalled *shell_installed, gboolean scroll_u
 
        /* get popular apps */
        gs_plugin_loader_get_installed_async (priv->plugin_loader,
-                                             GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+                                             GS_PLUGIN_REFINE_FLAGS_DEFAULT |
+                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION,
                                              priv->cancellable,
                                              gs_shell_installed_get_installed_cb,
                                              shell_installed);
diff --git a/src/gs-shell-search.c b/src/gs-shell-search.c
index f37a9f2..072a5e5 100644
--- a/src/gs-shell-search.c
+++ b/src/gs-shell-search.c
@@ -322,6 +322,7 @@ gs_shell_search_refresh (GsShellSearch *shell_search, const gchar *value, gboole
        gs_plugin_loader_search_async (priv->plugin_loader,
                                       value,
                                       GS_PLUGIN_REFINE_FLAGS_DEFAULT |
+                                      GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
                                       priv->cancellable,
                                       gs_shell_search_get_search_cb,
diff --git a/src/gs-shell-updates.c b/src/gs-shell-updates.c
index 8113fcd..8b360ff 100644
--- a/src/gs-shell-updates.c
+++ b/src/gs-shell-updates.c
@@ -194,7 +194,9 @@ gs_shell_updates_refresh (GsShellUpdates *shell_updates,
        gs_container_remove_all (GTK_CONTAINER (priv->list_box_updates));
 
        gs_plugin_loader_get_updates_async (priv->plugin_loader,
-                                           show_historical ? GS_PLUGIN_REFINE_FLAGS_USE_HISTORY : 
GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+                                           show_historical ?
+                                           GS_PLUGIN_REFINE_FLAGS_USE_HISTORY : 
GS_PLUGIN_REFINE_FLAGS_DEFAULT,
                                            priv->cancellable,
                                            (GAsyncReadyCallback) gs_shell_updates_get_updates_cb,
                                            shell_updates);
diff --git a/src/plugins/gs-plugin-packagekit-refine.c b/src/plugins/gs-plugin-packagekit-refine.c
index ce986e1..297fbf9 100644
--- a/src/plugins/gs-plugin-packagekit-refine.c
+++ b/src/plugins/gs-plugin-packagekit-refine.c
@@ -108,10 +108,10 @@ gs_plugin_packagekit_progress_cb (PkProgress *progress,
 }
 
 static gboolean
-gs_plugin_packagekit_refine_packages (GsPlugin *plugin,
-                                     GList *list,
-                                     GCancellable *cancellable,
-                                     GError **error)
+gs_plugin_packagekit_resolve_packages (GsPlugin *plugin,
+                                      GList *list,
+                                      GCancellable *cancellable,
+                                      GError **error)
 {
        const gchar *pkgname;
        gboolean ret = TRUE;
@@ -544,6 +544,19 @@ out:
 }
 
 /**
+ * gs_plugin_refine_requires_version:
+ */
+static gboolean
+gs_plugin_refine_requires_version (GsApp *app, GsPluginRefineFlags flags)
+{
+       const gchar *tmp;
+       tmp = gs_app_get_version (app);
+       if (tmp != NULL)
+               return FALSE;
+       return (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION) > 0;
+}
+
+/**
  * gs_plugin_refine:
  */
 gboolean
@@ -569,14 +582,18 @@ gs_plugin_refine (GsPlugin *plugin,
                if (gs_app_get_id_kind (app) == GS_APP_ID_KIND_WEBAPP)
                        continue;
                tmp = gs_app_get_source (app);
-               if (tmp != NULL)
+               if (tmp == NULL)
+                       continue;
+               if (gs_app_get_state (app) == GS_APP_STATE_UNKNOWN ||
+                   gs_plugin_refine_requires_version (app, flags)) {
                        resolve_all = g_list_prepend (resolve_all, app);
+               }
        }
        if (resolve_all != NULL) {
-               ret = gs_plugin_packagekit_refine_packages (plugin,
-                                                           resolve_all,
-                                                           cancellable,
-                                                           error);
+               ret = gs_plugin_packagekit_resolve_packages (plugin,
+                                                            resolve_all,
+                                                            cancellable,
+                                                            error);
                if (!ret)
                        goto out;
        }


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