Browse Source

Merge branch 'CURA-7155_confusing_license_dialog_page_count' of github.com:Ultimaker/Cura

Jaime van Kessel 5 years ago
parent
commit
42f7cead4d

+ 3 - 2
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()

+ 25 - 18
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: