summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Popov <6yearold@gmail.com>2023-09-12 21:02:54 +0300
committerNeal Gompa (ニール・ゴンパ) <ngompa13@gmail.com>2023-10-31 21:02:01 -0400
commitdfca6826297664d8dab45cd7186b3f8c1ed8c059 (patch)
tree1d3daf6267e3a4814e01ed233786d7596458145d
parent24b26912c000ede62dce93d6898e3b6c577cff17 (diff)
freebsd backend: Improve progress reporting and add cancellation support to remove_packages().
-rw-r--r--backends/freebsd/pk-backend-freebsd.cpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/backends/freebsd/pk-backend-freebsd.cpp b/backends/freebsd/pk-backend-freebsd.cpp
index 67530d634..8a5e0b8e1 100644
--- a/backends/freebsd/pk-backend-freebsd.cpp
+++ b/backends/freebsd/pk-backend-freebsd.cpp
@@ -1114,31 +1114,36 @@ pk_backend_remove_packages_thread (PkBackendJob *job, GVariant *params, gpointer
PackageDatabase pkgDb (job, lockType, PKGDB_DEFAULT);
- uint jobsCount;
- uint currentJob = 0;
- pkgDb.setEventHandler([job, &jobsCount, &currentJob, &jc](pkg_event* ev) {
+ pkgDb.setEventHandler([job, &jc](pkg_event* ev) {
+ if (jc.cancelIfRequested())
+ return true;
+
switch (ev->type) {
case PKG_EVENT_PROGRESS_TICK:
{
uint progress = (ev->e_progress_tick.current * 100) / ev->e_progress_tick.total;
- progress = adjustProgress(progress, currentJob, jobsCount);
pk_backend_job_set_percentage (job, progress);
break;
}
- case PKG_EVENT_DEINSTALL_FINISHED:
+ case PKG_EVENT_DEINSTALL_BEGIN:
{
- pkg* pkg = ev->e_install_finished.pkg;
+ pkg* pkg = ev->e_deinstall_begin.pkg;
PackageView pkgView(pkg);
pk_backend_job_package (job, PK_INFO_ENUM_REMOVING, pkgView.packageKitId(), pkgView.comment());
+ pk_backend_job_set_percentage (job, 0);
+ break;
+ }
+ case PKG_EVENT_DEINSTALL_FINISHED:
+ {
+ pk_backend_job_set_percentage (job, 100);
break;
}
default:
+ handleErrnoEvent (job, ev);
break;
}
- // TODO: libpkg doesn't yet support cancelling
- //jc.cancelIfRequested();
- (void) jc;
- return 0;
+
+ return jc.cancelIfRequested();
});
Jobs jobs(PKG_JOBS_DEINSTALL, pkgDb.handle(), "remove_packages");
@@ -1159,7 +1164,7 @@ pk_backend_remove_packages_thread (PkBackendJob *job, GVariant *params, gpointer
pk_backend_job_set_status (job, PK_STATUS_ENUM_DEP_RESOLVE);
- jobsCount = jobs.solve();
+ uint jobsCount = jobs.solve();
// TODO: handle locked pkgs
g_assert (!jobs.hasLockedPackages());
@@ -1192,8 +1197,6 @@ pk_backend_remove_packages_thread (PkBackendJob *job, GVariant *params, gpointer
pk_backend_job_set_status (job, PK_STATUS_ENUM_CLEANUP);
pkgdb_compact (pkgDb.handle());
-
- pk_backend_job_set_percentage (job, 100);
}
void