|
@@ -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:
|