#include "pakfire.h"
#include "progressbar.h"
-#include "terminal.h"
static FILE* open_distro_config(const char* distro) {
char path[PATH_MAX];
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);
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;
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 */
// 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
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) {
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);
+}
#include <pakfire/logging.h>
#include <pakfire/pakfire.h>
#include <pakfire/progress.h>
+#include <pakfire/transaction.h>
int pakfire_ctx_create(struct pakfire_ctx** ctx);
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,
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 */
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);
struct pakfire_transaction;
+#include <pakfire/package.h>
#include <pakfire/pakfire.h>
#include <pakfire/problem.h>
#include <pakfire/solution.h>
pakfire_ctx_set_log_callback;
pakfire_ctx_set_confirm_callback;
pakfire_ctx_set_progress_callback;
+ pakfire_ctx_set_pick_solution_callback;
# pakfire
pakfire_check;
// 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;
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;
}
}
// 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;