From: Michael Tremer Date: Mon, 16 Oct 2023 14:13:01 +0000 (+0000) Subject: ctx: Move the progress callback into the context X-Git-Tag: 0.9.30~1488 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10a25449dcac3d994c9845be637ae2f2b13af525;p=pakfire.git ctx: Move the progress callback into the context Signed-off-by: Michael Tremer --- diff --git a/src/cli/lib/pakfire.c b/src/cli/lib/pakfire.c index 9582da5f1..eca31f54b 100644 --- a/src/cli/lib/pakfire.c +++ b/src/cli/lib/pakfire.c @@ -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 diff --git a/src/cli/lib/progressbar.c b/src/cli/lib/progressbar.c index eb07aed92..d226aa1be 100644 --- a/src/cli/lib/progressbar.c +++ b/src/cli/lib/progressbar.c @@ -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; diff --git a/src/cli/lib/progressbar.h b/src/cli/lib/progressbar.h index caf27b3f1..15d76f13e 100644 --- a/src/cli/lib/progressbar.h +++ b/src/cli/lib/progressbar.h @@ -24,6 +24,7 @@ #include #include -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 */ diff --git a/src/cli/pakfire-builder.c b/src/cli/pakfire-builder.c index 017cb60ec..e29004ea7 100644 --- a/src/cli/pakfire-builder.c +++ b/src/cli/pakfire-builder.c @@ -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 diff --git a/src/cli/pakfire.c b/src/cli/pakfire.c index 6940ad536..e4917f27b 100644 --- a/src/cli/pakfire.c +++ b/src/cli/pakfire.c @@ -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 diff --git a/src/libpakfire/ctx.c b/src/libpakfire/ctx.c index 84d511b11..d917471f3 100644 --- a/src/libpakfire/ctx.c +++ b/src/libpakfire/ctx.c @@ -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); +} diff --git a/src/libpakfire/include/pakfire/ctx.h b/src/libpakfire/include/pakfire/ctx.h index 74dc33ce0..7b36f6591 100644 --- a/src/libpakfire/include/pakfire/ctx.h +++ b/src/libpakfire/include/pakfire/ctx.h @@ -25,6 +25,7 @@ struct pakfire_ctx; #include #include +#include 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 */ diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index 08584df07..5053fbe07 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -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); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index cbc234601..afb3a373f 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -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; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index ac9992f4d..4f39647ad 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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; } diff --git a/src/libpakfire/progress.c b/src/libpakfire/progress.c index 975f06729..4fa90b5e6 100644 --- a/src/libpakfire/progress.c +++ b/src/libpakfire/progress.c @@ -22,12 +22,14 @@ #include #include +#include #include #include #include #include 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; }