diff options
author | Jaime van Kessel <nallath@gmail.com> | 2022-01-03 13:01:17 +0300 |
---|---|---|
committer | Jaime van Kessel <nallath@gmail.com> | 2022-01-03 13:01:17 +0300 |
commit | 3b2be48390abfb465cd85446662cfe253e723507 (patch) | |
tree | de1abcfd16164e021cf991a631b671b1b1f1eb80 | |
parent | 0615369cba94ad4671b7e8817cd168f464517f89 (diff) |
Ensure that check for updates is called on startup of Cura
CURA-8588
-rw-r--r-- | plugins/Marketplace/Marketplace.py | 40 | ||||
-rw-r--r-- | plugins/Marketplace/PackageList.py | 7 | ||||
-rw-r--r-- | plugins/Marketplace/resources/qml/ManagedPackages.qml | 4 | ||||
-rw-r--r-- | plugins/Marketplace/resources/qml/Materials.qml | 5 | ||||
-rw-r--r-- | plugins/Marketplace/resources/qml/Plugins.qml | 5 |
5 files changed, 42 insertions, 19 deletions
diff --git a/plugins/Marketplace/Marketplace.py b/plugins/Marketplace/Marketplace.py index dee2e0f4ac..9bc1a2713c 100644 --- a/plugins/Marketplace/Marketplace.py +++ b/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) diff --git a/plugins/Marketplace/PackageList.py b/plugins/Marketplace/PackageList.py index ddc39e0c94..6d8ab3e4c6 100644 --- a/plugins/Marketplace/PackageList.py +++ b/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") diff --git a/plugins/Marketplace/resources/qml/ManagedPackages.qml b/plugins/Marketplace/resources/qml/ManagedPackages.qml index dbdc04bf52..7c3d3ecfa2 100644 --- a/plugins/Marketplace/resources/qml/ManagedPackages.qml +++ b/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 } diff --git a/plugins/Marketplace/resources/qml/Materials.qml b/plugins/Marketplace/resources/qml/Materials.qml index d19f3a4b04..03abd94077 100644 --- a/plugins/Marketplace/resources/qml/Materials.qml +++ b/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 } diff --git a/plugins/Marketplace/resources/qml/Plugins.qml b/plugins/Marketplace/resources/qml/Plugins.qml index 3cfa92d134..5e8f459e77 100644 --- a/plugins/Marketplace/resources/qml/Plugins.qml +++ b/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 } |