Introduce DiscoveredUltimakerCloudPrintersModel

Have a separate model to hold the discovered ultimaker cloud printers.
This model will be used to communicate across the application that new
cloud printers have been found which they weren't seen before.

CURA-7022
This commit is contained in:
Kostas Karmas 2020-04-24 19:09:50 +02:00
parent 1aea28a8eb
commit cd8a0fc0bc

View file

@ -0,0 +1,56 @@
from typing import Optional, TYPE_CHECKING
from PyQt5.QtCore import QObject, pyqtSlot, Qt
from UM.Qt.ListModel import ListModel
if TYPE_CHECKING:
from cura.CuraApplication import CuraApplication
class DiscoveredUltimakerCloudPrintersModel(ListModel):
IpAddressRole = Qt.UserRole + 1
DeviceKeyRole = Qt.UserRole + 2
DeviceNameRole = Qt.UserRole + 3
DeviceTypeRole = Qt.UserRole + 4
DeviceFirmwareVersionRole = Qt.UserRole + 5
def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
self.addRoleName(self.IpAddressRole, "ip_address")
self.addRoleName(self.DeviceKeyRole, "key")
self.addRoleName(self.DeviceNameRole, "name")
self.addRoleName(self.DeviceTypeRole, "machine_type")
self.addRoleName(self.DeviceFirmwareVersionRole, "firmware_version")
self._discovered_ultimaker_cloud_printers_list = []
self._application = application
def addDiscoveredUltimakerCloudPrinter(self, new_devices) -> None:
for device in new_devices:
self._discovered_ultimaker_cloud_printers_list.append({
"ip_address": device.key,
"key": device.getId(),
"name": device.name,
"machine_type": device.printerTypeName,
"firmware_version": device.firmwareVersion
})
self._update()
@pyqtSlot()
def clearDiscoveredUltimakerCloudPrinters(self):
self._discovered_ultimaker_cloud_printers_list = []
self._update()
def _update(self):
items = []
for cloud_printer in self._discovered_ultimaker_cloud_printers_list:
items.append(cloud_printer)
# Execute all filters.
filtered_items = list(items)
filtered_items.sort(key = lambda k: k["name"])
self.setItems(filtered_items)