From 2d44fbfae0505ef750fe5b03f340cf7de84e217b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 23 Jan 2026 08:22:34 -0800 Subject: [PATCH 1/3] Package: combine single-use methods, always signal operation finished --- src/Core/Package.vala | 46 +++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index d8b28972b..e95dea03e 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -475,17 +475,10 @@ public class AppCenterCore.Package : Object { return false; } - unowned var flatpak_backend = AppCenterCore.FlatpakBackend.get_default (); - try { bool success = yield perform_operation (State.INSTALLING, State.INSTALLED, State.NOT_INSTALLED); - if (success) { - flatpak_backend.operation_finished (this, State.INSTALLING, null); - } - return success; } catch (Error e) { - flatpak_backend.operation_finished (this, State.INSTALLING, e); return false; } } @@ -516,24 +509,33 @@ public class AppCenterCore.Package : Object { private async bool perform_operation (State performing, State after_success, State after_fail) throws GLib.Error { bool success = false; - prepare_package_operation (performing); + + change_information.start (); + state = performing; + + unowned var flatpak_backend = AppCenterCore.FlatpakBackend.get_default (); + flatpak_backend.notify_package_changed (this); + try { success = yield perform_package_operation (); + flatpak_backend.operation_finished (this, performing, null); } catch (GLib.Error e) { warning ("Operation failed for package %s - %s", name, e.message); + flatpak_backend.operation_finished (this, performing, e); throw e; } finally { - clean_up_package_operation (success, after_success, after_fail); - } + change_information.complete (); - return success; - } + if (success) { + state = after_success; + } else { + state = after_fail; + } - private void prepare_package_operation (State initial_state) { - change_information.start (); - state = initial_state; + flatpak_backend.notify_package_changed (this); + } - FlatpakBackend.get_default ().notify_package_changed (this); + return success; } private async bool perform_package_operation () throws GLib.Error { @@ -563,18 +565,6 @@ public class AppCenterCore.Package : Object { } } - private void clean_up_package_operation (bool success, State success_state, State fail_state) { - change_information.complete (); - - if (success) { - state = success_state; - } else { - state = fail_state; - } - - FlatpakBackend.get_default ().notify_package_changed (this); - } - public uint cached_search_score = 0; public uint matches_search (string[] queries) { // TODO: We don't use AppStream.Component.search_matches_all because it has some broken vapi From 7aa429e7fffef4a458d1818b20dc37ab73ed5a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 23 Jan 2026 08:34:10 -0800 Subject: [PATCH 2/3] eliminate some nesting --- src/Core/Package.vala | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index e95dea03e..7209a9c60 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -484,15 +484,15 @@ public class AppCenterCore.Package : Object { } public async bool uninstall () throws Error { - if (state == State.INSTALLED || state == State.UPDATE_AVAILABLE) { - try { - return yield perform_operation (State.REMOVING, State.NOT_INSTALLED, state); - } catch (Error e) { - throw e; - } + if (state != INSTALLED && state != State.UPDATE_AVAILABLE) { + throw new PackageUninstallError.APP_STATE_NOT_INSTALLED (_("Application state not set as installed in AppCenter for package: %s").printf (name)); } - throw new PackageUninstallError.APP_STATE_NOT_INSTALLED (_("Application state not set as installed in AppCenter for package: %s").printf (name)); + try { + return yield perform_operation (State.REMOVING, State.NOT_INSTALLED, state); + } catch (Error e) { + throw e; + } } public void launch () throws Error { From 3f2a2f32720f3cba1110c7e33f251370784a1596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 23 Jan 2026 08:35:13 -0800 Subject: [PATCH 3/3] Throw errors correctly --- src/Core/Package.vala | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index 7209a9c60..0fa27a4ca 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -470,17 +470,12 @@ public class AppCenterCore.Package : Object { return yield perform_operation (State.UPDATING, State.INSTALLED, State.UPDATE_AVAILABLE); } - public async bool install () { + public async bool install () throws Error { if (state != State.NOT_INSTALLED) { return false; } - try { - bool success = yield perform_operation (State.INSTALLING, State.INSTALLED, State.NOT_INSTALLED); - return success; - } catch (Error e) { - return false; - } + return yield perform_operation (State.INSTALLING, State.INSTALLED, State.NOT_INSTALLED); } public async bool uninstall () throws Error { @@ -488,11 +483,7 @@ public class AppCenterCore.Package : Object { throw new PackageUninstallError.APP_STATE_NOT_INSTALLED (_("Application state not set as installed in AppCenter for package: %s").printf (name)); } - try { - return yield perform_operation (State.REMOVING, State.NOT_INSTALLED, state); - } catch (Error e) { - throw e; - } + return yield perform_operation (State.REMOVING, State.NOT_INSTALLED, state); } public void launch () throws Error {