struct pakfire_archive** archives;
struct pakfire_package** packages;
size_t num;
+ size_t progress;
};
enum pakfire_actions {
return NULL;
}
+static int pakfire_transaction_get_progress(struct pakfire_transaction* transaction) {
+ return transaction->progress * 100 / transaction->num;
+}
+
PAKFIRE_EXPORT size_t pakfire_transaction_count(struct pakfire_transaction* transaction) {
return transaction->num;
}
static int pakfire_transaction_extract(struct pakfire_transaction* transaction,
struct pakfire_package* pkg, struct pakfire_archive* archive) {
+ const char* nevra = pakfire_package_get_nevra(pkg);
+
+ // Update status
+ pakfire_call_status_callback(transaction->pakfire, _("Installing %s..."), nevra);
+
// Extract payload to the root of the Pakfire instance
int r = pakfire_archive_extract(archive, NULL);
if (r) {
ERROR(transaction->pakfire, "Could not extract package %s: %m\n",
- pakfire_package_get_nevra(pkg));
+ nevra);
return r;
}
// Execute the action of this script
case PAKFIRE_ACTION_EXECUTE:
+ // Increment progress
+ transaction->progress++;
+
+ // Update progress callback
+ pakfire_call_progress_callback(transaction->pakfire,
+ pakfire_transaction_get_progress(transaction));
+
switch (type) {
case PAKFIRE_STEP_INSTALL:
case PAKFIRE_STEP_REINSTALL:
struct pakfire_db* db, enum pakfire_actions action) {
int r = 0;
+ // Update status
+ switch (action) {
+ case PAKFIRE_ACTION_VERIFY:
+ pakfire_call_status_callback(transaction->pakfire, _("Verifying packages..."));
+ break;
+
+ case PAKFIRE_ACTION_PRETRANS:
+ pakfire_call_status_callback(transaction->pakfire, _("Preparing installation..."));
+ break;
+
+ case PAKFIRE_ACTION_POSTTRANS:
+ pakfire_call_status_callback(transaction->pakfire, _("Finishing up..."));
+ break;
+
+ default:
+ break;
+ }
+
// Walk through all steps
for (unsigned int i = 0; i < transaction->num; i++) {
r = pakfire_transaction_run_step(transaction, db, action,