mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Simplify the update logic in the package model / card
CURA-8587
This commit is contained in:
parent
4b358496d9
commit
62f99a28b3
2 changed files with 36 additions and 62 deletions
|
@ -5,7 +5,7 @@ import re
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Any, cast, Dict, List, Optional
|
from typing import Any, cast, Dict, List, Optional
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
|
from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal, pyqtSlot
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
from cura.CuraPackageManager import CuraPackageManager
|
from cura.CuraPackageManager import CuraPackageManager
|
||||||
|
@ -73,16 +73,11 @@ class PackageModel(QObject):
|
||||||
self.enablePackageTriggered.connect(self._plugin_registry.enablePlugin)
|
self.enablePackageTriggered.connect(self._plugin_registry.enablePlugin)
|
||||||
self.disablePackageTriggered.connect(self._plugin_registry.disablePlugin)
|
self.disablePackageTriggered.connect(self._plugin_registry.disablePlugin)
|
||||||
|
|
||||||
self._is_updating = False
|
|
||||||
self._is_recently_updated = self._getRecentlyUpdated()
|
self._is_recently_updated = self._getRecentlyUpdated()
|
||||||
|
|
||||||
self._is_installing = False
|
|
||||||
self._is_uninstalling = False
|
|
||||||
self._is_recently_installed = self._getRecentlyInstalled()
|
self._is_recently_installed = self._getRecentlyInstalled()
|
||||||
|
|
||||||
self.updatePackageTriggered.connect(lambda pkg: self._setIsUpdating(True))
|
self.updatePackageTriggered.connect(lambda pkg: self._setIsUpdating(True))
|
||||||
self.installPackageTriggered.connect(lambda pkg, url: self._setIsInstalling(True))
|
|
||||||
self.uninstallPackageTriggered.connect(lambda pkg: self._setIsUninstalling(True))
|
|
||||||
|
|
||||||
self._plugin_registry.hasPluginsEnabledOrDisabledChanged.connect(self.stateManageButtonChanged)
|
self._plugin_registry.hasPluginsEnabledOrDisabledChanged.connect(self.stateManageButtonChanged)
|
||||||
self._package_manager.packageInstalled.connect(lambda pkg_id: self._packageInstalled(pkg_id, True))
|
self._package_manager.packageInstalled.connect(lambda pkg_id: self._packageInstalled(pkg_id, True))
|
||||||
|
@ -90,6 +85,8 @@ class PackageModel(QObject):
|
||||||
self._package_manager.packageInstallingFailed.connect(lambda pkg_id: self._packageInstalled(pkg_id, False))
|
self._package_manager.packageInstallingFailed.connect(lambda pkg_id: self._packageInstalled(pkg_id, False))
|
||||||
self._package_manager.packagesWithUpdateChanged.connect(lambda: self.setCanUpdate(self._package_id in self._package_manager.packagesWithUpdate))
|
self._package_manager.packagesWithUpdateChanged.connect(lambda: self.setCanUpdate(self._package_id in self._package_manager.packagesWithUpdate))
|
||||||
|
|
||||||
|
self._is_busy = False
|
||||||
|
|
||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
if isinstance(other, PackageModel):
|
if isinstance(other, PackageModel):
|
||||||
return other == self
|
return other == self
|
||||||
|
@ -308,42 +305,44 @@ class PackageModel(QObject):
|
||||||
|
|
||||||
disablePackageTriggered = pyqtSignal(str)
|
disablePackageTriggered = pyqtSignal(str)
|
||||||
|
|
||||||
installedPackagesChanged = pyqtSignal(bool)
|
installed = pyqtSignal(bool)
|
||||||
|
|
||||||
uninstalledPackagesChanged = pyqtSignal(bool)
|
updated = pyqtSignal(bool)
|
||||||
|
|
||||||
updatePackagesChanged = pyqtSignal(bool)
|
busyChanged = pyqtSignal()
|
||||||
|
|
||||||
def _setIsUpdating(self, value: bool) -> None:
|
@pyqtSlot()
|
||||||
self._is_updating = value
|
def install(self):
|
||||||
|
self.setBusy(True)
|
||||||
|
self.installPackageTriggered.emit(self.packageId, self.downloadURL)
|
||||||
|
|
||||||
def _setIsInstalling(self, value: bool) -> None:
|
@pyqtSlot()
|
||||||
self._is_installing = value
|
def uninstall(self):
|
||||||
|
self.setBusy(True)
|
||||||
|
self.uninstallPackageTriggered.emit(self.packageId)
|
||||||
|
|
||||||
def _setIsUninstalling(self, value: bool) -> None:
|
@pyqtProperty(bool, notify= busyChanged)
|
||||||
self._is_uninstalling = value
|
def busy(self):
|
||||||
|
"""
|
||||||
|
Property indicating that some kind of upgrade is active.
|
||||||
|
"""
|
||||||
|
return self._is_busy
|
||||||
|
|
||||||
|
def setBusy(self, value: bool):
|
||||||
|
if self._is_busy != value:
|
||||||
|
self._is_busy = value
|
||||||
|
self.busyChanged.emit()
|
||||||
|
|
||||||
def _packageInstalled(self, package_id: str, success: bool) -> None:
|
def _packageInstalled(self, package_id: str, success: bool) -> None:
|
||||||
if self._package_id != package_id:
|
if self._package_id != package_id:
|
||||||
return
|
return
|
||||||
if self._is_updating:
|
self.setBusy(not self._is_busy)
|
||||||
self.updatePackagesChanged.emit(success)
|
self.stateManageButtonChanged.emit()
|
||||||
self._is_updating = False
|
|
||||||
if self._is_installing:
|
|
||||||
self.installedPackagesChanged.emit(success)
|
|
||||||
self._is_installing = False
|
|
||||||
if self._is_uninstalling:
|
|
||||||
self.uninstalledPackagesChanged.emit(success)
|
|
||||||
self._is_uninstalling = False
|
|
||||||
|
|
||||||
def _getRecentlyInstalled(self) -> bool:
|
def _getRecentlyInstalled(self) -> bool:
|
||||||
return (self._package_id in self._package_manager.getPackagesToInstall() or self._package_id in self._package_manager.getPackagesToRemove()) \
|
return (self._package_id in self._package_manager.getPackagesToInstall() or self._package_id in self._package_manager.getPackagesToRemove()) \
|
||||||
and self._package_id not in self._package_manager.package_infosWithUpdate
|
and self._package_id not in self._package_manager.package_infosWithUpdate
|
||||||
|
|
||||||
@pyqtProperty(bool, constant = True)
|
|
||||||
def isRecentlyInstalledChanged(self) -> bool:
|
|
||||||
return self._is_recently_installed
|
|
||||||
|
|
||||||
def _getRecentlyUpdated(self) -> bool:
|
def _getRecentlyUpdated(self) -> bool:
|
||||||
return self._package_id in self._package_manager.package_infosWithUpdate and self._package_id in self._package_manager.getPackagesToInstall()
|
return self._package_id in self._package_manager.package_infosWithUpdate and self._package_id in self._package_manager.getPackagesToInstall()
|
||||||
|
|
||||||
|
|
|
@ -207,18 +207,15 @@ Item
|
||||||
id: installManageButton
|
id: installManageButton
|
||||||
visible: (showManageButtons || confirmed) && ((packageData.isBundled && packageData.canDowngrade) || !packageData.isBundled) && !updateManageButton.confirmed
|
visible: (showManageButtons || confirmed) && ((packageData.isBundled && packageData.canDowngrade) || !packageData.isBundled) && !updateManageButton.confirmed
|
||||||
enabled: !updateManageButton.busy
|
enabled: !updateManageButton.busy
|
||||||
|
busy: packageData.busy
|
||||||
confirmed: packageData.isRecentlyInstalledChanged
|
button_style: !packageData.isInstalled
|
||||||
|
|
||||||
button_style: confirmed ? packageData.isInstalled : !packageData.isInstalled
|
|
||||||
Layout.alignment: Qt.AlignTop
|
Layout.alignment: Qt.AlignTop
|
||||||
|
|
||||||
text:
|
text:
|
||||||
{
|
{
|
||||||
if (button_style)
|
if (!packageData.isInstalled)
|
||||||
{
|
{
|
||||||
if (busy) { return catalog.i18nc("@button", "Installing..."); }
|
if (busy) { return catalog.i18nc("@button", "Installing..."); }
|
||||||
else if (confirmed) { return catalog.i18nc("@button", "Installed"); }
|
|
||||||
else { return catalog.i18nc("@button", "Install"); }
|
else { return catalog.i18nc("@button", "Install"); }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -226,41 +223,19 @@ Item
|
||||||
if (packageData.canDowngrade)
|
if (packageData.canDowngrade)
|
||||||
{
|
{
|
||||||
if (busy) { return catalog.i18nc("@button", "Downgrading..."); }
|
if (busy) { return catalog.i18nc("@button", "Downgrading..."); }
|
||||||
else if (confirmed) { return catalog.i18nc("@button", "Downgraded"); }
|
|
||||||
else { return catalog.i18nc("@button", "Downgrade"); }
|
else { return catalog.i18nc("@button", "Downgrade"); }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (busy) { return catalog.i18nc("@button", "Uninstalling..."); }
|
return catalog.i18nc("@button", "Uninstall");
|
||||||
else if (confirmed) { return catalog.i18nc("@button", "Uninstalled"); }
|
|
||||||
else { return catalog.i18nc("@button", "Uninstall"); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
busy = true
|
if (packageData.isInstalled){ packageData.uninstall() }
|
||||||
if (packageData.isInstalled){ packageData.installPackageTriggered(packageData.packageId, packageData.downloadURL); }
|
else { packageData.install()}
|
||||||
else { packageData.uninstallPackageTriggered(packageData.packageId); }
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections
|
|
||||||
{
|
|
||||||
target: packageData
|
|
||||||
|
|
||||||
function onInstalledPackagesChanged(success)
|
|
||||||
{
|
|
||||||
installManageButton.busy = false;
|
|
||||||
installManageButton.confirmed = success;
|
|
||||||
}
|
|
||||||
function onUninstalledPackagesChanged(success)
|
|
||||||
{
|
|
||||||
installManageButton.busy = false;
|
|
||||||
installManageButton.confirmed = success;
|
|
||||||
installManageButton.button_style = !installManageButton.button_style;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +259,7 @@ Item
|
||||||
|
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
busy = true;
|
busy = true
|
||||||
packageData.updatePackageTriggered(packageData.packageId);
|
packageData.updatePackageTriggered(packageData.packageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +267,7 @@ Item
|
||||||
{
|
{
|
||||||
target: packageData
|
target: packageData
|
||||||
|
|
||||||
function onUpdatePackagesChanged(succes)
|
function updated(succes)
|
||||||
{
|
{
|
||||||
updateManageButton.busy = false;
|
updateManageButton.busy = false;
|
||||||
updateManageButton.confirmed = succes;
|
updateManageButton.confirmed = succes;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue