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

@@ -53,8 +53,7 @@ class UpdateMetadataCacheWorker(QtCore.QThread):
"""Scan through all available packages and see if our local copy of package.xml needs to be
updated"""
status_message = QtCore.Signal(str)
progress_made = QtCore.Signal(int, int)
progress_made = QtCore.Signal(str, int, int)
package_updated = QtCore.Signal(Addon)
class RequestType(Enum):
@@ -166,18 +165,26 @@ class UpdateMetadataCacheWorker(QtCore.QThread):
"""Callback for handling a completed metadata file download."""
if index in self.requests:
self.requests_completed += 1
self.progress_made.emit(self.requests_completed, self.total_requests)
request = self.requests.pop(index)
if code == 200: # HTTP success
self.updated_repos.add(request[0]) # mark this repo as updated
file = "unknown"
if request[1] == UpdateMetadataCacheWorker.RequestType.PACKAGE_XML:
self.process_package_xml(request[0], data)
file = "package.xml"
elif request[1] == UpdateMetadataCacheWorker.RequestType.METADATA_TXT:
self.process_metadata_txt(request[0], data)
file = "metadata.txt"
elif request[1] == UpdateMetadataCacheWorker.RequestType.REQUIREMENTS_TXT:
self.process_requirements_txt(request[0], data)
file = "requirements.txt"
elif request[1] == UpdateMetadataCacheWorker.RequestType.ICON:
self.process_icon(request[0], data)
file = "icon"
message = translate("AddonsInstaller", "Downloaded {} for {}").format(
file, request[0].display_name
)
self.progress_made.emit(message, self.requests_completed, self.total_requests)
def process_package_xml(self, repo: Addon, data: QtCore.QByteArray):
"""Process the package.xml metadata file"""
@@ -197,9 +204,6 @@ class UpdateMetadataCacheWorker(QtCore.QThread):
return
repo.set_metadata(metadata)
FreeCAD.Console.PrintLog(f"Downloaded package.xml for {repo.name}\n")
self.status_message.emit(
translate("AddonsInstaller", "Downloaded package.xml for {}").format(repo.name)
)
# Grab a new copy of the icon as well: we couldn't enqueue this earlier because
# we didn't know the path to it, which is stored in the package.xml file.
@@ -251,10 +255,6 @@ class UpdateMetadataCacheWorker(QtCore.QThread):
def process_metadata_txt(self, repo: Addon, data: QtCore.QByteArray):
"""Process the metadata.txt metadata file"""
self.status_message.emit(
translate("AddonsInstaller", "Downloaded metadata.txt for {}").format(repo.display_name)
)
f = self._ensure_string(data, repo.name, "metadata.txt")
lines = f.splitlines()
for line in lines:
@@ -291,12 +291,6 @@ class UpdateMetadataCacheWorker(QtCore.QThread):
def process_requirements_txt(self, repo: Addon, data: QtCore.QByteArray):
"""Process the requirements.txt metadata file"""
self.status_message.emit(
translate(
"AddonsInstaller",
"Downloaded requirements.txt for {}",
).format(repo.display_name)
)
f = self._ensure_string(data, repo.name, "requirements.txt")
lines = f.splitlines()
@@ -312,9 +306,6 @@ class UpdateMetadataCacheWorker(QtCore.QThread):
def process_icon(self, repo: Addon, data: QtCore.QByteArray):
"""Convert icon data into a valid icon file and store it"""
self.status_message.emit(
translate("AddonsInstaller", "Downloaded icon for {}").format(repo.display_name)
)
cache_file = repo.get_cached_icon_filename()
with open(cache_file, "wb") as icon_file:
icon_file.write(data.data())