Count the number of packages which have a license to display

CURA-7155
This commit is contained in:
Nino van Hooff 2020-01-30 16:42:42 +01:00
parent eec7d2f0cd
commit a02b753d53
2 changed files with 28 additions and 20 deletions

View file

@ -71,6 +71,7 @@ class LicenseModel(QObject):
self._updateDialogTitle() self._updateDialogTitle()
def _updateDialogTitle(self): def _updateDialogTitle(self):
self._dialogTitle = catalog.i18nc("@title:window", "Plugin License Agreement ({}/{})" self._dialogTitle = catalog.i18nc("@title:window", "Plugin License Agreement")
.format(self._current_page_idx + 1, self._page_count)) if self._page_count > 1:
self._dialogTitle = self._dialogTitle + " ({}/{})".format(self._current_page_idx + 1, self._page_count)
self.dialogTitleChanged.emit() self.dialogTitleChanged.emit()

View file

@ -1,5 +1,6 @@
import os 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 from PyQt5.QtCore import QObject, pyqtSlot
@ -28,6 +29,7 @@ class LicensePresenter(QObject):
self._package_models = [] # type: List[Dict] self._package_models = [] # type: List[Dict]
decline_button_text = self._catalog.i18nc("@button", "Decline and remove from account") 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._license_model = LicenseModel(decline_button_text=decline_button_text) # type: LicenseModel
self._page_count = 0
self._app = app self._app = app
@ -49,7 +51,6 @@ class LicensePresenter(QObject):
"handler": self "handler": self
} }
self._dialog = self._app.createQmlComponent(path, context_properties) self._dialog = self._app.createQmlComponent(path, context_properties)
self._license_model.setPageCount(len(self._package_models))
self._presentCurrentPackage() self._presentCurrentPackage()
@pyqtSlot() @pyqtSlot()
@ -63,34 +64,40 @@ class LicensePresenter(QObject):
self._checkNextPage() self._checkNextPage()
def _initState(self, packages: Dict[str, Dict[str, str]]) -> None: def _initState(self, packages: Dict[str, Dict[str, str]]) -> None:
self._package_models = [
{ implicitly_accepted_count = 0
"package_id" : package_id,
"package_path" : item["package_path"], for package_id, item in packages.items():
"icon_url" : item["icon_url"], item["package_id"] = package_id
"accepted" : None #: None: no answer yet item["licence_content"] = self._package_manager.getPackageLicense(item["package_path"])
} if item["licence_content"] is None:
for package_id, item in packages.items() # 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: def _presentCurrentPackage(self) -> None:
package_model = self._package_models[self._current_package_idx] package_model = self._package_models[self._current_package_idx]
package_info = self._package_manager.getPackageInfo(package_model["package_path"]) 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.setCurrentPageIdx(self._current_package_idx)
self._license_model.setPackageName(package_info["display_name"]) self._license_model.setPackageName(package_info["display_name"])
self._license_model.setIconUrl(package_model["icon_url"]) 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: if self._dialog:
self._dialog.open() # Does nothing if already open self._dialog.open() # Does nothing if already open
def _checkNextPage(self) -> None: 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._current_package_idx += 1
self._presentCurrentPackage() self._presentCurrentPackage()
else: else: