diff --git a/cura/API/ConnectionStatus.py b/cura/API/ConnectionStatus.py index 007f03fdd1..36f804e3cf 100644 --- a/cura/API/ConnectionStatus.py +++ b/cura/API/ConnectionStatus.py @@ -1,22 +1,21 @@ from typing import Optional -from PyQt5.QtCore import QObject, pyqtSignal, QTimer, pyqtProperty -from PyQt5.QtNetwork import QNetworkReply +from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty from UM.TaskManagement.HttpRequestManager import HttpRequestManager -from cura.UltimakerCloud import UltimakerCloudConstants class ConnectionStatus(QObject): - """Status info for some web services""" + """Provides an estimation of whether internet is reachable - UPDATE_INTERVAL = 10.0 # seconds - ULTIMAKER_CLOUD_STATUS_URL = UltimakerCloudConstants.CuraCloudAPIRoot + "/connect/v1/" + Estimation is updated with every request through HttpRequestManager. + Acts as a proxy to HttpRequestManager.internetReachableChanged without + exposing the HttpRequestManager in its entirety. + """ __instance = None # type: Optional[ConnectionStatus] internetReachableChanged = pyqtSignal() - umCloudReachableChanged = pyqtSignal() @classmethod def getInstance(cls, *args, **kwargs) -> "ConnectionStatus": @@ -24,41 +23,19 @@ class ConnectionStatus(QObject): cls.__instance = cls(*args, **kwargs) return cls.__instance - def __init__(self, parent: Optional["QObject"] = None): + def __init__(self, parent: Optional["QObject"] = None) -> None: super().__init__(parent) - self._http = HttpRequestManager.getInstance() - self._statuses = { - self.ULTIMAKER_CLOUD_STATUS_URL: True, - "http://example.com": True - } + manager = HttpRequestManager.getInstance() + self._is_internet_reachable = manager.isInternetReachable # type: bool + manager.internetReachableChanged.connect(self._onInternetReachableChanged) - # Create a timer for automatic updates - self._update_timer = QTimer() - self._update_timer.setInterval(int(self.UPDATE_INTERVAL * 1000)) - # The timer is restarted automatically - self._update_timer.setSingleShot(False) - self._update_timer.timeout.connect(self._update) - self._update_timer.start() - - @pyqtProperty(bool, notify=internetReachableChanged) + @pyqtProperty(bool, notify = internetReachableChanged) def isInternetReachable(self) -> bool: - # Is any of the test urls reachable? - return any(self._statuses.values()) + return self._is_internet_reachable - def _update(self): - for url in self._statuses.keys(): - self._http.get( - url = url, - callback = self._statusCallback, - error_callback = self._statusCallback, - timeout = 5 - ) - - def _statusCallback(self, reply: QNetworkReply, error: QNetworkReply.NetworkError = None): - url = reply.request().url().toString() - prev_statuses = self._statuses.copy() - self._statuses[url] = HttpRequestManager.replyIndicatesSuccess(reply, error) - - if any(self._statuses.values()) != any(prev_statuses.values()): + def _onInternetReachableChanged(self, reachable: bool): + if reachable != self._is_internet_reachable: + self._is_internet_reachable = reachable self.internetReachableChanged.emit() + diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 33c9caba05..da200c7fc2 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -104,7 +104,7 @@ class CloudOutputDeviceManager: self._api.getClusters(self._onGetRemoteClustersFinished, self._onGetRemoteClusterFailed) def _onGetRemoteClustersFinished(self, clusters: List[CloudClusterResponse]) -> None: - """Callback for when the request for getting the clusters is finished.""" + """Callback for when the request for getting the clusters is successful and finished.""" self._um_cloud_printers = {m.getMetaDataEntry(self.META_CLUSTER_ID): m for m in CuraApplication.getInstance().getContainerRegistry().findContainerStacks(