[gnome-software/gnome-40: 1/2] packagekit: Set interactive status on PkClient wherever it’s used




commit d3b5bb757ccbb4a108d9919a56246394ea047628
Author: Philip Withnall <pwithnall endlessos org>
Date:   Sat May 1 00:51:25 2021 +0100

    packagekit: Set interactive status on PkClient wherever it’s used
    
    In the same way the background state and cache age are set. Note that
    the background state was previously perhaps a little confused with the
    interactive state. The background state indicates that an operation
    should be allocated few system resources, as it’s not urgent. The
    interactive state indicates that the user explicitly requested an
    operation, and hence can be presented with polkit prompts (for example)
    when necessary.
    
    Ideally the packagekit-glib2 API would take this as a flag on each
    operation, but instead it has to be set on the `PkClient`. This is
    translated into a transaction hint whenever the `PkClient` creates a new
    D-Bus proxy (which happens at the start of each operation).
    
    Ideally also the internal gnome-software API would provide this as a
    per-operation flag, but instead it’s set as per-plugin data (and
    sometimes updated). Perhaps we can improve that in the future.
    
    Signed-off-by: Philip Withnall <pwithnall endlessos org>
    
    Fixes: #582

 plugins/packagekit/gs-plugin-packagekit-local.c        | 2 ++
 plugins/packagekit/gs-plugin-packagekit-refine-repos.c | 2 ++
 plugins/packagekit/gs-plugin-packagekit-refine.c       | 2 ++
 plugins/packagekit/gs-plugin-packagekit-refresh.c      | 3 +++
 plugins/packagekit/gs-plugin-packagekit-upgrade.c      | 2 ++
 plugins/packagekit/gs-plugin-packagekit-url-to-app.c   | 2 ++
 plugins/packagekit/gs-plugin-packagekit.c              | 9 +++++++++
 7 files changed, 22 insertions(+)
---
diff --git a/plugins/packagekit/gs-plugin-packagekit-local.c b/plugins/packagekit/gs-plugin-packagekit-local.c
index 5d3da3175..f7b1f032e 100644
--- a/plugins/packagekit/gs-plugin-packagekit-local.c
+++ b/plugins/packagekit/gs-plugin-packagekit-local.c
@@ -30,6 +30,7 @@ gs_plugin_initialize (GsPlugin *plugin)
        g_mutex_init (&priv->task_mutex);
        priv->task = pk_task_new ();
        pk_client_set_background (PK_CLIENT (priv->task), FALSE);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
 }
 
 void
@@ -190,6 +191,7 @@ gs_plugin_file_to_app (GsPlugin *plugin,
        files = g_strsplit (filename, "\t", -1);
        g_mutex_lock (&priv->task_mutex);
        pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_get_details_local (PK_CLIENT (priv->task),
                                               files,
                                               cancellable,
diff --git a/plugins/packagekit/gs-plugin-packagekit-refine-repos.c 
b/plugins/packagekit/gs-plugin-packagekit-refine-repos.c
index 39c262c8a..c9b643821 100644
--- a/plugins/packagekit/gs-plugin-packagekit-refine-repos.c
+++ b/plugins/packagekit/gs-plugin-packagekit-refine-repos.c
@@ -37,6 +37,7 @@ gs_plugin_initialize (GsPlugin *plugin)
        priv->client = pk_client_new ();
        pk_client_set_background (priv->client, FALSE);
        pk_client_set_cache_age (priv->client, G_MAXUINT);
+       pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
 
        /* need repos::repo-filename */
        gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "repos");
@@ -66,6 +67,7 @@ gs_plugin_packagekit_refine_repo_from_filename (GsPlugin *plugin,
        to_array[0] = filename;
        gs_packagekit_helper_add_app (helper, app);
        g_mutex_lock (&priv->client_mutex);
+       pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_search_files (priv->client,
                                          pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1),
                                          (gchar **) to_array,
diff --git a/plugins/packagekit/gs-plugin-packagekit-refine.c 
b/plugins/packagekit/gs-plugin-packagekit-refine.c
index b2f14df06..fa3e09d07 100644
--- a/plugins/packagekit/gs-plugin-packagekit-refine.c
+++ b/plugins/packagekit/gs-plugin-packagekit-refine.c
@@ -57,6 +57,7 @@ gs_plugin_initialize (GsPlugin *plugin)
                          G_CALLBACK (gs_plugin_packagekit_repo_list_changed_cb), plugin);
        pk_client_set_background (priv->client, FALSE);
        pk_client_set_cache_age (priv->client, G_MAXUINT);
+       pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
 
        /* need pkgname and ID */
        gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
@@ -596,6 +597,7 @@ gs_plugin_packagekit_refine_distro_upgrade (GsPlugin *plugin,
        g_mutex_lock (&priv->client_mutex);
        cache_age_save = pk_client_get_cache_age (priv->client);
        pk_client_set_cache_age (priv->client, 60 * 60 * 24 * 7); /* once per week */
+       pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_upgrade_system (priv->client,
                                            pk_bitfield_from_enums (PK_TRANSACTION_FLAG_ENUM_SIMULATE, -1),
                                            gs_app_get_version (app),
diff --git a/plugins/packagekit/gs-plugin-packagekit-refresh.c 
b/plugins/packagekit/gs-plugin-packagekit-refresh.c
index 44b3ffc24..338cc3874 100644
--- a/plugins/packagekit/gs-plugin-packagekit-refresh.c
+++ b/plugins/packagekit/gs-plugin-packagekit-refresh.c
@@ -36,6 +36,7 @@ gs_plugin_initialize (GsPlugin *plugin)
        priv->task = pk_task_new ();
        pk_task_set_only_download (priv->task, TRUE);
        pk_client_set_background (PK_CLIENT (priv->task), TRUE);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
 
        /* we can return better results than dpkg directly */
        gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "dpkg");
@@ -68,6 +69,7 @@ _download_only (GsPlugin *plugin, GsAppList *list,
         * we end up downloading a different set of packages than what was
         * shown to the user */
        pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_get_updates (PK_CLIENT (priv->task),
                                         pk_bitfield_value (PK_FILTER_ENUM_NONE),
                                         cancellable,
@@ -177,6 +179,7 @@ gs_plugin_refresh (GsPlugin *plugin,
        g_mutex_lock (&priv->task_mutex);
        /* cache age of 1 is user-initiated */
        pk_client_set_background (PK_CLIENT (priv->task), cache_age > 1);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        pk_client_set_cache_age (PK_CLIENT (priv->task), cache_age);
        /* refresh the metadata */
        results = pk_client_refresh_cache (PK_CLIENT (priv->task),
diff --git a/plugins/packagekit/gs-plugin-packagekit-upgrade.c 
b/plugins/packagekit/gs-plugin-packagekit-upgrade.c
index c09af98c0..0c48d465f 100644
--- a/plugins/packagekit/gs-plugin-packagekit-upgrade.c
+++ b/plugins/packagekit/gs-plugin-packagekit-upgrade.c
@@ -31,6 +31,7 @@ gs_plugin_initialize (GsPlugin *plugin)
        pk_task_set_only_download (priv->task, TRUE);
        pk_client_set_background (PK_CLIENT (priv->task), TRUE);
        pk_client_set_cache_age (PK_CLIENT (priv->task), 60 * 60 * 24);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
 }
 
 void
@@ -70,6 +71,7 @@ gs_plugin_app_upgrade_download (GsPlugin *plugin,
        gs_app_set_state (app, GS_APP_STATE_INSTALLING);
        gs_packagekit_helper_set_progress_app (helper, app);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_task_upgrade_system_sync (priv->task,
                                               gs_app_get_version (app),
                                               PK_UPGRADE_KIND_ENUM_COMPLETE,
diff --git a/plugins/packagekit/gs-plugin-packagekit-url-to-app.c 
b/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
index e3d52d607..a41966814 100644
--- a/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
+++ b/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
@@ -29,6 +29,7 @@ gs_plugin_initialize (GsPlugin *plugin)
 
        pk_client_set_background (priv->client, FALSE);
        pk_client_set_cache_age (priv->client, G_MAXUINT);
+       pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
 }
 
 void
@@ -88,6 +89,7 @@ gs_plugin_url_to_app (GsPlugin *plugin,
        package_ids[0] = g_strdup (path);
 
        g_mutex_lock (&priv->client_mutex);
+       pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_resolve (priv->client,
                                     pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, PK_FILTER_ENUM_ARCH, -1),
                                     package_ids,
diff --git a/plugins/packagekit/gs-plugin-packagekit.c b/plugins/packagekit/gs-plugin-packagekit.c
index e302945f7..977202e97 100644
--- a/plugins/packagekit/gs-plugin-packagekit.c
+++ b/plugins/packagekit/gs-plugin-packagekit.c
@@ -39,6 +39,7 @@ gs_plugin_initialize (GsPlugin *plugin)
        priv->task = pk_task_new ();
        pk_client_set_background (PK_CLIENT (priv->task), FALSE);
        pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
 }
 
 void
@@ -72,6 +73,7 @@ gs_plugin_add_sources_related (GsPlugin *plugin,
                                         PK_FILTER_ENUM_NOT_COLLECTIONS,
                                         -1);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_get_packages (PK_CLIENT(priv->task),
                                           filter,
                                           cancellable,
@@ -135,6 +137,7 @@ gs_plugin_add_sources (GsPlugin *plugin,
                                         PK_FILTER_ENUM_NOT_SUPPORTED,
                                         -1);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_get_repo_list (PK_CLIENT(priv->task),
                                           filter,
                                           cancellable,
@@ -198,6 +201,7 @@ gs_plugin_app_origin_repo_enable (GsPlugin *plugin,
        /* do sync call */
        gs_plugin_status_update (plugin, app, GS_PLUGIN_STATUS_WAITING);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_repo_enable (PK_CLIENT (priv->task),
                                         repo_id,
                                         TRUE,
@@ -244,6 +248,7 @@ gs_plugin_repo_enable (GsPlugin *plugin,
        gs_app_set_state (app, GS_APP_STATE_INSTALLING);
        gs_packagekit_helper_add_app (helper, app);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_repo_enable (PK_CLIENT (priv->task),
                                         gs_app_get_id (app),
                                         TRUE,
@@ -485,6 +490,7 @@ gs_plugin_repo_disable (GsPlugin *plugin,
        gs_app_set_state (app, GS_APP_STATE_REMOVING);
        gs_packagekit_helper_add_app (helper, app);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_repo_enable (PK_CLIENT (priv->task),
                                         gs_app_get_id (app),
                                         FALSE,
@@ -634,6 +640,7 @@ gs_plugin_add_updates (GsPlugin *plugin,
        /* do sync call */
        gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_get_updates (PK_CLIENT (priv->task),
                                         pk_bitfield_value (PK_FILTER_ENUM_NONE),
                                         cancellable,
@@ -672,6 +679,7 @@ gs_plugin_add_search_files (GsPlugin *plugin,
                                         PK_FILTER_ENUM_ARCH,
                                         -1);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_search_files (PK_CLIENT (priv->task),
                                          filter,
                                          search,
@@ -704,6 +712,7 @@ gs_plugin_add_search_what_provides (GsPlugin *plugin,
                                         PK_FILTER_ENUM_ARCH,
                                         -1);
        g_mutex_lock (&priv->task_mutex);
+       pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, 
GS_PLUGIN_FLAGS_INTERACTIVE));
        results = pk_client_what_provides (PK_CLIENT (priv->task),
                                           filter,
                                           search,


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