Addon Manager: Refactor progress reporting

This commit is contained in:
Chris Hennes
2024-12-05 22:08:47 -06:00
committed by Yorik van Havre
parent 1cf2bacf1f
commit 30177e2cf2
6 changed files with 293 additions and 93 deletions

View File

@@ -57,8 +57,8 @@ class CreateAddonListWorker(QtCore.QThread):
"""This worker updates the list of available workbenches, emitting an "addon_repo"
signal for each Addon as they are processed."""
status_message = QtCore.Signal(str)
addon_repo = QtCore.Signal(object)
progress_made = QtCore.Signal(str, int, int)
def __init__(self):
QtCore.QThread.__init__(self)
@@ -121,7 +121,6 @@ class CreateAddonListWorker(QtCore.QThread):
"Failed to connect to GitHub. Check your connection and proxy settings.",
)
FreeCAD.Console.PrintError(message + "\n")
self.status_message.emit(message)
raise ConnectionError
def _process_deprecated(self, deprecated_addons):
@@ -265,8 +264,6 @@ class CreateAddonListWorker(QtCore.QThread):
repo.obsolete = True
self.addon_repo.emit(repo)
self.status_message.emit(translate("AddonsInstaller", "Workbenches list was updated."))
def _retrieve_macros_from_git(self):
"""Retrieve macros from FreeCAD-macros.git
@@ -281,7 +278,6 @@ class CreateAddonListWorker(QtCore.QThread):
"AddonsInstaller",
"Git is disabled, skipping Git macros",
)
self.status_message.emit(message)
FreeCAD.Console.PrintWarning(message + "\n")
return
@@ -529,7 +525,7 @@ class CheckWorkbenchesForUpdatesWorker(QtCore.QThread):
"""This worker checks for available updates for all workbenches"""
update_status = QtCore.Signal(Addon)
progress_made = QtCore.Signal(int, int)
progress_made = QtCore.Signal(str, int, int)
def __init__(self, repos: List[Addon]):
@@ -549,7 +545,10 @@ class CheckWorkbenchesForUpdatesWorker(QtCore.QThread):
for repo in self.repos:
if self.current_thread.isInterruptionRequested():
return
self.progress_made.emit(count, len(self.repos))
message = translate("AddonsInstaller", "Checking {} for update").format(
repo.display_name
)
self.progress_made.emit(message, count, len(self.repos))
count += 1
if repo.status() == Addon.Status.UNCHECKED:
if repo.repo_type == Addon.Kind.WORKBENCH:
@@ -743,9 +742,8 @@ class UpdateChecker:
class CacheMacroCodeWorker(QtCore.QThread):
"""Download and cache the macro code, and parse its internal metadata"""
status_message = QtCore.Signal(str)
update_macro = QtCore.Signal(Addon)
progress_made = QtCore.Signal(int, int)
progress_made = QtCore.Signal(str, int, int)
def __init__(self, repos: List[Addon]) -> None:
QtCore.QThread.__init__(self)
@@ -761,8 +759,6 @@ class CacheMacroCodeWorker(QtCore.QThread):
"""Rarely called directly: create an instance and call start() on it instead to
launch in a new thread"""
self.status_message.emit(translate("AddonsInstaller", "Caching macro code..."))
self.repo_queue = queue.Queue()
num_macros = 0
for repo in self.repos:
@@ -846,7 +842,8 @@ class CacheMacroCodeWorker(QtCore.QThread):
if QtCore.QThread.currentThread().isInterruptionRequested():
return
self.progress_made.emit(len(self.repos) - self.repo_queue.qsize(), len(self.repos))
message = translate("AddonsInstaller", "Caching {} macro").format(repo.display_name)
self.progress_made.emit(message, len(self.repos) - self.repo_queue.qsize(), len(self.repos))
try:
next_repo = self.repo_queue.get_nowait()
@@ -857,12 +854,6 @@ class CacheMacroCodeWorker(QtCore.QThread):
self.terminators.append(
QtCore.QTimer.singleShot(10000, lambda: self.terminate(worker))
)
self.status_message.emit(
translate(
"AddonsInstaller",
"Getting metadata from macro {}",
).format(next_repo.macro.name)
)
worker.start()
except queue.Empty:
pass
@@ -895,7 +886,6 @@ class CacheMacroCodeWorker(QtCore.QThread):
class GetMacroDetailsWorker(QtCore.QThread):
"""Retrieve the macro details for a macro"""
status_message = QtCore.Signal(str)
readme_updated = QtCore.Signal(str)
def __init__(self, repo):
@@ -907,12 +897,9 @@ class GetMacroDetailsWorker(QtCore.QThread):
"""Rarely called directly: create an instance and call start() on it instead to
launch in a new thread"""
self.status_message.emit(translate("AddonsInstaller", "Retrieving macro description..."))
if not self.macro.parsed and self.macro.on_git:
self.status_message.emit(translate("AddonsInstaller", "Retrieving info from Git"))
self.macro.fill_details_from_file(self.macro.src_filename)
if not self.macro.parsed and self.macro.on_wiki:
self.status_message.emit(translate("AddonsInstaller", "Retrieving info from wiki"))
mac = self.macro.name.replace(" ", "_")
mac = mac.replace("&", "%26")
mac = mac.replace("+", "%2B")