Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVojtech Kral <vojtech@kral.hk>2018-04-04 12:18:22 +0300
committerbubnikv <bubnikv@gmail.com>2018-04-04 12:18:22 +0300
commitb0840065ed84f4006207b38de3c9c6a5e15a7071 (patch)
tree3da655b0f6ca247d0f567831a978a73c68246978 /xs/src/slic3r/Utils/OctoPrint.cpp
parent00324a14b84f47cc6ae1dc92e6582ee6b6171e03 (diff)
Octoprint (#804)
* Octoprint progress dialog * Fix curl version on Windows
Diffstat (limited to 'xs/src/slic3r/Utils/OctoPrint.cpp')
-rw-r--r--xs/src/slic3r/Utils/OctoPrint.cpp66
1 files changed, 42 insertions, 24 deletions
diff --git a/xs/src/slic3r/Utils/OctoPrint.cpp b/xs/src/slic3r/Utils/OctoPrint.cpp
index 5bf51f470..e63a16c38 100644
--- a/xs/src/slic3r/Utils/OctoPrint.cpp
+++ b/xs/src/slic3r/Utils/OctoPrint.cpp
@@ -1,10 +1,11 @@
#include "OctoPrint.hpp"
-#include <iostream>
+#include <algorithm>
#include <boost/format.hpp>
#include <wx/frame.h>
#include <wx/event.h>
+#include <wx/progdlg.h>
#include "libslic3r/PrintConfig.hpp"
#include "slic3r/GUI/GUI.hpp"
@@ -39,36 +40,53 @@ bool OctoPrint::test(wxString &msg) const
return res;
}
-void OctoPrint::send_gcode(int windowId, int completeEvt, int errorEvt, const std::string &filename, bool print) const
+bool OctoPrint::send_gcode(const std::string &filename, bool print) const
{
+ enum { PROGRESS_RANGE = 1000 };
+
+ const auto errortitle = _(L("Error while uploading to the OctoPrint server"));
+
+ wxProgressDialog progress_dialog(
+ _(L("OctoPrint upload")),
+ _(L("Sending G-code file to the OctoPrint server...")),
+ PROGRESS_RANGE, nullptr, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_CAN_ABORT);
+ progress_dialog.Pulse();
+
+ wxString test_msg;
+ if (!test(test_msg)) {
+ auto errormsg = wxString::Format("%s: %s", errortitle, test_msg);
+ GUI::show_error(&progress_dialog, std::move(errormsg));
+ return false;
+ }
+
+ bool res = true;
+
auto http = Http::post(std::move(make_url("api/files/local")));
set_auth(http);
http.form_add("print", print ? "true" : "false")
.form_add_file("file", filename)
- .on_complete([=](std::string body, unsigned status) {
- wxWindow *window = wxWindow::FindWindowById(windowId);
- if (window == nullptr) { return; }
-
- wxCommandEvent* evt = new wxCommandEvent(completeEvt);
- evt->SetString(_(L("G-code file successfully uploaded to the OctoPrint server")));
- evt->SetInt(100);
- wxQueueEvent(window, evt);
+ .on_complete([&](std::string body, unsigned status) {
+ progress_dialog.Update(PROGRESS_RANGE);
+ })
+ .on_error([&](std::string body, std::string error, unsigned status) {
+ auto errormsg = wxString::Format("%s: %s", errortitle, format_error(error, status));
+ GUI::show_error(&progress_dialog, std::move(errormsg));
+ res = false;
})
- .on_error([=](std::string body, std::string error, unsigned status) {
- wxWindow *window = wxWindow::FindWindowById(windowId);
- if (window == nullptr) { return; }
-
- wxCommandEvent* evt_complete = new wxCommandEvent(completeEvt);
- evt_complete->SetInt(100);
- wxQueueEvent(window, evt_complete);
-
- wxCommandEvent* evt_error = new wxCommandEvent(errorEvt);
- evt_error->SetString(wxString::Format("%s: %s",
- _(L("Error while uploading to the OctoPrint server")),
- format_error(error, status)));
- wxQueueEvent(window, evt_error);
+ .on_progress([&](Http::Progress progress, bool &cancel) {
+ if (cancel) {
+ // Upload was canceled
+ res = false;
+ } else if (progress.ultotal > 0) {
+ int value = PROGRESS_RANGE * progress.ulnow / progress.ultotal;
+ cancel = !progress_dialog.Update(std::min(value, PROGRESS_RANGE - 1)); // Cap the value to prevent premature dialog closing
+ } else {
+ cancel = !progress_dialog.Pulse();
+ }
})
- .perform();
+ .perform_sync();
+
+ return res;
}
void OctoPrint::set_auth(Http &http) const