]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: Use new progress indicator
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 1 Oct 2023 11:50:47 +0000 (11:50 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 1 Oct 2023 11:50:47 +0000 (11:50 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c
src/libpakfire/include/pakfire/progress.h
src/libpakfire/progress.c

index 81839cbeea3279b391104232729b7a36e6c63ff7..2e4532a1ba3242dd1cbd463bf531ba36d3f1ddb4 100644 (file)
@@ -34,7 +34,7 @@
 #include <pakfire/i18n.h>
 #include <pakfire/logging.h>
 #include <pakfire/pakfire.h>
-#include <pakfire/progressbar.h>
+#include <pakfire/progress.h>
 #include <pakfire/string.h>
 #include <pakfire/util.h>
 
@@ -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;
 }
index 0624eaf19e15bb05c8e7bef600f085d4ee6bb140..3d2224287181f529cc3058c648c20670e45142b5 100644 (file)
@@ -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
 
index 93724a00f9c50316135b316f6f460385db76ed28..648f9d051704d126a11237bf2bf6c6b38d357b9e 100644 (file)
@@ -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;
 }