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

index eca31f54b76e5ca701ec5800c4011aa5087b3ca0..b3c497869628d20f63fe259ac307132ff946e284 100644 (file)
@@ -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);
index 3822b80fd4edc374b1a0e0a4ff18026db03826c0..e32aa6701bca5a35a0b0df957c97778cd38f1ecf 100644 (file)
@@ -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;
index 88b62266731e929efda5c826f48a1bc710235067..2f6c09672bb33c6801e01b50691d73b52ccc27c6 100644 (file)
@@ -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 */
index e4917f27b1008aa902bbb183b2d6a6a8c4263787..167eb61b5b6fcea71cccac60f88f46506d172d35 100644 (file)
@@ -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
index d917471f3dbadfb1fc1d9d5d2e773852ef7ed0f5..6abe23626d9ef6bf02d71f76c76d96409b1a8a7e 100644 (file)
@@ -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);
+}
index 7b36f6591779d4c7d35acc8efff41ba336c6a2f0..80edb39eb8dec29fd3f8221c9bff0ebd6b3219a8 100644 (file)
@@ -26,6 +26,7 @@ struct pakfire_ctx;
 #include <pakfire/logging.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/progress.h>
+#include <pakfire/transaction.h>
 
 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 */
index 5053fbe07eb192561459e331d2441d5209a4bb46..3ff770fadb796e466bc0dc26c12a3dc390f9c8a4 100644 (file)
@@ -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);
index 6347ba415ee884942647ea695cb9c365bcc9511e..37091ef33e4fc734171efe2b0d3d99952ec309b7 100644 (file)
@@ -23,6 +23,7 @@
 
 struct pakfire_transaction;
 
+#include <pakfire/package.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/problem.h>
 #include <pakfire/solution.h>
index afb3a373f42f9f82d719fa71675d7e2843dfdf30..c48ce2cd4297a150cf668f4b77752fdbd6404051 100644 (file)
@@ -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;
index 4f39647ad0b26d587f5a381139ece88b0b0be06c..9bc2f18c88cf93e956f831d229c1fb51ae10293e 100644 (file)
@@ -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;
 }
index 7c112e1cf3523a44507ed4a4085b5d85d6c3f35c..0862747d70126a26abb5188e1ef5114fe79e7ddf 100644 (file)
@@ -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;