Add a way to cancel a download

and cancel download when closing the window
This commit is contained in:
fieldOfView 2017-07-07 12:30:58 +02:00
parent 6b05bd21fb
commit 6503b87a3a
2 changed files with 49 additions and 4 deletions

View file

@ -141,6 +141,17 @@ class PluginBrowser(QObject, Extension):
self.setIsDownloading(True) self.setIsDownloading(True)
self._download_plugin_reply.downloadProgress.connect(self._onDownloadPluginProgress) self._download_plugin_reply.downloadProgress.connect(self._onDownloadPluginProgress)
@pyqtSlot()
def cancelDownload(self):
Logger.log("i", "user cancelled the download of a plugin")
self._download_plugin_reply.abort()
self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress)
self._download_plugin_reply = None
self._download_plugin_request = None
self.setDownloadProgress(0)
self.setIsDownloading(False)
@pyqtProperty(QObject, notify=pluginsMetadataChanged) @pyqtProperty(QObject, notify=pluginsMetadataChanged)
def pluginsModel(self): def pluginsModel(self):
if self._plugins_model is None: if self._plugins_model is None:

View file

@ -33,6 +33,7 @@ UM.Dialog
text: catalog.i18nc("@action:button", "Refresh") text: catalog.i18nc("@action:button", "Refresh")
onClicked: manager.requestPluginList() onClicked: manager.requestPluginList()
anchors.right: parent.right anchors.right: parent.right
enabled: !manager.isDownloading
} }
} }
ScrollView ScrollView
@ -48,6 +49,7 @@ UM.Dialog
model: manager.pluginsModel model: manager.pluginsModel
anchors.fill: parent anchors.fill: parent
property var activePlugin
delegate: pluginDelegate delegate: pluginDelegate
} }
} }
@ -75,7 +77,14 @@ UM.Dialog
id: closeButton id: closeButton
text: catalog.i18nc("@action:button", "Close") text: catalog.i18nc("@action:button", "Close")
iconName: "dialog-close" iconName: "dialog-close"
onClicked: base.close() onClicked:
{
if (manager.isDownloading)
{
manager.cancelDownload()
}
base.close();
}
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.right: parent.right anchors.right: parent.right
} }
@ -123,7 +132,11 @@ UM.Dialog
id: downloadButton id: downloadButton
text: text:
{ {
if (model.already_installed) if (manager.isDownloading && pluginList.activePlugin == model)
{
return catalog.i18nc("@action:button", "Cancel");
}
else if (model.already_installed)
{ {
if (model.can_upgrade) if (model.can_upgrade)
{ {
@ -133,11 +146,32 @@ UM.Dialog
} }
return catalog.i18nc("@action:button", "Download"); return catalog.i18nc("@action:button", "Download");
} }
onClicked: manager.downloadAndInstallPlugin(model.file_location) onClicked:
{
if(!manager.isDownloading)
{
pluginList.activePlugin = model;
manager.downloadAndInstallPlugin(model.file_location);
}
else
{
manager.cancelDownload();
}
}
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.rightMargin: UM.Theme.getSize("default_margin").width
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
enabled: (!model.already_installed || model.can_upgrade) && !manager.isDownloading enabled:
{
if (manager.isDownloading)
{
return (pluginList.activePlugin == model);
}
else
{
return (!model.already_installed || model.can_upgrade);
}
}
} }
} }