diff --git a/plugins/Toolbox/src/CloudSync/LicenseModel.py b/plugins/Toolbox/src/CloudSync/LicenseModel.py index bb62cb8abd..335a91ef84 100644 --- a/plugins/Toolbox/src/CloudSync/LicenseModel.py +++ b/plugins/Toolbox/src/CloudSync/LicenseModel.py @@ -71,6 +71,7 @@ class LicenseModel(QObject): self._updateDialogTitle() def _updateDialogTitle(self): - self._dialogTitle = catalog.i18nc("@title:window", "Plugin License Agreement ({}/{})" - .format(self._current_page_idx + 1, self._page_count)) + self._dialogTitle = catalog.i18nc("@title:window", "Plugin License Agreement") + if self._page_count > 1: + self._dialogTitle = self._dialogTitle + " ({}/{})".format(self._current_page_idx + 1, self._page_count) self.dialogTitleChanged.emit() diff --git a/plugins/Toolbox/src/CloudSync/LicensePresenter.py b/plugins/Toolbox/src/CloudSync/LicensePresenter.py index 74fc2a3099..5f01166898 100644 --- a/plugins/Toolbox/src/CloudSync/LicensePresenter.py +++ b/plugins/Toolbox/src/CloudSync/LicensePresenter.py @@ -1,5 +1,6 @@ import os -from typing import Dict, Optional, List +from collections import OrderedDict +from typing import Dict, Optional, List, Any from PyQt5.QtCore import QObject, pyqtSlot @@ -28,6 +29,7 @@ class LicensePresenter(QObject): self._package_models = [] # type: List[Dict] decline_button_text = self._catalog.i18nc("@button", "Decline and remove from account") self._license_model = LicenseModel(decline_button_text=decline_button_text) # type: LicenseModel + self._page_count = 0 self._app = app @@ -49,7 +51,6 @@ class LicensePresenter(QObject): "handler": self } self._dialog = self._app.createQmlComponent(path, context_properties) - self._license_model.setPageCount(len(self._package_models)) self._presentCurrentPackage() @pyqtSlot() @@ -63,34 +64,40 @@ class LicensePresenter(QObject): self._checkNextPage() def _initState(self, packages: Dict[str, Dict[str, str]]) -> None: - self._package_models = [ - { - "package_id" : package_id, - "package_path" : item["package_path"], - "icon_url" : item["icon_url"], - "accepted" : None #: None: no answer yet - } - for package_id, item in packages.items() - ] + + implicitly_accepted_count = 0 + + for package_id, item in packages.items(): + item["package_id"] = package_id + item["licence_content"] = self._package_manager.getPackageLicense(item["package_path"]) + if item["licence_content"] is None: + # Implicitly accept when there is no license + item["accepted"] = True + implicitly_accepted_count = implicitly_accepted_count + 1 + self._package_models.append(item) + else: + item["accepted"] = None #: None: no answer yet + # When presenting the packages, we want to show packages which have a license first. + # In fact, we don't want to show the others at all because they are implicitly accepted + self._package_models.insert(0, item) + CuraApplication.getInstance().processEvents() + self._page_count = len(self._package_models) - implicitly_accepted_count + self._license_model.setPageCount(self._page_count) + def _presentCurrentPackage(self) -> None: package_model = self._package_models[self._current_package_idx] package_info = self._package_manager.getPackageInfo(package_model["package_path"]) - license_content = self._package_manager.getPackageLicense(package_model["package_path"]) - if license_content is None: - # Implicitly accept when there is no license - self.onLicenseAccepted() - return self._license_model.setCurrentPageIdx(self._current_package_idx) self._license_model.setPackageName(package_info["display_name"]) self._license_model.setIconUrl(package_model["icon_url"]) - self._license_model.setLicenseText(license_content) + self._license_model.setLicenseText(package_model["licence_content"]) if self._dialog: self._dialog.open() # Does nothing if already open def _checkNextPage(self) -> None: - if self._current_package_idx + 1 < len(self._package_models): + if self._current_package_idx + 1 < self._page_count: self._current_package_idx += 1 self._presentCurrentPackage() else: