added typing, refactored some functions

CURA-7090
This commit is contained in:
Dimitriovski 2020-01-13 09:55:18 +01:00
parent 071326b890
commit fbe38dc658
No known key found for this signature in database
GPG key ID: 4E62757E2B0D304D
3 changed files with 36 additions and 43 deletions

View file

@ -74,7 +74,7 @@ UM.Dialog{
} }
Label Label
{ {
text: model.name text: model.display_name
font: UM.Theme.getFont("medium_bold") font: UM.Theme.getFont("medium_bold")
anchors.left: packageIcon.right anchors.left: packageIcon.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.leftMargin: UM.Theme.getSize("default_margin").width
@ -117,8 +117,7 @@ UM.Dialog{
} }
Label Label
{ {
id: packageName text: model.display_name
text: model.name
font: UM.Theme.getFont("medium_bold") font: UM.Theme.getFont("medium_bold")
anchors.left: packageIcon.right anchors.left: packageIcon.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.leftMargin: UM.Theme.getSize("default_margin").width
@ -129,7 +128,6 @@ UM.Dialog{
Label Label
{ {
id: dismissLabel
text: "(Dismiss)" text: "(Dismiss)"
font: UM.Theme.getFont("small") font: UM.Theme.getFont("small")
anchors.right: parent.right anchors.right: parent.right

View file

@ -4,10 +4,8 @@
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from UM.Qt.ListModel import ListModel from UM.Qt.ListModel import ListModel
from cura import ApplicationMetadata from cura import ApplicationMetadata
from PyQt5.QtCore import pyqtSlot
from UM.Logger import Logger from UM.Logger import Logger
from typing import List
class SubscribedPackagesModel(ListModel): class SubscribedPackagesModel(ListModel):
@ -19,32 +17,30 @@ class SubscribedPackagesModel(ListModel):
self._discrepancies = None self._discrepancies = None
self._sdk_version = ApplicationMetadata.CuraSDKVersion self._sdk_version = ApplicationMetadata.CuraSDKVersion
self.addRoleName(Qt.UserRole + 1, "name") self.addRoleName(Qt.UserRole + 1, "package_id")
self.addRoleName(Qt.UserRole + 2, "icon_url") self.addRoleName(Qt.UserRole + 2, "display_name")
self.addRoleName(Qt.UserRole + 3, "is_compatible") self.addRoleName(Qt.UserRole + 3, "icon_url")
self.addRoleName(Qt.UserRole + 4, "is_dismissed") self.addRoleName(Qt.UserRole + 4, "is_compatible")
self.addRoleName(Qt.UserRole + 5, "package_id") self.addRoleName(Qt.UserRole + 5, "is_dismissed")
def setMetadata(self, data) -> None:
def setMetadata(self, data):
if self._metadata != data: if self._metadata != data:
self._metadata = data self._metadata = data
def addValue(self, discrepancy): def addDiscrepancies(self, discrepancy: List[str]) -> None:
if self._discrepancies != discrepancy: if self._discrepancies != discrepancy:
self._discrepancies = discrepancy self._discrepancies = discrepancy
def update(self): def initialize(self) -> None:
self._items.clear() self._items.clear()
for item in self._metadata: for item in self._metadata:
if item["package_id"] not in self._discrepancies: if item["package_id"] not in self._discrepancies:
continue continue
package = {"package_id": item["package_id"], package = {"package_id": item["package_id"],
"name": item["display_name"], "display_name": item["display_name"],
"sdk_versions": item["sdk_versions"], "sdk_versions": item["sdk_versions"],
"is_dismissed": False "is_dismissed": False}
}
if self._sdk_version not in item["sdk_versions"]: if self._sdk_version not in item["sdk_versions"]:
package.update({"is_compatible": False}) package.update({"is_compatible": False})
else: else:
@ -57,7 +53,6 @@ class SubscribedPackagesModel(ListModel):
self._items.append(package) self._items.append(package)
self.setItems(self._items) self.setItems(self._items)
def hasCompatiblePackages(self) -> bool: def hasCompatiblePackages(self) -> bool:
has_compatible_items = False has_compatible_items = False
for item in self._items: for item in self._items:
@ -72,14 +67,16 @@ class SubscribedPackagesModel(ListModel):
has_incompatible_items = True has_incompatible_items = True
return has_incompatible_items return has_incompatible_items
def setDismiss(self, package_id) -> None: # Sets the "is_compatible" to True for the given package, in memory
package_id_in_list_of_items = self.find(key="package_id", value=package_id) def dismissPackage(self, package_id: str) -> None:
if package_id_in_list_of_items != -1: package = self.find(key="package_id", value=package_id)
self.setProperty(package_id_in_list_of_items, property="is_dismissed", value=True) if package != -1:
self.setProperty(package, property="is_dismissed", value=True)
Logger.debug("Package {} has been dismissed".format(package_id)) Logger.debug("Package {} has been dismissed".format(package_id))
def addDismissed(self, list_of_dismissed) -> None: # Reads the dismissed_packages from user config file and applies them so they won't be shown in the Compatibility Dialog
for package in list_of_dismissed: def applyDismissedPackages(self, dismissed_packages: List[str]) -> None:
item = self.find(key="package_id", value=package) for package in dismissed_packages:
if item != -1: exists = self.find(key="package_id", value=package)
self.setProperty(item, property="is_dismissed", value=True) if exists != -1:
self.setProperty(exists, property="is_dismissed", value=True)

View file

@ -557,9 +557,9 @@ class Toolbox(QObject, Extension):
return populated == len(self._server_response_data.items()) return populated == len(self._server_response_data.items())
@pyqtSlot(str) @pyqtSlot(str)
def dismissIncompatiblePackage(self, package_id): def dismissIncompatiblePackage(self, package_id: str):
self._models["subscribed_packages"].setDismiss(package_id) self._models["subscribed_packages"].dismissPackage(package_id) # sets "is_compatible" to True, in-memory
self._package_manager.setAsDismissed(package_id) self._package_manager.dismissPackage(package_id) # adds this package_id as dismissed in the user config file
# Make API Calls # Make API Calls
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
@ -668,17 +668,15 @@ class Toolbox(QObject, Extension):
def _checkCompatibilities(self, json_data) -> None: def _checkCompatibilities(self, json_data) -> None:
user_subscribed_packages = [plugin["package_id"] for plugin in json_data] user_subscribed_packages = [plugin["package_id"] for plugin in json_data]
user_installed_packages = self._package_manager.getUserInstalledPackages() user_installed_packages = self._package_manager.getUserInstalledPackages()
user_dismissed_packages = list(self._package_manager.getDismissedPackages()) user_dismissed_packages = self._package_manager.getDismissedPackages()
if user_dismissed_packages:
user_installed_packages += user_dismissed_packages user_installed_packages += user_dismissed_packages
# We check if there are packages installed in Cloud Marketplace but not in Cura marketplace
# We check if there are packages installed in Cloud Marketplace but not in Cura marketplace (discrepancy)
package_discrepancy = list(set(user_subscribed_packages).difference(user_installed_packages)) package_discrepancy = list(set(user_subscribed_packages).difference(user_installed_packages))
if package_discrepancy: if package_discrepancy:
self._models["subscribed_packages"].addValue(package_discrepancy) self._models["subscribed_packages"].addDiscrepancies(package_discrepancy)
self._models["subscribed_packages"].update() self._models["subscribed_packages"].initialize()
self._models["subscribed_packages"].addDismissed(user_dismissed_packages) self._models["subscribed_packages"].applyDismissedPackages(user_dismissed_packages)
Logger.log("d", "Discrepancy found between Cloud subscribed packages and Cura installed packages") Logger.log("d", "Discrepancy found between Cloud subscribed packages and Cura installed packages")
sync_message = Message(i18n_catalog.i18nc( sync_message = Message(i18n_catalog.i18nc(
"@info:generic", "@info:generic",