OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::Repetier Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/Utils/Repetier.hpp>

Inheritance diagram for Slic3r::Repetier:
Collaboration diagram for Slic3r::Repetier:

Public Types

typedef Http::ProgressFn ProgressFn
typedef std::function< void(wxString)> ErrorFn
typedef std::function< void(wxString, wxString)> InfoFn

Public Member Functions

 Repetier (DynamicPrintConfig *config)
 ~Repetier () override=default
const char * get_name () const override
bool test (wxString &curl_msg) const override
wxString get_test_ok_msg () const override
wxString get_test_failed_msg (wxString &msg) const override
bool upload (PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const override
bool has_auto_discovery () const override
bool can_test () const override
PrintHostPostUploadActions get_post_upload_actions () const override
bool supports_multiple_printers () const override
std::string get_host () const override
bool get_groups (wxArrayString &groups) const override
bool get_printers (wxArrayString &printers) const override
virtual std::string get_sn () const
virtual bool get_storage (wxArrayString &, wxArrayString &) const
virtual bool is_cloud () const
virtual bool is_logged_in () const
virtual void log_out () const
virtual bool get_login_url (wxString &auth_url) const

Static Public Member Functions

static PrintHost * get_print_host (DynamicPrintConfig *config)
static std::string get_print_host_webui (DynamicPrintConfig *config)
static int get_err_code_from_body (const std::string &body)

Protected Member Functions

virtual wxString format_error (const std::string &body, const std::string &error, unsigned status) const

Static Protected Member Functions

static wxString timed_out_message ()

Private Member Functions

void set_auth (Http &http) const
std::string make_url (const std::string &path) const

Private Attributes

std::string host
std::string apikey
std::string cafile
std::string port

Detailed Description

Member Typedef Documentation

◆ ErrorFn

typedef std::function<void(wxString )> Slic3r::PrintHost::ErrorFn
inherited

◆ InfoFn

typedef std::function<void(wxString , wxString )> Slic3r::PrintHost::InfoFn
inherited

◆ ProgressFn

Constructor & Destructor Documentation

◆ Repetier()

Slic3r::Repetier::Repetier ( DynamicPrintConfig * config)
35 :
36 host(config->opt_string("print_host")),
37 apikey(config->opt_string("printhost_apikey")),
38 cafile(config->opt_string("printhost_cafile")),
39 port(config->opt_string("printhost_port"))
40{}
std::string cafile
Definition Repetier.hpp:41
std::string host
Definition Repetier.hpp:39
std::string apikey
Definition Repetier.hpp:40
std::string port
Definition Repetier.hpp:42

References apikey, cafile, host, and port.

◆ ~Repetier()

Slic3r::Repetier::~Repetier ( )
overridedefault

Member Function Documentation

◆ can_test()

bool Slic3r::Repetier::can_test ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

30{ return true; }

◆ format_error()

wxString Slic3r::PrintHost::format_error ( const std::string & body,
const std::string & error,
unsigned status ) const
protectedvirtualinherited
203{
204 if (status != 0) {
205 const std::string reason = moonraker_error_reason(body);
206 auto wxbody = wxString::FromUTF8(reason.empty() ? body : reason);
207 return wxString::Format("HTTP %u: %s", status, wxbody);
208 } else {
209 if (error.find("curl:Timeout was reached") != std::string::npos) {
210 return timed_out_message();
211 }else if(error.find("curl:Couldn't resolve host name")!= std::string::npos){
212 return _L("The Hostname/IP/URL could not be parsed, please check it and try again.");
213 } else if (error.find("Connection was reset") != std::string::npos){
214 return _L("File/data transfer interrupted. Please check the printer and network, then try it again.");
215 }
216 else {
217 return wxString::FromUTF8(error.data());
218 }
219 }
220}
#define _L(s)
Definition OBJ.cpp:34
static wxString timed_out_message()
Definition PrintHost.cpp:222
std::string moonraker_error_reason(const std::string &body)
Definition PrintHost.cpp:137

References _L, and timed_out_message().

Referenced by Slic3r::Duet::connect(), Slic3r::UltiMaker::connect(), Slic3r::SimplyPrint::do_chunk_upload(), Slic3r::SimplyPrint::do_temp_upload(), Slic3r::ElegooLink::elegoo_cc2_test(), Slic3r::ElegooLink::elegoo_test(), Slic3r::PrusaLink::post_inner(), Slic3r::PrusaLink::put_inner(), Slic3r::Flashforge::request_local_api_json(), Slic3r::Duet::start_print(), Slic3r::Moonraker::start_print(), Slic3r::UltiMaker::start_print(), Slic3r::AstroBox::test(), Slic3r::CrealityPrint::test(), Slic3r::ESP3D::test(), Slic3r::FlashAir::test(), Slic3r::Moonraker::test(), Slic3r::Obico::test(), Slic3r::OctoPrint::test(), Slic3r::PrusaLink::test(), Slic3r::Repetier::test(), Slic3r::UltiMaker::test(), Slic3r::PrusaLink::test_with_method_check(), Slic3r::AstroBox::upload(), Slic3r::C3DPrinterOS::upload(), Slic3r::CrealityPrint::upload(), Slic3r::Duet::upload(), Slic3r::ESP3D::upload(), Slic3r::FlashAir::upload(), Slic3r::MKS::upload(), Slic3r::Moonraker::upload(), Slic3r::Obico::upload(), Slic3r::Repetier::upload(), Slic3r::UltiMaker::upload(), Slic3r::OctoPrint::upload_inner_with_host(), Slic3r::Flashforge::upload_local_api(), Slic3r::ElegooLink::uploadPart(), and Slic3r::ElegooLink::uploadPartCC2().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_err_code_from_body()

int Slic3r::PrintHost::get_err_code_from_body ( const std::string & body)
staticinherited
189{
190 boost::property_tree::ptree root;
191 std::istringstream iss(body);
192 try {
193 boost::property_tree::read_json(iss, root);
194 } catch (const std::exception &ex) {
195 BOOST_LOG_TRIVIAL(error) << "PrintHost: response is not valid JSON: " << ex.what();
196 return -1;
197 }
198
199 return root.get<int>("err", 0);
200}

Referenced by Slic3r::Duet::connect(), Slic3r::UltiMaker::connect(), Slic3r::Duet::upload(), Slic3r::MKS::upload(), and Slic3r::UltiMaker::upload().

Here is the caller graph for this function:

◆ get_groups()

bool Slic3r::Repetier::get_groups ( wxArrayString & groups) const
overridevirtual

Reimplemented from Slic3r::PrintHost.

208{
209 bool res = true;
210
211 const char *name = get_name();
212 auto url = make_url((boost::format("printer/api/%1%") % port).str());
213
214 BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Get groups at: %2%") % name % url;
215
216 auto http = Http::get(std::move(url));
217 set_auth(http);
218 http.form_add("a", "listModelGroups");
219 http.on_error([&](std::string body, std::string error, unsigned status) {
220 BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error getting version: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
221 })
222 .on_complete([&](std::string body, unsigned) {
223 BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got groups: %2%") % name % body;
224
225 try {
226 std::stringstream ss(body);
227 pt::ptree ptree;
228 pt::read_json(ss, ptree);
229
230 BOOST_FOREACH(boost::property_tree::ptree::value_type &v, ptree.get_child("groupNames.")) {
231 if (v.second.data() == "#") {
232 groups.push_back(_utf8(L("Default")));
233 } else {
234 // Is it safe to assume that the data are utf-8 encoded?
235 groups.push_back(GUI::from_u8(v.second.data()));
236 }
237 }
238 }
239 catch (const std::exception &) {
240 //msg = "Could not parse server response";
241 res = false;
242 }
243 })
244 .perform_sync();
245
246 return res;
247}
#define L(s)
Definition ExtrusionEntity.cpp:25
static Http get(std::string url)
Definition Http.cpp:886
const char * get_name() const override
Definition Repetier.cpp:42
std::string make_url(const std::string &path) const
Definition Repetier.cpp:194
void set_auth(Http &http) const
Definition Repetier.cpp:185
wxString from_u8(const std::string &str)
Definition GUI.cpp:544
@ http
Definition IPrinterAgent.hpp:64
#define _utf8(s)
Definition I18N.hpp:10

References _utf8, Slic3r::GUI::from_u8(), Slic3r::Http::get(), get_name(), Slic3r::http, L, make_url(), port, and set_auth().

Here is the call graph for this function:

◆ get_host()

std::string Slic3r::Repetier::get_host ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

33{ return host; }

References host.

◆ get_login_url()

virtual bool Slic3r::PrintHost::get_login_url ( wxString & auth_url) const
inlinevirtualinherited

Reimplemented in Slic3r::Obico.

99{ return false; }

Referenced by Slic3r::GUI::PrinterCloudAuthDialog::PrinterCloudAuthDialog().

Here is the caller graph for this function:

◆ get_name()

const char * Slic3r::Repetier::get_name ( ) const
overridevirtual

Implements Slic3r::PrintHost.

42{ return "Repetier"; }

Referenced by get_groups(), get_printers(), test(), and upload().

Here is the caller graph for this function:

◆ get_post_upload_actions()

PrintHostPostUploadActions Slic3r::Repetier::get_post_upload_actions ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

@ StartPrint
Definition PrintHost.hpp:25

References Slic3r::StartPrint.

◆ get_print_host()

PrintHost * Slic3r::PrintHost::get_print_host ( DynamicPrintConfig * config)
staticinherited
59{
61
62 {
63 const auto opt = config->option<ConfigOptionEnum<PrinterTechnology>>("printer_technology");
64 if (opt != nullptr) {
65 tech = opt->value;
66 }
67 }
68
69 if (tech == ptFFF) {
70 const auto opt = config->option<ConfigOptionEnum<PrintHostType>>("host_type");
71 const auto host_type = opt != nullptr ? opt->value : htOctoPrint;
72
73 switch (host_type) {
74 case htOctoPrint: return new OctoPrint(config);
75 case htDuet: return new Duet(config);
76 case htUltiMaker: return new UltiMaker(config);
77 case htFlashAir: return new FlashAir(config);
78 case htAstroBox: return new AstroBox(config);
79 case htRepetier: return new Repetier(config);
80 case htPrusaLink: return new PrusaLink(config);
81 case htPrusaConnect: return new PrusaConnect(config);
82 case htMKS: return new MKS(config);
83 case htESP3D: return new ESP3D(config);
84 case htCrealityPrint: return new CrealityPrint(config);
85 case htObico: return new Obico(config);
86 case htFlashforge: return new Flashforge(config);
87 case htSimplyPrint: return new SimplyPrint(config);
88 case htElegooLink: return new ElegooLink(config);
89 case ht3DPrinterOS: return new C3DPrinterOS(config);
90 case htMoonraker: return new Moonraker(config);
91 default: return nullptr;
92 }
93 } else {
94 return new SL1Host(config);
95 }
96}
PrinterTechnology
Definition Config.hpp:229
@ ptFFF
Definition Config.hpp:231
@ htSimplyPrint
Definition PrintConfig.hpp:119
@ htMoonraker
Definition PrintConfig.hpp:119
@ htElegooLink
Definition PrintConfig.hpp:119
@ htCrealityPrint
Definition PrintConfig.hpp:119
@ ht3DPrinterOS
Definition PrintConfig.hpp:119
@ htPrusaLink
Definition PrintConfig.hpp:119
@ htRepetier
Definition PrintConfig.hpp:119
@ htMKS
Definition PrintConfig.hpp:119
@ htPrusaConnect
Definition PrintConfig.hpp:119
@ htDuet
Definition PrintConfig.hpp:119
@ htUltiMaker
Definition PrintConfig.hpp:119
@ htObico
Definition PrintConfig.hpp:119
@ htOctoPrint
Definition PrintConfig.hpp:119
@ htFlashforge
Definition PrintConfig.hpp:119
@ htFlashAir
Definition PrintConfig.hpp:119
@ htAstroBox
Definition PrintConfig.hpp:119
@ htESP3D
Definition PrintConfig.hpp:119
ConfigOptionEnum< PrinterTechnology >
Definition PrintConfig.hpp:2358

References Slic3r::ht3DPrinterOS, Slic3r::htAstroBox, Slic3r::htCrealityPrint, Slic3r::htDuet, Slic3r::htElegooLink, Slic3r::htESP3D, Slic3r::htFlashAir, Slic3r::htFlashforge, Slic3r::htMKS, Slic3r::htMoonraker, Slic3r::htObico, Slic3r::htOctoPrint, Slic3r::htPrusaConnect, Slic3r::htPrusaLink, Slic3r::htRepetier, Slic3r::htSimplyPrint, Slic3r::htUltiMaker, Slic3r::ConfigBase::option(), and Slic3r::ptFFF.

Referenced by Slic3r::GUI::PhysicalPrinterDialog::build_printhost_settings(), Slic3r::GUI::anonymous_namespace{PrinterWebViewHandler.cpp}::ElegooPrinterWebViewHandler::handle_get_sn_request(), Slic3r::GUI::anonymous_namespace{PrinterWebViewHandler.cpp}::ElegooPrinterWebViewHandler::handle_upload_request(), Slic3r::GUI::PhysicalPrinterDialog::update_printers(), and Slic3r::GUI::PhysicalPrinterDialog::update_printhost_buttons().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_print_host_webui()

std::string Slic3r::PrintHost::get_print_host_webui ( DynamicPrintConfig * config)
staticinherited
99{
100 if (config == nullptr)
101 return {};
102
103 std::string webui_url;
104 const auto* host_type_opt = config->option<ConfigOptionEnum<PrintHostType>>("host_type");
105 const auto host_type = host_type_opt != nullptr ? host_type_opt->value : htOctoPrint;
106
107 switch (host_type) {
108 case htElegooLink: {
109 webui_url = ElegooLink::get_print_host_webui(config);
110 break;
111 }
112 default: break;
113 }
114
115 if (webui_url.empty()) {
116 webui_url = config->opt_string("print_host_webui");
117 if (webui_url.empty())
118 webui_url = config->opt_string("print_host");
119 if (webui_url.empty())
120 return webui_url;
121 }
122
123 const bool has_http_scheme = boost::algorithm::istarts_with(webui_url, "http");
124 const bool has_file_scheme = boost::algorithm::istarts_with(webui_url, "file:");
125
126 if (!has_http_scheme && !has_file_scheme)
127 webui_url = "http://" + webui_url;
128
129 return webui_url;
130}

References Slic3r::ElegooLink::get_print_host_webui(), Slic3r::htElegooLink, Slic3r::htOctoPrint, Slic3r::DynamicConfig::opt_string(), Slic3r::ConfigBase::option(), and Slic3r::ConfigOptionSingle< T >::value.

Referenced by Slic3r::GUI::MainFrame::load_printer_url(), Slic3r::GUI::Plater::priv::on_tab_selection_changing(), and Slic3r::GUI::Sidebar::update_all_preset_comboboxes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_printers()

bool Slic3r::Repetier::get_printers ( wxArrayString & printers) const
overridevirtual

Reimplemented from Slic3r::PrintHost.

250{
251 const char *name = get_name();
252
253 bool res = true;
254 auto url = make_url("printer/list");
255
256 BOOST_LOG_TRIVIAL(info) << boost::format("%1%: List printers at: %2%") % name % url;
257
258 auto http = Http::get(std::move(url));
259 set_auth(http);
260
261 http.on_error([&](std::string body, std::string error, unsigned status) {
262 BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error listing printers: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
263 res = false;
264 })
265 .on_complete([&](std::string body, unsigned http_status) {
266 BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got printers: %2%, HTTP status: %3%") % name % body % http_status;
267
268 if (http_status != 200)
269 throw HostNetworkError(GUI::format(_L("HTTP status: %1%\nMessage body: \"%2%\""), http_status, body));
270
271 std::stringstream ss(body);
272 pt::ptree ptree;
273 try {
274 pt::read_json(ss, ptree);
275 } catch (const pt::ptree_error &err) {
276 throw HostNetworkError(GUI::format(_L("Parsing of host response failed.\nMessage body: \"%1%\"\nError: \"%2%\""), body, err.what()));
277 }
278
279 const auto error = ptree.get_optional<std::string>("error");
280 if (error)
281 throw HostNetworkError(*error);
282
283 try {
284 BOOST_FOREACH(boost::property_tree::ptree::value_type &v, ptree.get_child("data.")) {
285 const auto port = v.second.get<std::string>("slug");
286 printers.push_back(Slic3r::GUI::from_u8(port));
287 }
288 } catch (const std::exception &err) {
289 throw HostNetworkError(GUI::format(_L("Enumeration of host printers failed.\nMessage body: \"%1%\"\nError: \"%2%\""), body, err.what()));
290 }
291 })
292 .perform_sync();
293
294 return res;
295}
std::string format(const char *fmt, TArgs &&... args)
Definition format.hpp:36

References _L, Slic3r::GUI::format(), Slic3r::GUI::from_u8(), Slic3r::Http::get(), get_name(), Slic3r::http, make_url(), port, and set_auth().

Here is the call graph for this function:

◆ get_sn()

virtual std::string Slic3r::PrintHost::get_sn ( ) const
inlinevirtualinherited

Get the serial number for connecting to the printer. For Elegoo CC2, the device details connection to the printer requires the serial number. Other print hosts do not need to implement this interface, and it returns an empty string by default.

Reimplemented in Slic3r::ElegooLink.

80{ return ""; }

◆ get_storage()

virtual bool Slic3r::PrintHost::get_storage ( wxArrayString & ,
wxArrayString &  ) const
inlinevirtualinherited

Reimplemented in Slic3r::Moonraker, Slic3r::PrusaConnect, and Slic3r::PrusaLink.

88{ return false; }

◆ get_test_failed_msg()

wxString Slic3r::Repetier::get_test_failed_msg ( wxString & msg) const
overridevirtual

Implements Slic3r::PrintHost.

113{
114 return GUI::from_u8((boost::format("%s: %s\n\n%s")
115 % _utf8(L("Could not connect to Repetier"))
116 % std::string(msg.ToUTF8())
117 % _utf8(L("Note: Repetier version 0.90.0 or higher is required."))).str());
118}

References _utf8, Slic3r::GUI::from_u8(), and L.

Here is the call graph for this function:

◆ get_test_ok_msg()

wxString Slic3r::Repetier::get_test_ok_msg ( ) const
overridevirtual

Implements Slic3r::PrintHost.

108{
109 return _(L("Connection to Repetier is working correctly."));
110}
#define _(s)
Definition 3mf.cpp:306

References _, and L.

◆ has_auto_discovery()

bool Slic3r::Repetier::has_auto_discovery ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

29{ return false; }

◆ is_cloud()

virtual bool Slic3r::PrintHost::is_cloud ( ) const
inlinevirtualinherited

Reimplemented in Slic3r::C3DPrinterOS, Slic3r::Obico, and Slic3r::SimplyPrint.

96{ return false; }

◆ is_logged_in()

virtual bool Slic3r::PrintHost::is_logged_in ( ) const
inlinevirtualinherited

Reimplemented in Slic3r::C3DPrinterOS, and Slic3r::SimplyPrint.

97{ return false; }

◆ log_out()

virtual void Slic3r::PrintHost::log_out ( ) const
inlinevirtualinherited

Reimplemented in Slic3r::C3DPrinterOS, and Slic3r::SimplyPrint.

98{}

◆ make_url()

std::string Slic3r::Repetier::make_url ( const std::string & path) const
private
195{
196 if (host.find("http://") == 0 || host.find("https://") == 0) {
197 if (host.back() == '/') {
198 return (boost::format("%1%%2%") % host % path).str();
199 } else {
200 return (boost::format("%1%/%2%") % host % path).str();
201 }
202 } else {
203 return (boost::format("http://%1%/%2%") % host % path).str();
204 }
205}

References host.

Referenced by get_groups(), get_printers(), test(), and upload().

Here is the caller graph for this function:

◆ set_auth()

void Slic3r::Repetier::set_auth ( Http & http) const
private
186{
187 http.header("X-Api-Key", apikey);
188
189 if (! cafile.empty()) {
190 http.ca_file(cafile);
191 }
192}

References apikey, cafile, and Slic3r::http.

Referenced by get_groups(), get_printers(), test(), and upload().

Here is the caller graph for this function:

◆ supports_multiple_printers()

bool Slic3r::Repetier::supports_multiple_printers ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::PrintHost.

32{ return true; }

◆ test()

bool Slic3r::Repetier::test ( wxString & curl_msg) const
overridevirtual

Implements Slic3r::PrintHost.

63{
64 // Since the request is performed synchronously here,
65 // it is ok to refer to `msg` from within the closure
66
67 const char *name = get_name();
68
69 bool res = true;
70 auto url = make_url("printer/info");
71
72 BOOST_LOG_TRIVIAL(info) << boost::format("%1%: List version at: %2%") % name % url;
73
74 auto http = Http::get(std::move(url));
76
77 http.on_error([&](std::string body, std::string error, unsigned status) {
78 BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error getting version: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
79 res = false;
80 msg = format_error(body, error, status);
81 })
82 .on_complete([&](std::string body, unsigned) {
83 BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got version: %2%") % name % body;
84
85 try {
86 std::stringstream ss(body);
87 pt::ptree ptree;
88 pt::read_json(ss, ptree);
89
90 const auto text = ptree.get_optional<std::string>("name");
91 const auto soft = ptree.get_optional<std::string>("software");
92 res = validate_repetier(text, soft);
93 if (! res) {
94 msg = GUI::from_u8((boost::format(_utf8(L("Mismatched type of print host: %s"))) % (soft ? *soft : (text ? *text : "Repetier"))).str());
95 }
96 }
97 catch (const std::exception &) {
98 res = false;
99 msg = _L("Could not parse server response.");
100 }
101 })
102 .perform_sync();
103
104 return res;
105}
virtual wxString format_error(const std::string &body, const std::string &error, unsigned status) const
Definition PrintHost.cpp:202
static bool validate_repetier(const boost::optional< std::string > &name, const boost::optional< std::string > &soft)
Definition Repetier.cpp:46

References _L, _utf8, Slic3r::PrintHost::format_error(), Slic3r::GUI::from_u8(), Slic3r::Http::get(), get_name(), Slic3r::http, L, make_url(), set_auth(), and Slic3r::validate_repetier().

Referenced by upload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ timed_out_message()

wxString Slic3r::PrintHost::timed_out_message ( )
staticprotectedinherited
223{
224 return _L("Connection timed out. Please check if the printer and computer network are functioning properly, and confirm that they are on the same network.");
225}

References _L.

Referenced by format_error(), and Slic3r::CrealityPrint::start_print().

Here is the caller graph for this function:

◆ upload()

bool Slic3r::Repetier::upload ( PrintHostUpload upload_data,
ProgressFn prorgess_fn,
ErrorFn error_fn,
InfoFn info_fn ) const
overridevirtual

Implements Slic3r::PrintHost.

121{
122 const char *name = get_name();
123
124 const auto upload_filename = upload_data.upload_path.filename();
125 const auto upload_parent_path = upload_data.upload_path.parent_path();
126
127 wxString test_msg;
128 if (! test(test_msg)) {
129 error_fn(std::move(test_msg));
130 return false;
131 }
132
133 bool res = true;
134
135 auto url = upload_data.post_action == PrintHostPostUploadAction::StartPrint
136 ? make_url((boost::format("printer/job/%1%") % port).str())
137 : make_url((boost::format("printer/model/%1%") % port).str());
138
139 BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Uploading file %2% at %3%, filename: %4%, path: %5%, print: %6%, group: %7%")
140 % name
141 % upload_data.source_path
142 % url
143 % upload_filename.string()
144 % upload_parent_path.string()
145 % (upload_data.post_action == PrintHostPostUploadAction::StartPrint ? "true" : "false")
146 % upload_data.group;
147
148 auto http = Http::post(std::move(url));
149 set_auth(http);
150
151 if (! upload_data.group.empty() && upload_data.group != _utf8(L("Default"))) {
152 http.form_add("group", upload_data.group);
153 }
154
155 if(upload_data.post_action == PrintHostPostUploadAction::StartPrint) {
156 http.form_add("name", upload_filename.string());
157 http.form_add("autostart", "true"); // See https://github.com/prusa3d/PrusaSlicer/issues/7807#issuecomment-1235519371
158 }
159
160 http.form_add("a", "upload")
161 .form_add_file("filename", upload_data.source_path.string(), upload_filename.string())
162 .on_complete([&](std::string body, unsigned status) {
163 BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: File uploaded: HTTP %2%: %3%") % name % status % body;
164 })
165 .on_error([&](std::string body, std::string error, unsigned status) {
166 BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error uploading file: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
167 error_fn(format_error(body, error, status));
168 res = false;
169 })
170 .on_progress([&](Http::Progress progress, bool &cancel) {
171 prorgess_fn(std::move(progress), cancel);
172 if (cancel) {
173 // Upload was canceled
174 BOOST_LOG_TRIVIAL(info) << "Repetier: Upload canceled";
175 res = false;
176 }
177 })
178 .perform_sync();
179
180 return res;
181}
static Http post(std::string url)
Definition Http.cpp:891
bool test(wxString &curl_msg) const override
Definition Repetier.cpp:62
std::string format(const char *fmt, TArgs &&... args)
Definition format.hpp:45

References _utf8, Slic3r::PrintHost::format_error(), get_name(), Slic3r::PrintHostUpload::group, Slic3r::http, L, make_url(), port, Slic3r::Http::post(), Slic3r::PrintHostUpload::post_action, set_auth(), Slic3r::PrintHostUpload::source_path, Slic3r::StartPrint, test(), and Slic3r::PrintHostUpload::upload_path.

Here is the call graph for this function:

Member Data Documentation

◆ apikey

std::string Slic3r::Repetier::apikey
private

Referenced by Repetier(), and set_auth().

◆ cafile

std::string Slic3r::Repetier::cafile
private

Referenced by Repetier(), and set_auth().

◆ host

std::string Slic3r::Repetier::host
private

Referenced by Repetier(), get_host(), and make_url().

◆ port

std::string Slic3r::Repetier::port
private

The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/Utils/Repetier.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/Utils/Repetier.cpp