diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 7a06e8753c..d19932a7a0 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -162,6 +162,7 @@ class MachineManager(QObject): printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change rootMaterialChanged = pyqtSignal() + discoveredPrintersChanged = pyqtSignal() def setInitialActiveMachine(self) -> None: active_machine_id = self._application.getPreferences().getValue("cura/active_machine") @@ -183,12 +184,18 @@ class MachineManager(QObject): def addDiscoveredPrinter(self, key: str, name: str, create_callback: Callable[[str], None], machine_type: str) -> None: if key not in self._discovered_printers: self._discovered_printers[key] = DiscoveredPrinter(key, name, create_callback, machine_type) + self.discoveredPrintersChanged.emit() else: Logger.log("e", "Printer with the key %s was already in the discovered printer list", key) def removeDiscoveredPrinter(self, key: str) -> None: if key in self._discovered_printers: del self._discovered_printers[key] + self.discoveredPrintersChanged.emit() + + @pyqtProperty("QVariantList", notify = discoveredPrintersChanged) + def discoveredPrinters(self): + return list(self._discovered_printers.values()) @pyqtSlot(str) def addMachineFromDiscoveredPrinter(self, key: str) -> None: diff --git a/tests/TestMachineManager.py b/tests/TestMachineManager.py index ca0e203c8b..34a0bbc35c 100644 --- a/tests/TestMachineManager.py +++ b/tests/TestMachineManager.py @@ -11,6 +11,7 @@ from cura.Settings.MachineManager import MachineManager def container_registry() -> ContainerRegistry: return MagicMock() + @pytest.fixture() def extruder_manager(application, container_registry) -> ExtruderManager: with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): @@ -21,6 +22,7 @@ def extruder_manager(application, container_registry) -> ExtruderManager: return manager + @pytest.fixture() def machine_manager(application, extruder_manager, container_registry) -> MachineManager: application.getExtruderManager = MagicMock(return_value = extruder_manager) @@ -49,4 +51,14 @@ def test_discoveredMachine(machine_manager): mocked_callback = MagicMock() machine_manager.addDiscoveredPrinter("test", "zomg", mocked_callback, "derp") machine_manager.addMachineFromDiscoveredPrinter("test") - mocked_callback.assert_called_with("test") \ No newline at end of file + mocked_callback.assert_called_with("test") + + assert len(machine_manager.discoveredPrinters) == 1 + + # Test if removing it works + machine_manager.removeDiscoveredPrinter("test") + assert len(machine_manager.discoveredPrinters) == 0 + + # Just in case, nothing should happen. + machine_manager.addMachineFromDiscoveredPrinter("test") + assert mocked_callback.call_count == 1 \ No newline at end of file