From: Michael Tremer Date: Mon, 16 Oct 2023 14:24:19 +0000 (+0000) Subject: ctx: Move pick solution callback into the context X-Git-Tag: 0.9.30~1487 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8cfa28c847a038470ed092811c41abcc12316a94;p=pakfire.git ctx: Move pick solution callback into the context Signed-off-by: Michael Tremer --- diff --git a/src/cli/lib/pakfire.c b/src/cli/lib/pakfire.c index eca31f54b..b3c497869 100644 --- a/src/cli/lib/pakfire.c +++ b/src/cli/lib/pakfire.c @@ -26,7 +26,6 @@ #include "pakfire.h" #include "progressbar.h" -#include "terminal.h" static FILE* open_distro_config(const char* distro) { char path[PATH_MAX]; @@ -98,11 +97,6 @@ int cli_setup_pakfire(struct pakfire** pakfire, struct cli_config* config) { if (r) goto ERROR; - if (!pakfire_has_flag(p, PAKFIRE_FLAGS_BUILD)) { - // Configure pick solution callback - pakfire_set_pick_solution_callback(p, cli_term_pick_solution, NULL); - } - // Enable repositories for (unsigned int i = 0; i < config->num_enable_repos; i++) cli_set_repo_enabled(p, config->enable_repos[i], 1); diff --git a/src/cli/lib/terminal.c b/src/cli/lib/terminal.c index 3822b80fd..e32aa6701 100644 --- a/src/cli/lib/terminal.c +++ b/src/cli/lib/terminal.c @@ -256,8 +256,8 @@ static struct pakfire_solution* cli_term_find_solution( return selected_solution; } -int cli_term_pick_solution( - struct pakfire* pakfire, struct pakfire_transaction* transaction, void* data) { +int cli_term_pick_solution(struct pakfire_ctx* ctx, struct pakfire* pakfire, void* data, + struct pakfire_transaction* transaction) { struct pakfire_problem** problems = NULL; struct pakfire_solution* solution = NULL; unsigned int num_solutions = 0; diff --git a/src/cli/lib/terminal.h b/src/cli/lib/terminal.h index 88b622667..2f6c09672 100644 --- a/src/cli/lib/terminal.h +++ b/src/cli/lib/terminal.h @@ -34,7 +34,7 @@ int cli_term_confirm(struct pakfire_ctx* ctx, struct pakfire* pakfire, int cli_term_confirm_yes(struct pakfire_ctx* ctx, struct pakfire* pakfire, void* data, const char* message, const char* question); -int cli_term_pick_solution( - struct pakfire* pakfire, struct pakfire_transaction* transaction, void* data); +int cli_term_pick_solution(struct pakfire_ctx* ctx, struct pakfire* pakfire, + void* data, struct pakfire_transaction* transaction); #endif /* PAKFIRE_CLI_TERMINAL_H */ diff --git a/src/cli/pakfire.c b/src/cli/pakfire.c index e4917f27b..167eb61b5 100644 --- a/src/cli/pakfire.c +++ b/src/cli/pakfire.c @@ -151,6 +151,9 @@ int main(int argc, char* argv[]) { // Setup progress callback pakfire_ctx_set_progress_callback(ctx, cli_setup_progressbar, NULL); + // Setup pick solution callback + pakfire_ctx_set_pick_solution_callback(ctx, cli_term_pick_solution, NULL); + struct cli_config config = { .ctx = ctx, // XXX hard-coded path diff --git a/src/libpakfire/ctx.c b/src/libpakfire/ctx.c index d917471f3..6abe23626 100644 --- a/src/libpakfire/ctx.c +++ b/src/libpakfire/ctx.c @@ -53,6 +53,12 @@ struct pakfire_ctx { pakfire_progress_callback callback; void* data; } progress; + + // Pick Solution + struct pakfire_ctx_pick_solution { + pakfire_pick_solution_callback callback; + void* data; + } pick_solution; }; static int parse_log_level(const char* level) { @@ -214,3 +220,20 @@ int pakfire_ctx_setup_progress(struct pakfire_ctx* ctx, struct pakfire* pakfire, return ctx->progress.callback(ctx, pakfire, ctx->progress.data, progress); } + +// Pick Solution + +PAKFIRE_EXPORT void pakfire_ctx_set_pick_solution_callback(struct pakfire_ctx* ctx, + pakfire_pick_solution_callback callback, void* data) { + ctx->pick_solution.callback = callback; + ctx->pick_solution.data = data; + +} + +int pakfire_ctx_pick_solution(struct pakfire_ctx* ctx, struct pakfire* pakfire, + struct pakfire_transaction* transaction) { + if (!ctx->pick_solution.callback) + return 0; + + return ctx->pick_solution.callback(ctx, pakfire, ctx->pick_solution.data, transaction); +} diff --git a/src/libpakfire/include/pakfire/ctx.h b/src/libpakfire/include/pakfire/ctx.h index 7b36f6591..80edb39eb 100644 --- a/src/libpakfire/include/pakfire/ctx.h +++ b/src/libpakfire/include/pakfire/ctx.h @@ -26,6 +26,7 @@ struct pakfire_ctx; #include #include #include +#include int pakfire_ctx_create(struct pakfire_ctx** ctx); @@ -56,6 +57,14 @@ typedef int (*pakfire_progress_callback)(struct pakfire_ctx*ctx, struct pakfire* void pakfire_ctx_set_progress_callback(struct pakfire_ctx* ctx, pakfire_progress_callback callback, void* data); +// Pick Solution + +typedef int (*pakfire_pick_solution_callback)(struct pakfire_ctx* ctx, + struct pakfire* pakfire, void* data, struct pakfire_transaction* transaction); + +void pakfire_ctx_set_pick_solution_callback(struct pakfire_ctx* ctx, + pakfire_pick_solution_callback callback, void* data); + #ifdef PAKFIRE_PRIVATE void pakfire_ctx_log(struct pakfire_ctx* ctx, int level, const char* file, int line, @@ -71,6 +80,11 @@ int pakfire_ctx_confirm(struct pakfire_ctx* ctx, struct pakfire* pakfire, int pakfire_ctx_setup_progress(struct pakfire_ctx* ctx, struct pakfire* pakfire, struct pakfire_progress* progress); +// Pick Solution + +int pakfire_ctx_pick_solution(struct pakfire_ctx* ctx, struct pakfire* pakfire, + struct pakfire_transaction* transaction); + #endif /* PAKFIRE_PRIVATE */ #endif /* PAKFIRE_CTX_H */ diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index 5053fbe07..3ff770fad 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -57,12 +57,6 @@ struct pakfire* pakfire_unref(struct pakfire* pakfire); int pakfire_has_flag(struct pakfire* pakfire, const int flag); -// Callbacks -typedef int (*pakfire_pick_solution_callback) - (struct pakfire* pakfire, struct pakfire_transaction* transaction, void* data); -void pakfire_set_pick_solution_callback( - struct pakfire* pakfire, pakfire_pick_solution_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/include/pakfire/transaction.h b/src/libpakfire/include/pakfire/transaction.h index 6347ba415..37091ef33 100644 --- a/src/libpakfire/include/pakfire/transaction.h +++ b/src/libpakfire/include/pakfire/transaction.h @@ -23,6 +23,7 @@ struct pakfire_transaction; +#include #include #include #include diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index afb3a373f..c48ce2cd4 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -29,6 +29,7 @@ global: pakfire_ctx_set_log_callback; pakfire_ctx_set_confirm_callback; pakfire_ctx_set_progress_callback; + pakfire_ctx_set_pick_solution_callback; # pakfire pakfire_check; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 4f39647ad..9bc2f18c8 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -101,17 +101,6 @@ struct pakfire { // Pool Pool* pool; - // Callbacks - struct pakfire_callbacks { - // Confirm - pakfire_confirm_callback confirm; - void* confirm_data; - - // Pick Solution - pakfire_pick_solution_callback pick_solution; - void* pick_solution_data; - } callbacks; - // Logging int log_priority; @@ -1048,25 +1037,6 @@ struct pakfire_ctx* pakfire_ctx(struct pakfire* pakfire) { return pakfire_ctx_ref(pakfire->ctx); } -// Callbacks - -PAKFIRE_EXPORT void pakfire_set_pick_solution_callback(struct pakfire* pakfire, - pakfire_pick_solution_callback callback, void* data) { - pakfire->callbacks.pick_solution = callback; - pakfire->callbacks.pick_solution_data = data; -} - -int pakfire_pick_solution(struct pakfire* pakfire, struct pakfire_transaction* transaction) { - int r = 1; - - // Call the callback - if (pakfire->callbacks.pick_solution) - r = pakfire->callbacks.pick_solution( - pakfire, transaction, pakfire->callbacks.pick_solution_data); - - return r; -} - PAKFIRE_EXPORT int pakfire_has_flag(struct pakfire* pakfire, const int flag) { return pakfire->flags & flag; } diff --git a/src/libpakfire/transaction.c b/src/libpakfire/transaction.c index 7c112e1cf..0862747d7 100644 --- a/src/libpakfire/transaction.c +++ b/src/libpakfire/transaction.c @@ -623,7 +623,7 @@ RETRY: } // Ask the user to pick a solution - r = pakfire_pick_solution(transaction->pakfire, transaction); + r = pakfire_ctx_pick_solution(transaction->ctx, transaction->pakfire, transaction); switch (r) { case 0: goto RETRY;