PAKFIRE_JOB_BEST = 1 << 3,
};
+typedef int (*pakfire_transaction_pick_solution_callback)
+ (struct pakfire_transaction* transaction, void* data);
+
int pakfire_transaction_create(struct pakfire_transaction** transaction,
struct pakfire* pakfire, int flags);
// Callbacks
void pakfire_transaction_set_status_callback(
struct pakfire_transaction* transaction, pakfire_status_callback callback, void* data);
+void pakfire_transaction_set_pick_solution_callback(
+ struct pakfire_transaction* transaction, pakfire_transaction_pick_solution_callback callback, void* data);
int pakfire_transaction_solve(struct pakfire_transaction* transaction, int flags, char** problems);
// Status
pakfire_status_callback status;
void* status_data;
+
+ // Pick Solution
+ pakfire_transaction_pick_solution_callback pick_solution;
+ void* pick_solution_data;
} callbacks;
};
transaction->callbacks.status_data = data;
}
+PAKFIRE_EXPORT void pakfire_transaction_set_pick_solution_callback(
+ struct pakfire_transaction* transaction, pakfire_transaction_pick_solution_callback callback, void* data) {
+ transaction->callbacks.pick_solution = callback;
+ transaction->callbacks.pick_solution_data = data;
+}
+
static int pakfire_transaction_get_progress(struct pakfire_transaction* transaction) {
return transaction->progress * 100 / transaction->num;
}
return transaction->solver;
}
+static int pakfire_transaction_pick_solution(struct pakfire_transaction* transaction) {
+ int r = 1;
+
+ // Call the callback
+ if (transaction->callbacks.pick_solution)
+ r = transaction->callbacks.pick_solution(
+ transaction, transaction->callbacks.pick_solution_data);
+
+ return r;
+}
+
PAKFIRE_EXPORT int pakfire_transaction_solve(struct pakfire_transaction* transaction,
int flags, char** problems) {
char* p = NULL;
}
// Ask the user to pick a solution
- if (flags & PAKFIRE_REQ_SOLVE_INTERACTIVE) {
- r = pakfire_ui_pick_solution(transaction->pakfire, transaction);
- if (r)
- goto ERROR;
+ r = pakfire_transaction_pick_solution(transaction);
+ switch (r) {
+ case 0:
+ goto RETRY;
- // Retry solving
- goto RETRY;
-
- } else {
- char* s = pakfire_transaction_get_problem_string(transaction, 0);
- if (s)
- ERROR(transaction->pakfire, "%s\n", s);
+ default:
+ goto ERROR;
}
break;
}