mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-09 07:56:22 -06:00
We now use QT stuff for uploading, as this doesn't mess up the GIL
CURA-49
This commit is contained in:
parent
f9bf54348d
commit
c700a684d3
1 changed files with 54 additions and 5 deletions
|
@ -8,8 +8,13 @@ from UM.Logger import Logger
|
||||||
|
|
||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
|
|
||||||
|
from .SendGCodeJob import SendGCodeJob
|
||||||
|
|
||||||
from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState
|
from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState
|
||||||
|
|
||||||
|
from PyQt5.QtNetwork import QHttpMultiPart, QHttpPart, QNetworkRequest, QNetworkAccessManager
|
||||||
|
from PyQt5.QtCore import QUrl
|
||||||
|
|
||||||
i18n_catalog = i18nCatalog("cura")
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
## Network connected (wifi / lan) printer that uses the Ultimaker API
|
## Network connected (wifi / lan) printer that uses the Ultimaker API
|
||||||
|
@ -35,6 +40,19 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
self.setDescription(i18n_catalog.i18nc("@info:tooltip", "Print with WIFI"))
|
self.setDescription(i18n_catalog.i18nc("@info:tooltip", "Print with WIFI"))
|
||||||
self.setIconName("print")
|
self.setIconName("print")
|
||||||
|
|
||||||
|
self._manager = QNetworkAccessManager()
|
||||||
|
self._manager.finished.connect(self._onFinished)
|
||||||
|
|
||||||
|
## Hack to ensure that the qt networking stuff isn't garbage collected (unless we want it to)
|
||||||
|
self._qt_request = None
|
||||||
|
self._qt_reply = None
|
||||||
|
self._qt_multi_part = None
|
||||||
|
self._qt_part = None
|
||||||
|
|
||||||
|
|
||||||
|
#request_qt_get = QNetworkRequest(QUrl("http://10.180.0.53/api/v1/printer"))
|
||||||
|
#response = self._manager.get(request_qt_get)
|
||||||
|
|
||||||
self._progress_message = None
|
self._progress_message = None
|
||||||
self._error_message = None
|
self._error_message = None
|
||||||
|
|
||||||
|
@ -120,11 +138,34 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
try:
|
try:
|
||||||
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), 0, False, -1)
|
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), 0, False, -1)
|
||||||
self._progress_message.show()
|
self._progress_message.show()
|
||||||
#TODO: Create a job that handles this! (As it currently locks up UI)
|
|
||||||
result = self._httpPost("print_job", self._file)
|
single_string_file_data = ""
|
||||||
self._progress_message.hide()
|
for line in self._file:
|
||||||
if result.status_code == 200:
|
single_string_file_data += line
|
||||||
pass
|
|
||||||
|
## TODO: Use correct file name (we use placeholder now)
|
||||||
|
file_name = "test.gcode"
|
||||||
|
|
||||||
|
## Create multi_part request
|
||||||
|
self._qt_multi_part = QHttpMultiPart(QHttpMultiPart.FormDataType)
|
||||||
|
|
||||||
|
## Create part (to be placed inside multipart)
|
||||||
|
self._qt_part = QHttpPart()
|
||||||
|
self._qt_part.setHeader(QNetworkRequest.ContentDispositionHeader,
|
||||||
|
"form-data; name=\"file\"; filename=\"%s\"" % file_name)
|
||||||
|
self._qt_part.setBody(single_string_file_data)
|
||||||
|
self._qt_multi_part.append(self._qt_part)
|
||||||
|
|
||||||
|
url = "http://" + self._address + self._api_prefix + "print_job"
|
||||||
|
|
||||||
|
url_2 = "http://10.180.0.53/api/v1/print_job"
|
||||||
|
## Create the QT request
|
||||||
|
self._qt_request = QNetworkRequest(QUrl("http://10.180.0.53/api/v1/print_job"))
|
||||||
|
|
||||||
|
## Post request + data
|
||||||
|
self._qt_reply = self._manager.post(self._qt_request, self._qt_multi_part)
|
||||||
|
self._qt_reply.uploadProgress.connect(self._onUploadProgress)
|
||||||
|
|
||||||
except IOError:
|
except IOError:
|
||||||
self._progress_message.hide()
|
self._progress_message.hide()
|
||||||
self._error_message = Message(i18n_catalog.i18nc("@info:status", "Unable to send data to printer. Is another job still active?"))
|
self._error_message = Message(i18n_catalog.i18nc("@info:status", "Unable to send data to printer. Is another job still active?"))
|
||||||
|
@ -133,6 +174,14 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
self._progress_message.hide()
|
self._progress_message.hide()
|
||||||
Logger.log("e" , "An exception occured in wifi connection: %s" % str(e))
|
Logger.log("e" , "An exception occured in wifi connection: %s" % str(e))
|
||||||
|
|
||||||
|
def _onFinished(self, reply):
|
||||||
|
#print(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
|
||||||
|
reply.uploadProgress.disconnect(self._onUploadProgress)
|
||||||
|
self._progress_message.hide()
|
||||||
|
|
||||||
|
def _onUploadProgress(self, bytes_sent, bytes_total):
|
||||||
|
self._progress_message.setProgress(bytes_sent / bytes_total * 100)
|
||||||
|
|
||||||
def _httpGet(self, path):
|
def _httpGet(self, path):
|
||||||
return requests.get("http://" + self._address + self._api_prefix + path)
|
return requests.get("http://" + self._address + self._api_prefix + path)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue