12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- from typing import List
- from UM.Settings.ContainerStack import ContainerStack
- from UM.Util import parseBool
- from cura.PrinterOutput.PrinterOutputDevice import ConnectionType
- from cura.Settings.GlobalStack import GlobalStack
- from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
- from UM.Settings.ContainerRegistry import ContainerRegistry
- class AbstractMachine(GlobalStack):
- """ Represents a group of machines of the same type. This allows the user to select settings before selecting a printer. """
- def __init__(self, container_id: str) -> None:
- super().__init__(container_id)
- self.setMetaDataEntry("type", "abstract_machine")
- @classmethod
- def getMachines(cls, abstract_machine: ContainerStack, online_only = False) -> List[ContainerStack]:
- """ Fetches all container stacks that match definition_id with an abstract machine.
- :param abstractMachine: The abstract machine stack.
- :return: A list of Containers or an empty list if abstract_machine is not an "abstract_machine"
- """
- if not abstract_machine.getMetaDataEntry("type") == "abstract_machine":
- return []
- from cura.CuraApplication import CuraApplication # In function to avoid circular import
- application = CuraApplication.getInstance()
- registry = application.getContainerRegistry()
- machines = registry.findContainerStacks(type="machine")
- # Filter machines that match definition
- machines = filter(lambda machine: machine.definition.id == abstract_machine.definition.getId(), machines)
- # Filter only LAN and Cloud printers
- machines = filter(lambda machine: ConnectionType.CloudConnection in machine.configuredConnectionTypes or ConnectionType.NetworkConnection in machine.configuredConnectionTypes, machines)
- if online_only:
- # LAN printers have is_online = False but should still be included
- machines = filter(lambda machine: parseBool(machine.getMetaDataEntry("is_online", False) or ConnectionType.NetworkConnection in machine.configuredConnectionTypes), machines)
- return list(machines)
- ## private:
- _abstract_machine_mime = MimeType(
- name = "application/x-cura-abstract-machine",
- comment = "Cura Abstract Machine",
- suffixes = ["global.cfg"]
- )
- MimeTypeDatabase.addMimeType(_abstract_machine_mime)
- ContainerRegistry.addContainerTypeByName(AbstractMachine, "abstract_machine", _abstract_machine_mime.name)
|