From: Michael Tremer Date: Sun, 1 Oct 2023 11:50:47 +0000 (+0000) Subject: downloader: Use new progress indicator X-Git-Tag: 0.9.30~1579 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffbc09886d6eef9c12a5c9fc4a58018b2e5bb8ba;p=pakfire.git downloader: Use new progress indicator Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index 81839cbee..2e4532a1b 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #include @@ -87,7 +87,7 @@ struct pakfire_downloader { struct pakfire* pakfire; int nrefs; - struct pakfire_progressbar* progressbar; + struct pakfire_progress* progress; unsigned int parallel; // cURL multi handle @@ -159,8 +159,8 @@ static void pakfire_downloader_free(struct pakfire_downloader* downloader) { pakfire_transfer_free(transfer); } - if (downloader->progressbar) - pakfire_progressbar_unref(downloader->progressbar); + if (downloader->progress) + pakfire_progress_unref(downloader->progress); if (downloader->curl) curl_multi_cleanup(downloader->curl); @@ -200,8 +200,12 @@ int pakfire_downloader_create(struct pakfire_downloader** downloader, struct pak if (r) goto ERROR; - // Create the progressbar - r = pakfire_progressbar_create(&d->progressbar, NULL); + // Create the progress indicator + r = pakfire_progress_create(&d->progress, d->pakfire, + PAKFIRE_PROGRESS_SHOW_PERCENTAGE | + PAKFIRE_PROGRESS_SHOW_ETA | + PAKFIRE_PROGRESS_SHOW_BYTES_TRANSFERRED | + PAKFIRE_PROGRESS_SHOW_TRANSFER_SPEED); if (r) goto ERROR; @@ -809,69 +813,39 @@ static int pakfire_downloader_prepare_transfer(struct pakfire_downloader* downlo return 0; } -static int pakfire_downloader_update_single_progressbar(void* data, +static int pakfire_downloader_update_progress(void* data, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { struct pakfire_downloader* downloader = (struct pakfire_downloader*)data; // Set maximum (because this might have changed) - pakfire_progressbar_set_max(downloader->progressbar, dltotal); + pakfire_progress_set_max_value(downloader->progress, dltotal); // Update current value - return pakfire_progressbar_update(downloader->progressbar, dlnow); + return pakfire_progress_update(downloader->progress, dlnow); } -static int pakfire_downloader_make_single_progressbar( +static int pakfire_downloader_make_single_progress( struct pakfire_downloader* downloader, struct pakfire_transfer* transfer) { int r; - // Reset the progressbar - pakfire_progressbar_reset(downloader->progressbar); + // Reset the progress + pakfire_progress_reset(downloader->progress); - // Add title + // Set title if (*transfer->title) { - r = pakfire_progressbar_add_string(downloader->progressbar, "%s", transfer->title); + r = pakfire_progress_set_title(downloader->progress, "%s", transfer->title); if (r) return r; } - // Add percentage - r = pakfire_progressbar_add_percentage(downloader->progressbar); - if (r) - return r; - - // Add the bar - r = pakfire_progressbar_add_bar(downloader->progressbar); - if (r) - return r; - - // Add transfer speed - r = pakfire_progressbar_add_transfer_speed(downloader->progressbar); - if (r) - return r; - - // Add delimiter - r = pakfire_progressbar_add_string(downloader->progressbar, "|"); - if (r) - return r; - - // Add bytes transferred - r = pakfire_progressbar_add_bytes_transferred(downloader->progressbar); - if (r) - return r; - - // Add ETA - r = pakfire_progressbar_add_eta(downloader->progressbar); - if (r) - return r; - - // Update the progressbar + // Update the progress curl_easy_setopt(transfer->handle, CURLOPT_XFERINFOFUNCTION, - pakfire_downloader_update_single_progressbar); + pakfire_downloader_update_progress); curl_easy_setopt(transfer->handle, CURLOPT_XFERINFODATA, downloader); curl_easy_setopt(transfer->handle, CURLOPT_NOPROGRESS, 0L); - // Start the progressbar - r = pakfire_progressbar_start(downloader->progressbar, 0); + // Start the progress + r = pakfire_progress_start(downloader->progress, 0); if (r) return r; @@ -886,9 +860,9 @@ static int pakfire_downloader_perform( const int has_progress = !(transfer->flags & PAKFIRE_TRANSFER_NOPROGRESS); int r; - // Create progressbar + // Create progress if (has_progress) { - r = pakfire_downloader_make_single_progressbar(downloader, transfer); + r = pakfire_downloader_make_single_progress(downloader, transfer); if (r) return r; } @@ -909,9 +883,12 @@ AGAIN: if (r == EAGAIN) goto AGAIN; - // Finish the progressbar - if (has_progress) - pakfire_progressbar_finish(downloader->progressbar); + // Finish the progress + if (has_progress) { + r = pakfire_progress_finish(downloader->progress); + if (r) + return r; + } return r; } diff --git a/src/libpakfire/include/pakfire/progress.h b/src/libpakfire/include/pakfire/progress.h index 0624eaf19..3d2224287 100644 --- a/src/libpakfire/include/pakfire/progress.h +++ b/src/libpakfire/include/pakfire/progress.h @@ -82,8 +82,10 @@ int pakfire_progress_start(struct pakfire_progress* p, unsigned long int value); int pakfire_progress_finish(struct pakfire_progress* p); int pakfire_progress_update(struct pakfire_progress* p, unsigned long int value); int pakfire_progress_increment(struct pakfire_progress* p, unsigned long int value); +int pakfire_progress_reset(struct pakfire_progress* p); int pakfire_progress_set_title(struct pakfire_progress* p, const char* format, ...); +void pakfire_progress_set_max_value(struct pakfire_progress* p, unsigned long int value); #endif diff --git a/src/libpakfire/progress.c b/src/libpakfire/progress.c index 93724a00f..648f9d051 100644 --- a/src/libpakfire/progress.c +++ b/src/libpakfire/progress.c @@ -247,6 +247,31 @@ int pakfire_progress_increment(struct pakfire_progress* p, unsigned long int val return pakfire_progress_update(p, p->value + value); } +int pakfire_progress_reset(struct pakfire_progress* p) { + int r; + + switch (p->status) { + case PAKFIRE_PROGRESS_INIT: + return 0; + + // If we are running, let's pretend we finished + case PAKFIRE_PROGRESS_RUNNING: + r = pakfire_progress_finish(p); + if (r) + return r; + + break; + + default: + break; + } + + // Reset values + p->value = p->max_value = 0; + + return 0; +} + PAKFIRE_EXPORT unsigned long int pakfire_progress_get_value(struct pakfire_progress* p) { return p->value; } @@ -255,6 +280,10 @@ PAKFIRE_EXPORT unsigned long int pakfire_progress_get_max_value(struct pakfire_p return p->max_value; } +void pakfire_progress_set_max_value(struct pakfire_progress* p, unsigned long int value) { + p->max_value = value; +} + PAKFIRE_EXPORT const char* pakfire_progress_get_title(struct pakfire_progress* p) { return p->title; }