Browse Source

Ensure that check for updates is called on startup of Cura

CURA-8588
Jaime van Kessel 3 years ago
parent
commit
3b2be48390

+ 34 - 6
plugins/Marketplace/Marketplace.py

@@ -16,7 +16,7 @@ from .LocalPackageList import LocalPackageList  # To register this type with QML
 from .RestartManager import RestartManager  # To register this type with QML.
 
 
-class Marketplace(Extension):
+class Marketplace(Extension, QObject):
     """
     The main managing object for the Marketplace plug-in.
     """
@@ -37,16 +37,44 @@ class Marketplace(Extension):
         tabShownChanged = pyqtSignal()
         tabShown = pyqtProperty(int, fget=getTabShown, fset=setTabShown, notify=tabShownChanged)
 
-    def __init__(self) -> None:
-        super().__init__()
+    def __init__(self, parent: Optional[QObject] = None) -> None:
+        QObject.__init__(self, parent)
+        Extension.__init__(self)
         self._window: Optional["QObject"] = None  # If the window has been loaded yet, it'll be cached in here.
         self._plugin_registry: Optional[PluginRegistry] = None
         self._tab_manager = Marketplace.TabManager()
+        self._package_manager = CuraApplication.getInstance().getPackageManager()
+
+        self._material_package_list: Optional[RemotePackageList] = None
+        self._plugin_package_list: Optional[RemotePackageList] = None
+
+        # Not entirely the cleanest code, since the localPackage list also checks the server if there are updates
+        # Since that in turn will trigger notifications to be shown, we do need to construct it here and make sure
+        # that it checks for updates...
+        self._local_package_list = LocalPackageList(self)
+        self._local_package_list.checkForUpdates(self._package_manager.local_packages)
 
-        qmlRegisterType(RemotePackageList, "Marketplace", 1, 0, "RemotePackageList")
-        qmlRegisterType(LocalPackageList, "Marketplace", 1, 0, "LocalPackageList")
         qmlRegisterType(RestartManager, "Marketplace", 1, 0, "RestartManager")
 
+    @pyqtProperty(QObject, constant=True)
+    def MaterialPackageList(self):
+        if self._material_package_list is None:
+            self._material_package_list = RemotePackageList()
+            self._material_package_list.packageTypeFilter = "material"
+
+        return self._material_package_list
+
+    @pyqtProperty(QObject, constant=True)
+    def PluginPackageList(self):
+        if self._plugin_package_list is None:
+            self._plugin_package_list = RemotePackageList()
+            self._plugin_package_list.packageTypeFilter = "plugin"
+        return self._plugin_package_list
+
+    @pyqtProperty(QObject, constant=True)
+    def LocalPackageList(self):
+        return self._local_package_list
+
     @pyqtSlot()
     def show(self) -> None:
         """
@@ -60,7 +88,7 @@ class Marketplace(Extension):
             if plugin_path is None:
                 plugin_path = os.path.dirname(__file__)
             path = os.path.join(plugin_path, "resources", "qml", "Marketplace.qml")
-            self._window = CuraApplication.getInstance().createQmlComponent(path, {"tabManager": self._tab_manager})
+            self._window = CuraApplication.getInstance().createQmlComponent(path, {"tabManager": self._tab_manager, "manager": self})
         if self._window is None:  # Still None? Failed to load the QML then.
             return
         self._tab_manager.setTabShown(0)

+ 5 - 2
plugins/Marketplace/PackageList.py

@@ -132,9 +132,12 @@ class PackageList(ListModel):
         :return: ``True`` if a Footer should be displayed in the ListView, e.q.: paginated lists, ``False`` Otherwise"""
         return self._has_footer
 
-    def getPackageModel(self, package_id: str) -> PackageModel:
+    def getPackageModel(self, package_id: str) -> Optional[PackageModel]:
         index = self.find("package", package_id)
-        return self.getItem(index)["package"]
+        data = self.getItem(index)
+        if data:
+            return data.get("package")
+        return None
 
     def _openLicenseDialog(self, package_id: str, license_content: str) -> None:
         plugin_path = self._plugin_registry.getPluginPath("Marketplace")

+ 1 - 3
plugins/Marketplace/resources/qml/ManagedPackages.qml

@@ -22,7 +22,5 @@ Packages
     searchInBrowserUrl: "https://marketplace.ultimaker.com/app/cura/plugins?utm_source=cura&utm_medium=software&utm_campaign=marketplace-search-plugins-browser"
     packagesManageableInListView: true
 
-    model: Marketplace.LocalPackageList
-    {
-    }
+    model: manager.LocalPackageList
 }

+ 1 - 4
plugins/Marketplace/resources/qml/Materials.qml

@@ -19,8 +19,5 @@ Packages
     searchInBrowserUrl: "https://marketplace.ultimaker.com/app/cura/materials?utm_source=cura&utm_medium=software&utm_campaign=marketplace-search-materials-browser"
     packagesManageableInListView: false
 
-    model: Marketplace.RemotePackageList
-    {
-        packageTypeFilter: "material"
-    }
+    model: manager.MaterialPackageList
 }

+ 1 - 4
plugins/Marketplace/resources/qml/Plugins.qml

@@ -19,8 +19,5 @@ Packages
     searchInBrowserUrl: "https://marketplace.ultimaker.com/app/cura/plugins?utm_source=cura&utm_medium=software&utm_campaign=marketplace-search-plugins-browser"
     packagesManageableInListView: false
 
-    model: Marketplace.RemotePackageList
-    {
-        packageTypeFilter: "plugin"
-    }
+    model: manager.PluginPackageList
 }