]> git.ipfire.org Git - pakfire.git/commitdiff
archive writer: Add a progress indicator
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 8 Feb 2025 11:05:46 +0000 (11:05 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 8 Feb 2025 11:05:46 +0000 (11:05 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/archive_writer.c

index e0f1e9202a758b87a218a4241237308df0b4336d..a6d0110de1c4e9191e5faa261961432f7157fa37 100644 (file)
@@ -27,6 +27,7 @@
 #include <archive_entry.h>
 
 #include <pakfire/archive_writer.h>
+#include <pakfire/progress.h>
 #include <pakfire/string.h>
 
 struct pakfire_archive_writer {
@@ -59,6 +60,9 @@ struct pakfire_archive_writer {
 
        // Resolver for hardlinks
        struct archive_entry_linkresolver* linkresolver;
+
+       // Progress Status
+       struct pakfire_progress* progress;
 };
 
 /*
@@ -213,6 +217,8 @@ static int pakfire_archive_writer_setup_linkresolver(struct pakfire_archive_writ
 static void pakfire_archive_writer_free(struct pakfire_archive_writer* self) {
        if (self->linkresolver)
                archive_entry_linkresolver_free(self->linkresolver);
+       if (self->progress)
+               pakfire_progress_unref(self->progress);
        if (self->archive)
                archive_write_free(self->archive);
        if (self->pakfire)
@@ -259,6 +265,16 @@ int pakfire_archive_writer_create(struct pakfire_archive_writer** writer,
        if (r < 0)
                goto ERROR;
 
+       int progress_flags =
+               PAKFIRE_PROGRESS_SHOW_PERCENTAGE |
+               PAKFIRE_PROGRESS_SHOW_BYTES_TRANSFERRED |
+               PAKFIRE_PROGRESS_SHOW_TRANSFER_SPEED;
+
+       // Create the progress indicator
+       r = pakfire_progress_create(&self->progress, self->ctx, progress_flags, NULL);
+       if (r < 0)
+               goto ERROR;
+
        // Return the pointer
        *writer = self;
        return 0;