AddonManager: Refactor uninstaller GUI

Offload uninstaller GUI into its own class, add tests for that class, and do
some additional minor cleanup of AddonManager.py.
This commit is contained in:
Chris Hennes
2022-12-18 20:45:09 -06:00
parent 02b4a762b0
commit 5f45b00078
15 changed files with 516 additions and 240 deletions

View File

@@ -32,6 +32,7 @@ import FreeCAD
from PySide import QtCore
import addonmanager_utilities as utils
from Addon import Addon
translate = FreeCAD.Qt.translate
@@ -58,7 +59,7 @@ class AddonUninstaller(QtCore.QObject):
addon_to_remove = MyAddon() # Some class with 'name' attribute
self.worker_thread = QtCore.QThread()
self.uninstaller = AddonInstaller(addon_to_remove)
self.uninstaller = AddonUninstaller(addon_to_remove)
self.uninstaller.moveToThread(self.worker_thread)
self.uninstaller.success.connect(self.removal_succeeded)
self.uninstaller.failure.connect(self.removal_failed)
@@ -100,7 +101,7 @@ class AddonUninstaller(QtCore.QObject):
"""Remove an addon. Returns True if the addon was removed cleanly, or False if not. Emits
either success or failure prior to returning."""
success = False
error_message = translate("AddonsInstaller", "An unknown error occured")
error_message = translate("AddonsInstaller", "An unknown error occurred")
if hasattr(self.addon_to_remove, "name") and self.addon_to_remove.name:
# Make sure we don't accidentally remove the Mod directory
path_to_remove = os.path.normpath(
@@ -124,6 +125,7 @@ class AddonUninstaller(QtCore.QObject):
self.success.emit(self.addon_to_remove)
else:
self.failure.emit(self.addon_to_remove, error_message)
self.addon_to_remove.set_status(Addon.Status.NOT_INSTALLED)
self.finished.emit()
def run_uninstall_script(self, path_to_remove):
@@ -248,6 +250,7 @@ class MacroUninstaller(QtCore.QObject):
self.success.emit(self.addon_to_remove)
else:
self.failure.emit(self.addon_to_remove, "\n".join(errors))
self.addon_to_remove.set_status(Addon.Status.NOT_INSTALLED)
self.finished.emit()
def _get_files_to_remove(self) -> List[os.PathLike]: