Browse Source

Handle case that printer type can be human readable string

CURA-6449
Lipu Fei 5 years ago
parent
commit
0501ae2fbc
2 changed files with 19 additions and 4 deletions
  1. 15 4
      cura/Machines/Models/DiscoveredPrintersModel.py
  2. 4 0
      cura/Settings/MachineManager.py

+ 15 - 4
cura/Machines/Models/DiscoveredPrintersModel.py

@@ -60,15 +60,26 @@ class DiscoveredPrinter(QObject):
     @pyqtProperty(str, notify = machineTypeChanged)
     def readableMachineType(self) -> str:
         from cura.CuraApplication import CuraApplication
-        readable_type = CuraApplication.getInstance().getMachineManager().getMachineTypeNameFromId(self._machine_type)
-        if not readable_type:
-            readable_type = catalog.i18nc("@label", "Unknown")
+        machine_manager = CuraApplication.getInstance().getMachineManager()
+        # In ClusterUM3OutputDevice, when it updates a printer information, it updates the machine type using the field
+        # "machine_variant", and for some reason, it's not the machine type ID/codename/... but a human-readable string
+        # like "Ultimaker 3". The code below handles this case.
+        if machine_manager.hasMachineTypeName(self._machine_type):
+            readable_type = self._machine_type
+        else:
+            readable_type = machine_manager.getMachineTypeNameFromId(self._machine_type)
+            if not readable_type:
+                readable_type = catalog.i18nc("@label", "Unknown")
         return readable_type
 
     @pyqtProperty(bool, notify = machineTypeChanged)
     def isUnknownMachineType(self) -> bool:
         from cura.CuraApplication import CuraApplication
-        readable_type = CuraApplication.getInstance().getMachineManager().getMachineTypeNameFromId(self._machine_type)
+        machine_manager = CuraApplication.getInstance().getMachineManager()
+        if machine_manager.hasMachineTypeName(self._machine_type):
+            readable_type = self._machine_type
+        else:
+            readable_type = machine_manager.getMachineTypeNameFromId(self._machine_type)
         return not readable_type
 
     @pyqtProperty(QObject, constant = True)

+ 4 - 0
cura/Settings/MachineManager.py

@@ -1640,6 +1640,10 @@ class MachineManager(QObject):
 
         return abbr_machine
 
+    def hasMachineTypeName(self, machine_type_name: str) -> bool:
+        results = self._container_registry.findDefinitionContainersMetadata(name = machine_type_name)
+        return len(results) > 0
+
     @pyqtSlot(str, result = str)
     def getMachineTypeNameFromId(self, machine_type_id: str) -> str:
         machine_type_name = ""