1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # Copyright (c) 2021 Ultimaker B.V.
- # Cura is released under the terms of the LGPLv3 or higher.
- from typing import Optional, TYPE_CHECKING, List, Dict
- from PyQt5.QtCore import QObject, pyqtSlot, Qt, pyqtSignal, pyqtProperty
- from UM.Qt.ListModel import ListModel
- if TYPE_CHECKING:
- from cura.CuraApplication import CuraApplication
- class DiscoveredCloudPrintersModel(ListModel):
- """Model used to inform the application about newly added cloud printers, which are discovered from the user's
- account """
- DeviceKeyRole = Qt.UserRole + 1
- DeviceNameRole = Qt.UserRole + 2
- DeviceTypeRole = Qt.UserRole + 3
- DeviceFirmwareVersionRole = Qt.UserRole + 4
- cloudPrintersDetectedChanged = pyqtSignal(bool)
- def __init__(self, application: "CuraApplication") -> None:
- super(DiscoveredCloudPrintersModel, self).__init__(parent = application)
- self.addRoleName(self.DeviceKeyRole, "key")
- self.addRoleName(self.DeviceNameRole, "name")
- self.addRoleName(self.DeviceTypeRole, "machine_type")
- self.addRoleName(self.DeviceFirmwareVersionRole, "firmware_version")
- self._discovered_cloud_printers_list = [] # type: List[Dict[str, str]]
- self._application = application # type: CuraApplication
- def addDiscoveredCloudPrinters(self, new_devices: List[Dict[str, str]]) -> None:
- """Adds all the newly discovered cloud printers into the DiscoveredCloudPrintersModel.
- Example new_devices entry:
- .. code-block:: python
- {
- "key": "YjW8pwGYcaUvaa0YgVyWeFkX3z",
- "name": "NG 001",
- "machine_type": "Ultimaker S5",
- "firmware_version": "5.5.12.202001"
- }
- :param new_devices: List of dictionaries which contain information about added cloud printers.
- :return: None
- """
- self._discovered_cloud_printers_list.extend(new_devices)
- self._update()
- # Inform whether new cloud printers have been detected. If they have, the welcome wizard can close.
- self.cloudPrintersDetectedChanged.emit(len(new_devices) > 0)
- @pyqtSlot()
- def clear(self) -> None:
- """Clears the contents of the DiscoveredCloudPrintersModel.
- :return: None
- """
- self._discovered_cloud_printers_list = []
- self._update()
- self.cloudPrintersDetectedChanged.emit(False)
- def _update(self) -> None:
- """Sorts the newly discovered cloud printers by name and then updates the ListModel.
- :return: None
- """
- items = self._discovered_cloud_printers_list[:]
- items.sort(key = lambda k: k["name"])
- self.setItems(items)
|