diff --git a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py index 5fdd919749..3e1c4f5cdf 100644 --- a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py +++ b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py @@ -20,6 +20,9 @@ from ..CloudApiModel import CloudApiModel class CloudPackageChecker(QObject): + + SYNC_SERVICE_NAME = "CloudPackageChecker" + def __init__(self, application: CuraApplication) -> None: super().__init__() @@ -38,17 +41,19 @@ class CloudPackageChecker(QObject): def _onAppInitialized(self) -> None: self._package_manager = self._application.getPackageManager() # initial check - self._onLoginStateChanged() - # check again whenever the login state changes - self._application.getCuraAPI().account.loginStateChanged.connect(self._onLoginStateChanged) + self._getPackagesIfLoggedIn() - def _onLoginStateChanged(self) -> None: + self._application.getCuraAPI().account.loginStateChanged.connect(self._getPackagesIfLoggedIn) + self._application.getCuraAPI().account.manualSyncRequested.connect(self._getPackagesIfLoggedIn) + + def _getPackagesIfLoggedIn(self) -> None: if self._application.getCuraAPI().account.isLoggedIn: self._getUserSubscribedPackages() else: self._hideSyncMessage() def _getUserSubscribedPackages(self) -> None: + self._application.getCuraAPI().account.setSyncState(self.SYNC_SERVICE_NAME, "syncing") Logger.debug("Requesting subscribed packages metadata from server.") url = CloudApiModel.api_url_user_packages self._application.getHttpRequestManager().get(url, @@ -61,6 +66,7 @@ class CloudPackageChecker(QObject): Logger.log("w", "Requesting user packages failed, response code %s while trying to connect to %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()) + self._application.getCuraAPI().account.setSyncState(self.SYNC_SERVICE_NAME, "error") return try: @@ -69,11 +75,14 @@ class CloudPackageChecker(QObject): if "errors" in json_data: for error in json_data["errors"]: Logger.log("e", "%s", error["title"]) + self._application.getCuraAPI().account.setSyncState(self.SYNC_SERVICE_NAME, "error") return self._handleCompatibilityData(json_data["data"]) except json.decoder.JSONDecodeError: Logger.log("w", "Received invalid JSON for user subscribed packages from the Web Marketplace") + self._application.getCuraAPI().account.setSyncState(self.SYNC_SERVICE_NAME, "success") + def _handleCompatibilityData(self, subscribed_packages_payload: List[Dict[str, Any]]) -> None: user_subscribed_packages = [plugin["package_id"] for plugin in subscribed_packages_payload] user_installed_packages = self._package_manager.getUserInstalledPackages()