mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-11 16:57:51 -06:00
Added handling for timeout & network connection broken
CURA-3856
This commit is contained in:
parent
782dea040a
commit
5d0908e8ce
1 changed files with 30 additions and 8 deletions
|
@ -8,7 +8,7 @@ from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.Version import Version
|
from UM.Version import Version
|
||||||
|
|
||||||
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
|
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
||||||
from PyQt5.QtCore import QUrl, QObject, Qt, pyqtProperty, pyqtSignal, pyqtSlot
|
from PyQt5.QtCore import QUrl, QObject, Qt, pyqtProperty, pyqtSignal, pyqtSlot
|
||||||
from PyQt5.QtQml import QQmlComponent, QQmlContext
|
from PyQt5.QtQml import QQmlComponent, QQmlContext
|
||||||
|
|
||||||
|
@ -94,10 +94,7 @@ class PluginBrowser(QObject, Extension):
|
||||||
def _onDownloadPluginProgress(self, bytes_sent, bytes_total):
|
def _onDownloadPluginProgress(self, bytes_sent, bytes_total):
|
||||||
if bytes_total > 0:
|
if bytes_total > 0:
|
||||||
new_progress = bytes_sent / bytes_total * 100
|
new_progress = bytes_sent / bytes_total * 100
|
||||||
if new_progress > self._download_progress:
|
self.setDownloadProgress(new_progress)
|
||||||
self._download_progress = new_progress
|
|
||||||
self.onDownloadProgressChanged.emit()
|
|
||||||
self._download_progress = new_progress
|
|
||||||
if new_progress == 100.0:
|
if new_progress == 100.0:
|
||||||
self.setIsDownloading(False)
|
self.setIsDownloading(False)
|
||||||
self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress)
|
self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress)
|
||||||
|
@ -117,6 +114,11 @@ class PluginBrowser(QObject, Extension):
|
||||||
def downloadProgress(self):
|
def downloadProgress(self):
|
||||||
return self._download_progress
|
return self._download_progress
|
||||||
|
|
||||||
|
def setDownloadProgress(self, progress):
|
||||||
|
if progress != self._download_progress:
|
||||||
|
self._download_progress = progress
|
||||||
|
self.onDownloadProgressChanged.emit()
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def downloadAndInstallPlugin(self, url):
|
def downloadAndInstallPlugin(self, url):
|
||||||
Logger.log("i", "Attempting to download & install plugin from %s", url)
|
Logger.log("i", "Attempting to download & install plugin from %s", url)
|
||||||
|
@ -124,9 +126,8 @@ class PluginBrowser(QObject, Extension):
|
||||||
self._download_plugin_request = QNetworkRequest(url)
|
self._download_plugin_request = QNetworkRequest(url)
|
||||||
self._download_plugin_request.setRawHeader(*self._request_header)
|
self._download_plugin_request.setRawHeader(*self._request_header)
|
||||||
self._download_plugin_reply = self._network_manager.get(self._download_plugin_request)
|
self._download_plugin_reply = self._network_manager.get(self._download_plugin_request)
|
||||||
self._download_progress = 0
|
self.setDownloadProgress(0)
|
||||||
self.setIsDownloading(True)
|
self.setIsDownloading(True)
|
||||||
self.onDownloadProgressChanged.emit()
|
|
||||||
self._download_plugin_reply.downloadProgress.connect(self._onDownloadPluginProgress)
|
self._download_plugin_reply.downloadProgress.connect(self._onDownloadPluginProgress)
|
||||||
|
|
||||||
@pyqtProperty(QObject, notify=pluginsMetadataChanged)
|
@pyqtProperty(QObject, notify=pluginsMetadataChanged)
|
||||||
|
@ -180,6 +181,16 @@ class PluginBrowser(QObject, Extension):
|
||||||
|
|
||||||
def _onRequestFinished(self, reply):
|
def _onRequestFinished(self, reply):
|
||||||
reply_url = reply.url().toString()
|
reply_url = reply.url().toString()
|
||||||
|
|
||||||
|
if reply.error() == QNetworkReply.TimeoutError:
|
||||||
|
Logger.log("w", "Got a timeout.")
|
||||||
|
# Reset everything.
|
||||||
|
self.setDownloadProgress(0)
|
||||||
|
self.setIsDownloading(False)
|
||||||
|
if self._download_plugin_reply:
|
||||||
|
self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress)
|
||||||
|
self._download_plugin_reply.abort()
|
||||||
|
self._download_plugin_reply = None
|
||||||
if reply.operation() == QNetworkAccessManager.GetOperation:
|
if reply.operation() == QNetworkAccessManager.GetOperation:
|
||||||
if reply_url == self._api_url + "plugins":
|
if reply_url == self._api_url + "plugins":
|
||||||
try:
|
try:
|
||||||
|
@ -193,9 +204,20 @@ class PluginBrowser(QObject, Extension):
|
||||||
# Ignore any operation that is not a get operation
|
# Ignore any operation that is not a get operation
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _onNetworkAccesibleChanged(self, accessible):
|
||||||
|
if accessible == 0:
|
||||||
|
self.setDownloadProgress(0)
|
||||||
|
self.setIsDownloading(False)
|
||||||
|
if self._download_plugin_reply:
|
||||||
|
self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress)
|
||||||
|
self._download_plugin_reply.abort()
|
||||||
|
self._download_plugin_reply = None
|
||||||
|
|
||||||
def _createNetworkManager(self):
|
def _createNetworkManager(self):
|
||||||
if self._network_manager:
|
if self._network_manager:
|
||||||
self._network_manager.finished.disconnect(self._onRequestFinished)
|
self._network_manager.finished.disconnect(self._onRequestFinished)
|
||||||
|
self._network_manager.networkAccessibleChanged.disconnect(self._onNetworkAccesibleChanged)
|
||||||
|
|
||||||
self._network_manager = QNetworkAccessManager()
|
self._network_manager = QNetworkAccessManager()
|
||||||
self._network_manager.finished.connect(self._onRequestFinished)
|
self._network_manager.finished.connect(self._onRequestFinished)
|
||||||
|
self._network_manager.networkAccessibleChanged.connect(self._onNetworkAccesibleChanged)
|
Loading…
Add table
Add a link
Reference in a new issue