diff options
author | Gleb Popov <6yearold@gmail.com> | 2023-09-12 21:02:54 +0300 |
---|---|---|
committer | Neal Gompa (ニール・ゴンパ) <ngompa13@gmail.com> | 2023-10-31 21:02:01 -0400 |
commit | dfca6826297664d8dab45cd7186b3f8c1ed8c059 (patch) | |
tree | 1d3daf6267e3a4814e01ed233786d7596458145d | |
parent | 24b26912c000ede62dce93d6898e3b6c577cff17 (diff) |
freebsd backend: Improve progress reporting and add cancellation support to remove_packages().
-rw-r--r-- | backends/freebsd/pk-backend-freebsd.cpp | 29 |
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, ¤tJob, &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 |