diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2017-03-08 14:14:15 -0300 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2017-03-08 20:28:27 +0000 |
commit | d8ac9f75cdb567cade86c51c4f7b65151fc4273f (patch) | |
tree | 48277410b85f33b27f359e413849abaf9d837445 | |
parent | 031d7898ccb4ab4aa5fe994b016cb785dad2b895 (diff) | |
download | ostree-d8ac9f75cdb567cade86c51c4f7b65151fc4273f.tar.gz |
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
-rw-r--r-- | src/libostree/ostree-repo-pull.c | 10 |
1 files changed, 9 insertions, 1 deletions
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); |