]> git.ipfire.org Git - pakfire.git/commitdiff
ctx: Move the progress callback into the context
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 16 Oct 2023 14:13:01 +0000 (14:13 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 16 Oct 2023 14:13:01 +0000 (14:13 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/cli/lib/pakfire.c
src/cli/lib/progressbar.c
src/cli/lib/progressbar.h
src/cli/pakfire-builder.c
src/cli/pakfire.c
src/libpakfire/ctx.c
src/libpakfire/include/pakfire/ctx.h
src/libpakfire/include/pakfire/pakfire.h
src/libpakfire/libpakfire.sym
src/libpakfire/pakfire.c
src/libpakfire/progress.c

index 9582da5f1518f73bf24dea69b70283dd06c04e1e..eca31f54b76e5ca701ec5800c4011aa5087b3ca0 100644 (file)
@@ -98,15 +98,9 @@ int cli_setup_pakfire(struct pakfire** pakfire, struct cli_config* config) {
        if (r)
                goto ERROR;
 
-       // Setup progress callback
-       pakfire_set_setup_progress_callback(p, cli_setup_progressbar, NULL);
-
        if (!pakfire_has_flag(p, PAKFIRE_FLAGS_BUILD)) {
                // Configure pick solution callback
                pakfire_set_pick_solution_callback(p, cli_term_pick_solution, NULL);
-
-               // Configure setup progress callback
-               pakfire_set_setup_progress_callback(p, cli_setup_progressbar, NULL);
        }
 
        // Enable repositories
index eb07aed92dd57bb60e14e04006e0f6ca2cc85398..d226aa1be8d495b750d80895233b8fdcc680df15 100644 (file)
@@ -562,7 +562,8 @@ static int cli_progressbar_add_transfer_speed(struct cli_progressbar* p) {
        return cli_progressbar_add_widget(p, cli_progressbar_transfer_speed, NULL, 0, NULL);
 }
 
-int cli_setup_progressbar(struct pakfire* pakfire, struct pakfire_progress* p, void* data) {
+int cli_setup_progressbar(struct pakfire_ctx* ctx, struct pakfire* pakfire,
+               struct pakfire_progress* p, void* data) {
        struct cli_progressbar* progressbar = NULL;
        int r;
 
index caf27b3f1a956d85ee7c0ccc1ac0e42075b99c49..15d76f13e8e02745aa3110e0bc6bc3263a84b392 100644 (file)
@@ -24,6 +24,7 @@
 #include <pakfire/pakfire.h>
 #include <pakfire/progress.h>
 
-int cli_setup_progressbar(struct pakfire* pakfire, struct pakfire_progress* p, void* data);
+int cli_setup_progressbar(struct pakfire_ctx* ctx, struct pakfire* pakfire,
+       struct pakfire_progress* p, void* data);
 
 #endif /* PAKFIRE_CLI_PROGRESSBAR_H */
index 017cb60ecd9d2d84dd2e76a5e35944f5692f1433..e29004ea72e91ffd92cc281b2eeedc70c5dc6070 100644 (file)
@@ -142,6 +142,9 @@ int main(int argc, char* argv[]) {
        if (r)
                goto ERROR;
 
+       // Setup progress callback
+       pakfire_ctx_set_progress_callback(ctx, cli_setup_progressbar, NULL);
+
        struct cli_config config = {
                .ctx      = ctx,
                // XXX hard-coded distro
index 6940ad5361583f8f4c16c9b78f3ec8c64aec7eae..e4917f27b1008aa902bbb183b2d6a6a8c4263787 100644 (file)
@@ -26,6 +26,7 @@
 #include "lib/info.h"
 #include "lib/install.h"
 #include "lib/pakfire.h"
+#include "lib/progressbar.h"
 #include "lib/provides.h"
 #include "lib/remove.h"
 #include "lib/repolist.h"
@@ -147,6 +148,9 @@ int main(int argc, char* argv[]) {
        // Make this all interactive
        pakfire_ctx_set_confirm_callback(ctx, cli_term_confirm, NULL);
 
+       // Setup progress callback
+       pakfire_ctx_set_progress_callback(ctx, cli_setup_progressbar, NULL);
+
        struct cli_config config = {
                .ctx      = ctx,
                // XXX hard-coded path
index 84d511b111c1616ff87fcd4919f17437d25bec1f..d917471f3dbadfb1fc1d9d5d2e773852ef7ed0f5 100644 (file)
@@ -47,6 +47,12 @@ struct pakfire_ctx {
                pakfire_confirm_callback callback;
                void* data;
        } confirm;
+
+       // Progress
+       struct pakfire_ctx_progress {
+               pakfire_progress_callback callback;
+               void* data;
+       } progress;
 };
 
 static int parse_log_level(const char* level) {
@@ -192,3 +198,19 @@ int pakfire_ctx_confirm(struct pakfire_ctx* ctx, struct pakfire* pakfire,
 
        return ctx->confirm.callback(ctx, pakfire, ctx->confirm.data, message, question);
 }
+
+// Progress
+
+PAKFIRE_EXPORT void pakfire_ctx_set_progress_callback(struct pakfire_ctx* ctx,
+               pakfire_progress_callback callback, void* data) {
+       ctx->progress.callback = callback;
+       ctx->progress.data     = data;
+}
+
+int pakfire_ctx_setup_progress(struct pakfire_ctx* ctx, struct pakfire* pakfire,
+               struct pakfire_progress* progress) {
+       if (!ctx->progress.callback)
+               return 0;
+
+       return ctx->progress.callback(ctx, pakfire, ctx->progress.data, progress);
+}
index 74dc33ce02f7e37a562a41f68c30409f780a24df..7b36f6591779d4c7d35acc8efff41ba336c6a2f0 100644 (file)
@@ -25,6 +25,7 @@ struct pakfire_ctx;
 
 #include <pakfire/logging.h>
 #include <pakfire/pakfire.h>
+#include <pakfire/progress.h>
 
 int pakfire_ctx_create(struct pakfire_ctx** ctx);
 
@@ -47,6 +48,14 @@ typedef int (*pakfire_confirm_callback)(struct pakfire_ctx* ctx, struct pakfire*
 void pakfire_ctx_set_confirm_callback(struct pakfire_ctx* ctx,
        pakfire_confirm_callback callback, void* data);
 
+// Progress
+
+typedef int (*pakfire_progress_callback)(struct pakfire_ctx*ctx, struct pakfire* pakfire,
+       struct pakfire_progress* progress, void* data);
+
+void pakfire_ctx_set_progress_callback(struct pakfire_ctx* ctx,
+       pakfire_progress_callback callback, void* data);
+
 #ifdef PAKFIRE_PRIVATE
 
 void pakfire_ctx_log(struct pakfire_ctx* ctx, int level, const char* file, int line,
@@ -57,6 +66,11 @@ void pakfire_ctx_log(struct pakfire_ctx* ctx, int level, const char* file, int l
 int pakfire_ctx_confirm(struct pakfire_ctx* ctx, struct pakfire* pakfire,
        const char* message, const char* question);
 
+// Progress
+
+int pakfire_ctx_setup_progress(struct pakfire_ctx* ctx, struct pakfire* pakfire,
+       struct pakfire_progress* progress);
+
 #endif /* PAKFIRE_PRIVATE */
 
 #endif /* PAKFIRE_CTX_H */
index 08584df07332f76ee5bf6e8be42ffd9dc67dd1ef..5053fbe07eb192561459e331d2441d5209a4bb46 100644 (file)
@@ -63,11 +63,6 @@ typedef int (*pakfire_pick_solution_callback)
 void pakfire_set_pick_solution_callback(
        struct pakfire* pakfire, pakfire_pick_solution_callback callback, void* data);
 
-typedef int (*pakfire_setup_progress_callback)
-       (struct pakfire* pakfire, struct pakfire_progress* progress, void* data);
-void pakfire_set_setup_progress_callback(
-       struct pakfire* pakfire, pakfire_setup_progress_callback callback, void* data);
-
 const char* pakfire_get_path(struct pakfire* pakfire);
 
 int pakfire_clean(struct pakfire* pakfire, int flags);
index cbc234601278c2e5f25b8b45833882536b7a600f..afb3a373f42f9f82d719fa71675d7e2843dfdf30 100644 (file)
@@ -28,6 +28,7 @@ global:
        pakfire_ctx_set_log_level;
        pakfire_ctx_set_log_callback;
        pakfire_ctx_set_confirm_callback;
+       pakfire_ctx_set_progress_callback;
 
        # pakfire
        pakfire_check;
index ac9992f4d9f303b2d96de084521ac13dcd6e9475..4f39647ad0b26d587f5a381139ece88b0b0be06c 100644 (file)
@@ -110,10 +110,6 @@ struct pakfire {
                // Pick Solution
                pakfire_pick_solution_callback pick_solution;
                void* pick_solution_data;
-
-               // Setup Progress
-               pakfire_setup_progress_callback setup_progress;
-               void* setup_progress_data;
        } callbacks;
 
        // Logging
@@ -1071,22 +1067,6 @@ int pakfire_pick_solution(struct pakfire* pakfire, struct pakfire_transaction* t
        return r;
 }
 
-PAKFIRE_EXPORT void pakfire_set_setup_progress_callback(struct pakfire* pakfire,
-               pakfire_setup_progress_callback callback, void* data) {
-       pakfire->callbacks.setup_progress = callback;
-       pakfire->callbacks.setup_progress_data = data;
-}
-
-int pakfire_setup_progress(struct pakfire* pakfire, struct pakfire_progress* progress) {
-       int r = 0;
-
-       if (pakfire->callbacks.setup_progress)
-               r = pakfire->callbacks.setup_progress(pakfire,
-                       progress, pakfire->callbacks.setup_progress_data);
-
-       return r;
-}
-
 PAKFIRE_EXPORT int pakfire_has_flag(struct pakfire* pakfire, const int flag) {
        return pakfire->flags & flag;
 }
index 975f0672926d483e3fed6c94b2aa274c5f6fac39..4fa90b5e6dd0ac3d2fc0ad799337b3ff1effad3f 100644 (file)
 #include <stdlib.h>
 #include <time.h>
 
+#include <pakfire/ctx.h>
 #include <pakfire/logging.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/private.h>
 #include <pakfire/progress.h>
 
 struct pakfire_progress {
+       struct pakfire_ctx* ctx;
        struct pakfire* pakfire;
        int nrefs;
 
@@ -78,7 +80,10 @@ static void pakfire_progress_free(struct pakfire_progress* p) {
                pakfire_progress_unref(p->parent);
        if (p->title)
                free(p->title);
-       pakfire_unref(p->pakfire);
+       if (p->pakfire)
+               pakfire_unref(p->pakfire);
+       if (p->ctx)
+               pakfire_ctx_unref(p->ctx);
        free(p);
 }
 
@@ -104,6 +109,9 @@ int pakfire_progress_create(struct pakfire_progress** progress,
        if (!p)
                return -errno;
 
+       // Store a reference to the context
+       p->ctx = pakfire_ctx(pakfire);
+
        // Store a reference to Pakfire
        p->pakfire = pakfire_ref(pakfire);
 
@@ -125,7 +133,7 @@ int pakfire_progress_create(struct pakfire_progress** progress,
 
        // Call setup
        if (!pakfire_progress_has_flag(p, PAKFIRE_PROGRESS_NO_PROGRESS)) {
-               r = pakfire_setup_progress(pakfire, p);
+               r = pakfire_ctx_setup_progress(p->ctx, p->pakfire, p);
                if (r)
                        goto ERROR;
        }