From d8ac9f75cdb567cade86c51c4f7b65151fc4273f Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 8 Mar 2017 14:14:15 -0300 Subject: [PATCH] repo-pull: add option to set the async update frequency When using Flatpak with GNOME Software, it is important to show the progress of the download and install as close as possible to the real progress. However, OSTree forces the frequency to call the async progress callback to 1 second, which causes an unpleasant effect on the UI, specially when the download size is so small that everything happens in less than 1 second. Fix that by adding making OSTree read a custom 'update-frequency' option and set the timeout source timeout to that. If no custom frequency is passed, we assume the default 1 second timeout, maintaining the current behavior. Closes: #725 Approved by: jlebon --- src/libostree/ostree-repo-pull.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c index d7097320..5ee43918 100644 --- a/src/libostree/ostree-repo-pull.c +++ b/src/libostree/ostree-repo-pull.c @@ -2589,6 +2589,7 @@ reinitialize_fetcher (OtPullData *pull_data, const char *remote_name, GError **e * * override-url (s): Fetch objects from this URL if remote specifies no metalink in options * * inherit-transaction (b): Don't initiate, finish or abort a transaction, usefult to do mutliple pulls in one transaction. * * http-headers (a(ss)): Additional headers to add to all HTTP requests + * * update-frequency (u): Frequency to call the async progress callback in milliseconds, if any; only values higher than 0 are valid */ gboolean ostree_repo_pull_with_options (OstreeRepo *self, @@ -2613,6 +2614,7 @@ ostree_repo_pull_with_options (OstreeRepo *self, char **configured_branches = NULL; guint64 bytes_transferred; guint64 end_time; + guint update_frequency = 0; OstreeRepoPullFlags flags = 0; const char *dir_to_pull = NULL; g_autofree char **dirs_to_pull = NULL; @@ -2648,6 +2650,7 @@ ostree_repo_pull_with_options (OstreeRepo *self, (void) g_variant_lookup (options, "override-url", "&s", &url_override); (void) g_variant_lookup (options, "inherit-transaction", "b", &inherit_transaction); (void) g_variant_lookup (options, "http-headers", "@a(ss)", &pull_data->extra_headers); + (void) g_variant_lookup (options, "update-frequency", "u", &update_frequency); } g_return_val_if_fail (pull_data->maxdepth >= -1, FALSE); @@ -3283,7 +3286,12 @@ ostree_repo_pull_with_options (OstreeRepo *self, if (pull_data->progress) { - update_timeout = g_timeout_source_new_seconds (pull_data->dry_run ? 0 : 1); + /* Setup a custom frequency if set */ + if (update_frequency > 0) + update_timeout = g_timeout_source_new (pull_data->dry_run ? 0 : update_frequency); + else + update_timeout = g_timeout_source_new_seconds (pull_data->dry_run ? 0 : 1); + g_source_set_priority (update_timeout, G_PRIORITY_HIGH); g_source_set_callback (update_timeout, update_progress, pull_data, NULL); g_source_attach (update_timeout, pull_data->main_context);