Addon Manager: Show repository URL if it exists on the metadata

Fix: #14777
This commit is contained in:
hasecilu
2024-09-19 13:10:19 -06:00
committed by Chris Hennes
parent 1657d46241
commit e5be24d422
3 changed files with 30 additions and 1 deletions

View File

@@ -92,6 +92,7 @@ class PackageDetailsView(QtWidgets.QWidget):
self.readme_browser = None
self.message_label = None
self.location_label = None
self.url_label = None
self.installed = False
self.disabled = False
self.update_info = UpdateInformation()
@@ -108,10 +109,13 @@ class PackageDetailsView(QtWidgets.QWidget):
self.readme_browser = WidgetReadmeBrowser(self)
self.message_label = QtWidgets.QLabel(self)
self.location_label = QtWidgets.QLabel(self)
self.url_label = QtWidgets.QLabel(self)
self.url_label.setOpenExternalLinks(True)
self.location_label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
self.vertical_layout.addWidget(self.button_bar)
self.vertical_layout.addWidget(self.message_label)
self.vertical_layout.addWidget(self.location_label)
self.vertical_layout.addWidget(self.url_label)
self.vertical_layout.addWidget(self.readme_browser)
self.button_bar.hide() # Start with no bar
@@ -127,6 +131,21 @@ class PackageDetailsView(QtWidgets.QWidget):
else:
self.location_label.hide()
def set_url(self, url: Optional[str]):
if url is not None:
text = (
translate("AddonsInstaller", "Repository URL")
+ ': <a href="'
+ url
+ '">'
+ url
+ "</a>"
)
self.url_label.setText(text)
self.url_label.show()
else:
self.url_label.hide()
def set_installed(
self,
installed: bool,

View File

@@ -244,6 +244,12 @@ def get_branch_from_metadata(metadata: Metadata) -> str:
return "master" # Legacy default
def get_repo_url_from_metadata(metadata: Metadata) -> str:
for url in metadata.url:
if url.type == UrlType.repository:
return url.location
class MetadataReader:
"""Read metadata XML data and construct a Metadata object"""

View File

@@ -35,6 +35,7 @@ from addonmanager_metadata import (
Version,
get_first_supported_freecad_version,
get_branch_from_metadata,
get_repo_url_from_metadata,
)
from addonmanager_workers_startup import GetMacroDetailsWorker, CheckSingleUpdateWorker
from addonmanager_git import GitManager, NoGitFound
@@ -98,6 +99,10 @@ class PackageDetailsController(QtCore.QObject):
installed = self.addon.status() != Addon.Status.NOT_INSTALLED
self.ui.set_installed(installed)
if repo.metadata is not None:
self.ui.set_url(get_repo_url_from_metadata(repo.metadata))
else:
self.ui.set_url(None) # to reset it and hide it
update_info = UpdateInformation()
if installed:
update_info.unchecked = self.addon.status() == Addon.Status.UNCHECKED
@@ -110,7 +115,6 @@ class PackageDetailsController(QtCore.QObject):
update_info.version = repo.macro.version
self.ui.set_update_available(update_info)
self.ui.set_location(os.path.join(self.addon.mod_directory, self.addon.name))
self.ui.set_location(os.path.join(self.addon.mod_directory, self.addon.name))
self.ui.set_disabled(self.addon.is_disabled())
self.ui.allow_running(repo.repo_type == Addon.Kind.MACRO)
self.ui.allow_disabling(repo.repo_type != Addon.Kind.MACRO)