Browse Source

Merge branch 'CURA-7492_Change_how_the_connection_status_is_determined'

Ghostkeeper 4 years ago
parent
commit
5286be77a1

+ 16 - 39
cura/API/ConnectionStatus.py

@@ -1,22 +1,21 @@
 from typing import Optional
 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 UM.TaskManagement.HttpRequestManager import HttpRequestManager
-from cura.UltimakerCloud import UltimakerCloudConstants
 
 
 
 
 class ConnectionStatus(QObject):
 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]
     __instance = None  # type: Optional[ConnectionStatus]
 
 
     internetReachableChanged = pyqtSignal()
     internetReachableChanged = pyqtSignal()
-    umCloudReachableChanged = pyqtSignal()
 
 
     @classmethod
     @classmethod
     def getInstance(cls, *args, **kwargs) -> "ConnectionStatus":
     def getInstance(cls, *args, **kwargs) -> "ConnectionStatus":
@@ -24,41 +23,19 @@ class ConnectionStatus(QObject):
             cls.__instance = cls(*args, **kwargs)
             cls.__instance = cls(*args, **kwargs)
         return cls.__instance
         return cls.__instance
 
 
-    def __init__(self, parent: Optional["QObject"] = None):
+    def __init__(self, parent: Optional["QObject"] = None) -> None:
         super().__init__(parent)
         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:
     def isInternetReachable(self) -> bool:
-        # Is any of the test urls reachable?
-        return any(self._statuses.values())
-
-    def _update(self):
-        for url in self._statuses.keys():
-            self._http.get(
-                url = url,
-                callback = self._statusCallback,
-                error_callback = self._statusCallback,
-                timeout = 5
-            )
+        return self._is_internet_reachable
 
 
-    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()
             self.internetReachableChanged.emit()
+

+ 1 - 1
plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py

@@ -104,7 +104,7 @@ class CloudOutputDeviceManager:
         self._api.getClusters(self._onGetRemoteClustersFinished, self._onGetRemoteClusterFailed)
         self._api.getClusters(self._onGetRemoteClustersFinished, self._onGetRemoteClusterFailed)
 
 
     def _onGetRemoteClustersFinished(self, clusters: List[CloudClusterResponse]) -> None:
     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
         self._um_cloud_printers = {m.getMetaDataEntry(self.META_CLUSTER_ID): m for m in
                                    CuraApplication.getInstance().getContainerRegistry().findContainerStacks(
                                    CuraApplication.getInstance().getContainerRegistry().findContainerStacks(