diff --git a/plugins/PluginBrowser/PluginBrowser.py b/plugins/PluginBrowser/PluginBrowser.py index cdee651e71..251ed92d2f 100644 --- a/plugins/PluginBrowser/PluginBrowser.py +++ b/plugins/PluginBrowser/PluginBrowser.py @@ -39,8 +39,10 @@ class PluginBrowser(QObject, Extension): self._qml_component = None self._qml_context = None self._dialog = None + self._download_progress = 0 pluginsMetadataChanged = pyqtSignal() + onDownloadProgressChanged = pyqtSignal() def browsePlugins(self): self._createNetworkManager() @@ -72,7 +74,10 @@ class PluginBrowser(QObject, Extension): def _onDownloadPluginProgress(self, bytes_sent, bytes_total): if bytes_total > 0: new_progress = bytes_sent / bytes_total * 100 - + if new_progress > self._download_progress: + self._download_progress = new_progress + self.onDownloadProgressChanged.emit() + self._download_progress = new_progress if new_progress == 100.0: self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress) self._temp_plugin_file = tempfile.NamedTemporaryFile(suffix = ".curaplugin") @@ -80,12 +85,18 @@ class PluginBrowser(QObject, Extension): result = PluginRegistry.getInstance().installPlugin("file://" + self._temp_plugin_file.name) self._temp_plugin_file.close() # Plugin was installed, delete temp file + @pyqtProperty(int, notify = onDownloadProgressChanged) + def downloadProgress(self): + return self._download_progress + @pyqtSlot(str) def downloadAndInstallPlugin(self, url): Logger.log("i", "Attempting to download & install plugin from %s", url) url = QUrl(url) self._download_plugin_request = QNetworkRequest(url) self._download_plugin_reply = self._network_manager.get(self._download_plugin_request) + self._download_progress = 0 + self.onDownloadProgressChanged.emit() self._download_plugin_reply.downloadProgress.connect(self._onDownloadPluginProgress) @pyqtProperty(QObject, notify=pluginsMetadataChanged) diff --git a/plugins/PluginBrowser/PluginBrowser.qml b/plugins/PluginBrowser/PluginBrowser.qml index 0e2129d7ef..477bf45ea0 100644 --- a/plugins/PluginBrowser/PluginBrowser.qml +++ b/plugins/PluginBrowser/PluginBrowser.qml @@ -13,7 +13,8 @@ UM.Dialog height: 150 ScrollView { - anchors.fill: parent + width: parent.width + height: parent.height - progressbar.height - UM.Theme.getSize("default_margin").height frameVisible: true ListView { @@ -24,6 +25,17 @@ UM.Dialog delegate: pluginDelegate } } + ProgressBar + { + id: progressbar + anchors.bottom: parent.bottom + style: UM.Theme.styles.progressbar + minimumValue: 0; + maximumValue: 100 + width: parent.width + height: 20 + value: manager.downloadProgress + } Item { SystemPalette { id: palette } @@ -37,23 +49,25 @@ UM.Dialog color: index % 2 ? palette.base : palette.alternateBase Row { - width: parent.width + width: childrenRect.width height: childrenRect.height; anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width Label { - text: model.name width: contentWidth } - Button - { - text: "Download" - onClicked: manager.downloadAndInstallPlugin(model.file_location) - } + + } + Button + { + text: "Download" + onClicked: manager.downloadAndInstallPlugin(model.file_location) + anchors.right: parent.right } } + } } } \ No newline at end of file