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
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;
#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 */
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
#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"
// 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
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) {
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);
+}
#include <pakfire/logging.h>
#include <pakfire/pakfire.h>
+#include <pakfire/progress.h>
int pakfire_ctx_create(struct pakfire_ctx** ctx);
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,
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 */
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);
pakfire_ctx_set_log_level;
pakfire_ctx_set_log_callback;
pakfire_ctx_set_confirm_callback;
+ pakfire_ctx_set_progress_callback;
# pakfire
pakfire_check;
// 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
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;
}
#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;
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);
}
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);
// 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;
}