mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 23:46:22 -06:00
NetworkPrinterOutputDevice now uses reworked printerOutputDevice API
CURA-49
This commit is contained in:
parent
10b39c5ca4
commit
3bd25e5f7f
2 changed files with 14 additions and 34 deletions
90
NetworkPrinterOutputDevice.py
Normal file
90
NetworkPrinterOutputDevice.py
Normal file
|
@ -0,0 +1,90 @@
|
|||
import threading
|
||||
import time
|
||||
import requests
|
||||
|
||||
from UM.i18n import i18nCatalog
|
||||
from UM.Signal import Signal
|
||||
from UM.Application import Application
|
||||
from UM.Logger import Logger
|
||||
|
||||
from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState
|
||||
|
||||
i18n_catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||
def __init__(self, key, address, info):
|
||||
super().__init__(key)
|
||||
self._address = address
|
||||
self._key = key
|
||||
self._info = info
|
||||
self._http_lock = threading.Lock()
|
||||
self._http_connection = None
|
||||
self._file = None
|
||||
self._do_update = True
|
||||
self._thread = None
|
||||
|
||||
self._json_printer_state = None
|
||||
|
||||
self._api_version = "1"
|
||||
self._api_prefix = "/api/v" + self._api_version + "/"
|
||||
self.setName(key)
|
||||
self.setShortDescription(i18n_catalog.i18nc("@action:button", "Print with WIFI"))
|
||||
self.setDescription(i18n_catalog.i18nc("@info:tooltip", "Print with WIFI"))
|
||||
self.setIconName("print")
|
||||
|
||||
def getKey(self):
|
||||
return self._key
|
||||
|
||||
def _update(self):
|
||||
while self._connection_state == ConnectionState.connected or self._connection_state == ConnectionState.busy:
|
||||
try:
|
||||
reply = self._httpGet("printer")
|
||||
if reply.status_code == 200:
|
||||
self._json_printer_state = reply.json()
|
||||
else:
|
||||
self.setConnectionState(ConnectionState.error)
|
||||
except:
|
||||
self.setConnectionState(ConnectionState.error)
|
||||
time.sleep(1) # Poll every second for printer state.
|
||||
|
||||
def close(self):
|
||||
self._do_update = False
|
||||
self._is_connected = False
|
||||
|
||||
def requestWrite(self, node, file_name = None):
|
||||
self._file = getattr( Application.getInstance().getController().getScene(), "gcode_list")
|
||||
self.startPrint()
|
||||
|
||||
## Start the polling thread.
|
||||
def connect(self):
|
||||
if self._thread is None:
|
||||
self._do_update = True
|
||||
self._thread = threading.Thread(target = self._update)
|
||||
self._thread.daemon = True
|
||||
self._thread.start()
|
||||
|
||||
def getCameraImage(self):
|
||||
pass #Do Nothing
|
||||
|
||||
def startPrint(self):
|
||||
try:
|
||||
result = self._httpPost("print_job", self._file)
|
||||
except Exception as e:
|
||||
Logger.log("e" , "An exception occured in wifi connection: %s" % str(e))
|
||||
|
||||
def _httpGet(self, path):
|
||||
return requests.get("http://" + self._address + self._api_prefix + path)
|
||||
|
||||
def _httpPost(self, path, file_data):
|
||||
with self._http_lock:
|
||||
files_dict = {}
|
||||
if isinstance(file_data, list): # in case a list with strings is sent
|
||||
single_string_file_data = ""
|
||||
for line in file_data:
|
||||
single_string_file_data += line
|
||||
files_dict = {"file":("test.gcode", single_string_file_data)}
|
||||
else:
|
||||
files_dict = {"file":("test.gcode", file_data)}
|
||||
|
||||
return requests.post("http://" + self._address + self._api_prefix + path, files = files_dict)
|
Loading…
Add table
Add a link
Reference in a new issue