mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-22 13:49:39 +08:00
78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
from typing import Optional, TYPE_CHECKING, List, Dict
|
|
|
|
from PyQt6.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.ItemDataRole.UserRole + 1
|
|
DeviceNameRole = Qt.ItemDataRole.UserRole + 2
|
|
DeviceTypeRole = Qt.ItemDataRole.UserRole + 3
|
|
DeviceFirmwareVersionRole = Qt.ItemDataRole.UserRole + 4
|
|
|
|
cloudPrintersDetectedChanged = pyqtSignal(bool)
|
|
|
|
def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None:
|
|
super().__init__(parent)
|
|
|
|
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)
|