Skip to content

Commit a0d0078

Browse files
committed
Allow canceling upload to Connect
1 parent 4a71ff4 commit a0d0078

File tree

1 file changed

+46
-14
lines changed

1 file changed

+46
-14
lines changed

D3DCloudPrintPlugin.py

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,13 @@ def startUpload(self):
5959
self.uploading = True
6060

6161

62+
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Connecting to Doodle3D Connect"), 0, False, -1)
63+
self._progress_message.addAction("Cancel", i18n_catalog.i18nc("@action:button", "Cancel"), None, "")
64+
self._progress_message.actionTriggered.connect(self._onMessageActionTriggered)
65+
self._progress_message.show()
66+
# Request upload credentials
6267
url = QUrl("https://gcodeserver.doodle3d.com/upload")
63-
self._manager.post(QNetworkRequest(url), QByteArray())
68+
self._post_reply = self._manager.post(QNetworkRequest(url), QByteArray())
6469

6570
def uploadGCode(self, data):
6671
try:
@@ -107,13 +112,17 @@ def uploadGCode(self, data):
107112
upload_url = QUrl(data["data"]["reservation"]["url"])
108113
Logger.log("d", "{}", upload_url)
109114

110-
reply = self._manager.post(QNetworkRequest(upload_url), multi_part)
111-
reply.uploadProgress.connect(self._onProgress)
115+
self._post_reply = self._manager.post(QNetworkRequest(upload_url), multi_part)
116+
self._post_reply.uploadProgress.connect(self._onProgress)
112117
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to Doodle3D Connect"), 0, False, -1)
113118
self._progress_message.addAction("Cancel", i18n_catalog.i18nc("@action:button", "Cancel"), None, "")
119+
self._progress_message.actionTriggered.connect(self._onMessageActionTriggered)
114120
self._progress_message.show()
115-
multi_part.setParent(reply)
121+
multi_part.setParent(self._post_reply)
116122
except Exception as e:
123+
self._progress_message.hide()
124+
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Unable to send data to Doodle3D Connect. Is another job still active?"))
125+
self._progress_message.show()
117126
Logger.log("e", "An exception occured during G-code upload: %s" % str(e))
118127

119128
def _onProgress(self, bytes_sent, bytes_total):
@@ -135,27 +144,50 @@ def _onFinished(self, reply):
135144
if reply.error() == QNetworkReply.TimeoutError:
136145
Logger.log("w", "Received a timeout on a request to the G-code server")
137146

147+
status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
148+
149+
if not status_code:
150+
self.uploading = False
151+
return
152+
138153
reply_url = reply.url().toString()
139154
if "upload" in reply_url:
140-
json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
141-
Logger.log("d", "{}", json_data)
155+
try:
156+
json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
157+
except json.decoder.JSONDecodeError:
158+
Logger.log("w", "Received invalid upload credentials request reply from Connect: Not valid JSON.")
159+
return
142160

143161
self.gcodeId = json_data["data"]["id"]
144162

145163
reply.deleteLater()
146-
self.uploadGCode(json_data);
147-
if "amazonaws" in reply_url:
164+
self._post_reply = None
148165
self._progress_message.hide()
149-
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "G-code file sent to Doodle3D Connect"))
150-
self._progress_message.addAction("open_browser", i18n_catalog.i18nc("@action:button", "Open Connect.."), "globe", i18n_catalog.i18nc("@info:tooltip", "Open the Doodle3D Connect web interface"))
151-
self._progress_message.actionTriggered.connect(self._onMessageActionTriggered)
152-
self._progress_message.show()
153-
self.uploading = False
154-
Logger.log("d", "uploaded to amazon")
166+
self.uploadGCode(json_data)
167+
elif "amazonaws" in reply_url:
168+
if status_code == 204:
169+
self._progress_message.hide()
170+
self._progress_message = Message(i18n_catalog.i18nc("@info:status", "G-code file sent to Doodle3D Connect"))
171+
self._progress_message.addAction("open_browser", i18n_catalog.i18nc("@action:button", "Open Connect.."), "globe", i18n_catalog.i18nc("@info:tooltip", "Open the Doodle3D Connect web interface"))
172+
self._progress_message.actionTriggered.connect(self._onMessageActionTriggered)
173+
self._progress_message.show()
174+
self.uploading = False
175+
Logger.log("d", "uploaded to amazon")
176+
else:
177+
self._progress_message.hide()
178+
Logger.log("w", "Unexpected status code in reply from AWS S3")
155179

156180
def _onMessageActionTriggered(self, message, action):
157181
if action == "open_browser":
158182
QDesktopServices.openUrl(QUrl("%s?uuid=%s" % (self.base_url, self.gcodeId)))
183+
elif action == "Cancel":
184+
Logger.log("d", "canceled upload to Doodle3D Connect")
185+
self._progress_message.hide()
186+
if self._post_reply:
187+
self._post_reply.abort()
188+
self._post_reply = None
189+
else:
190+
Logger.log("d", "unknown action: %s" % action)
159191

160192

161193

0 commit comments

Comments
 (0)