DiscoverUM3Action.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from cura.MachineAction import MachineAction
  2. from UM.Application import Application
  3. from UM.PluginRegistry import PluginRegistry
  4. from UM.Logger import Logger
  5. from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QUrl, QObject
  6. from PyQt5.QtQml import QQmlComponent, QQmlContext
  7. import os.path
  8. from UM.i18n import i18nCatalog
  9. catalog = i18nCatalog("cura")
  10. class DiscoverUM3Action(MachineAction):
  11. def __init__(self):
  12. super().__init__("DiscoverUM3Action", catalog.i18nc("@action","Connect via Network"))
  13. self._qml_url = "DiscoverUM3Action.qml"
  14. self._network_plugin = None
  15. self._context = None
  16. self._additional_component = None
  17. self._additional_components_view = None
  18. Application.getInstance().engineCreatedSignal.connect(self._createAdditionalComponentsView)
  19. printersChanged = pyqtSignal()
  20. @pyqtSlot()
  21. def startDiscovery(self):
  22. if not self._network_plugin:
  23. self._network_plugin = Application.getInstance().getOutputDeviceManager().getOutputDevicePlugin("JediWifiPrintingPlugin")
  24. self._network_plugin.addPrinterSignal.connect(self._onPrinterDiscoveryChanged)
  25. self._network_plugin.removePrinterSignal.connect(self._onPrinterDiscoveryChanged)
  26. self.printersChanged.emit()
  27. @pyqtSlot()
  28. def restartDiscovery(self):
  29. if not self._network_plugin:
  30. self.startDiscovery()
  31. else:
  32. self._network_plugin.startDiscovery()
  33. def _onPrinterDiscoveryChanged(self, *args):
  34. self.printersChanged.emit()
  35. @pyqtProperty("QVariantList", notify = printersChanged)
  36. def foundDevices(self):
  37. if self._network_plugin:
  38. printers = list(self._network_plugin.getPrinters().values())
  39. printers.sort(key = lambda k: k.name)
  40. return printers
  41. else:
  42. return []
  43. @pyqtSlot(str)
  44. def setKey(self, key):
  45. global_container_stack = Application.getInstance().getGlobalContainerStack()
  46. if global_container_stack:
  47. meta_data = global_container_stack.getMetaData()
  48. if "um_network_key" in meta_data:
  49. global_container_stack.setMetaDataEntry("um_network_key", key)
  50. # Delete old authentication data.
  51. global_container_stack.removeMetaDataEntry("network_authentication_id")
  52. global_container_stack.removeMetaDataEntry("network_authentication_key")
  53. else:
  54. global_container_stack.addMetaDataEntry("um_network_key", key)
  55. if self._network_plugin:
  56. # Ensure that the connection states are refreshed.
  57. self._network_plugin.reCheckConnections()
  58. @pyqtSlot(result = str)
  59. def getStoredKey(self):
  60. global_container_stack = Application.getInstance().getGlobalContainerStack()
  61. if global_container_stack:
  62. meta_data = global_container_stack.getMetaData()
  63. if "um_network_key" in meta_data:
  64. return global_container_stack.getMetaDataEntry("um_network_key")
  65. return ""
  66. def _createAdditionalComponentsView(self):
  67. Logger.log("d", "Creating additional ui components for UM3.")
  68. path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath("JediWifiPrintingPlugin"), "UM3InfoComponents.qml"))
  69. self._additional_component = QQmlComponent(Application.getInstance()._engine, path)
  70. # We need access to engine (although technically we can't)
  71. self._context = QQmlContext(Application.getInstance()._engine.rootContext())
  72. self._context.setContextProperty("manager", self)
  73. self._additional_components_view = self._additional_component.create(self._context)
  74. Application.getInstance().addAdditionalComponent("monitorButtons", self._additional_components_view.findChild(QObject, "networkPrinterConnectButton"))
  75. Application.getInstance().addAdditionalComponent("machinesDetailPane", self._additional_components_view.findChild(QObject, "networkPrinterConnectionInfo"))