Merge remote-tracking branch 'origin/master' into CURA-6983_sync_packages

# Conflicts:
#	plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py
#	plugins/Toolbox/src/Toolbox.py
This commit is contained in:
Nino van Hooff 2020-01-15 15:40:03 +01:00
commit 182bab6467
44 changed files with 343 additions and 161 deletions

View file

@ -74,7 +74,7 @@ UM.Dialog{
}
Label
{
text: model.name
text: model.display_name
font: UM.Theme.getFont("medium_bold")
anchors.left: packageIcon.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width
@ -104,7 +104,7 @@ UM.Dialog{
{
width: parent.width
property int lineHeight: 60
visible: !model.is_compatible
visible: !model.is_compatible && !model.is_dismissed
height: visible ? (lineHeight + UM.Theme.getSize("default_margin").height) : 0 // We only show the incompatible packages here
Image
{
@ -117,7 +117,7 @@ UM.Dialog{
}
Label
{
text: model.name
text: model.display_name
font: UM.Theme.getFont("medium_bold")
anchors.left: packageIcon.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width
@ -125,6 +125,26 @@ UM.Dialog{
color: UM.Theme.getColor("text")
elide: Text.ElideRight
}
UM.TooltipArea
{
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip", "Dismisses the package and won't be shown in this dialog anymore")
anchors.right: parent.right
anchors.verticalCenter: packageIcon.verticalCenter
Label
{
text: "(Dismiss)"
font: UM.Theme.getFont("small")
color: UM.Theme.getColor("text")
MouseArea
{
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: toolbox.dismissIncompatiblePackage(model.package_id)
}
}
}
}
}
}

View file

@ -1,9 +1,11 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import Qt, pyqtProperty
from PyQt5.QtCore import Qt, pyqtProperty, pyqtSlot
from UM.Qt.ListModel import ListModel
from cura import ApplicationMetadata
from UM.Logger import Logger
from typing import List, Dict, Any
class SubscribedPackagesModel(ListModel):
@ -15,9 +17,11 @@ class SubscribedPackagesModel(ListModel):
self._discrepancies = None
self._sdk_version = ApplicationMetadata.CuraSDKVersion
self.addRoleName(Qt.UserRole + 1, "name")
self.addRoleName(Qt.UserRole + 2, "icon_url")
self.addRoleName(Qt.UserRole + 3, "is_compatible")
self.addRoleName(Qt.UserRole + 1, "package_id")
self.addRoleName(Qt.UserRole + 2, "display_name")
self.addRoleName(Qt.UserRole + 3, "icon_url")
self.addRoleName(Qt.UserRole + 4, "is_compatible")
self.addRoleName(Qt.UserRole + 5, "is_dismissed")
@pyqtProperty(bool, constant=True)
def hasCompatiblePackages(self) -> bool:
@ -33,29 +37,36 @@ class SubscribedPackagesModel(ListModel):
return True
return False
def setMetadata(self, data):
if self._metadata != data:
self._metadata = data
# Sets the "is_compatible" to True for the given package, in memory
def addValue(self, discrepancy):
if self._discrepancies != discrepancy:
self._discrepancies = discrepancy
@pyqtSlot()
def dismissPackage(self, package_id: str) -> None:
package = self.find(key="package_id", value=package_id)
if package != -1:
self.setProperty(package, property="is_dismissed", value=True)
Logger.debug("Package {} has been dismissed".format(package_id))
def setMetadata(self, data: List[Dict[str, List[Any]]]) -> None:
self._metadata = data
def addDiscrepancies(self, discrepancy: List[str]) -> None:
self._discrepancies = discrepancy
def getCompatiblePackages(self):
return [x for x in self._items if x["is_compatible"]]
def update(self):
def initialize(self) -> None:
self._items.clear()
for item in self._metadata:
if item["package_id"] not in self._discrepancies:
continue
package = {
"package_id": item["package_id"],
"name": item["display_name"],
"display_name": item["display_name"],
"sdk_versions": item["sdk_versions"],
"download_url": item["download_url"],
"md5_hash": item["md5_hash"],
"is_dismissed": False,
}
if self._sdk_version not in item["sdk_versions"]:
package.update({"is_compatible": False})
@ -65,7 +76,6 @@ class SubscribedPackagesModel(ListModel):
package.update({"icon_url": item["icon_url"]})
except KeyError: # There is no 'icon_url" in the response payload for this package
package.update({"icon_url": ""})
self._items.append(package)
self.setItems(self._items)

View file

@ -528,6 +528,11 @@ class Toolbox(QObject, Extension):
populated += 1
return populated == len(self._server_response_data.items())
@pyqtSlot(str)
def dismissIncompatiblePackage(self, package_id: str):
self._models["subscribed_packages"].dismissPackage(package_id) # sets "is_compatible" to True, in-memory
self._package_manager.dismissPackage(package_id) # adds this package_id as dismissed in the user config file
# Make API Calls
# --------------------------------------------------------------------------
def _makeRequestByType(self, request_type: str) -> None: