From 6eca12a1edc1af34cef647abdf352445bd2dee52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ba=C5=99tip=C3=A1n?= Date: Tue, 2 Jul 2024 14:36:34 +0200 Subject: [PATCH 1/2] Online service configuration can be now changed via env variables, added support for turning webdev tools via command line option --- src/PrusaSlicer.cpp | 4 ++ src/libslic3r/PrintConfig.cpp | 4 ++ src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/PhysicalPrinterDialog.cpp | 10 +++-- src/slic3r/GUI/PresetArchiveDatabase.cpp | 7 +--- src/slic3r/GUI/UserAccountCommunication.cpp | 3 +- src/slic3r/GUI/UserAccountCommunication.hpp | 2 +- src/slic3r/GUI/UserAccountSession.hpp | 22 ++++++----- src/slic3r/GUI/WebViewDialog.cpp | 12 +++++- src/slic3r/Utils/PrusaConnect.cpp | 2 +- src/slic3r/Utils/PrusaConnect.hpp | 3 +- src/slic3r/Utils/ServiceConfig.cpp | 44 +++++++++++++++++++++ src/slic3r/Utils/ServiceConfig.hpp | 42 ++++++++++++++++++++ 13 files changed, 132 insertions(+), 25 deletions(-) create mode 100644 src/slic3r/Utils/ServiceConfig.cpp create mode 100644 src/slic3r/Utils/ServiceConfig.hpp diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index ccabc07485..07fefd0585 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -68,6 +68,7 @@ #ifdef SLIC3R_GUI #include "slic3r/GUI/GUI_Init.hpp" + #include "slic3r/Utils/ServiceConfig.hpp" #endif /* SLIC3R_GUI */ using namespace Slic3r; @@ -181,6 +182,9 @@ int CLI::run(int argc, char **argv) return 1; #ifdef SLIC3R_GUI + if (m_config.has("webdev")) { + Utils::ServiceConfig::instance().set_webdev_enabled(m_config.opt_bool("webdev")); + } std::vector::iterator it; bool opengl_aa = false; it = std::find(m_actions.begin(), m_actions.end(), "opengl-aa"); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 8e74797534..a22656ae46 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -5667,6 +5667,10 @@ CLIMiscConfigDef::CLIMiscConfigDef() "For example. loglevel=2 logs fatal, error and warning level messages."); def->min = 0; + def = this->add("webdev", coBool); + def->label = L("Enable webdev tools"); + def->tooltip = L("Enable webdev tools"); + #if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(SLIC3R_GUI) def = this->add("sw_renderer", coBool); def->label = L("Render with a software renderer"); diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index e747b3c97e..ded605f684 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -374,6 +374,8 @@ set(SLIC3R_GUI_SOURCES Utils/Secrets.cpp Utils/PrusaConnect.hpp Utils/PrusaConnect.cpp + Utils/ServiceConfig.hpp + Utils/ServiceConfig.cpp ) find_package(NanoSVG REQUIRED) diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 11ca1249c9..4cae18c133 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -37,6 +37,7 @@ #include "../Utils/PrintHost.hpp" #include "../Utils/FixModelByWin10.hpp" #include "../Utils/UndoRedo.hpp" +#include "../Utils/ServiceConfig.hpp" #include "RemovableDriveManager.hpp" #include "BitmapCache.hpp" #include "BonjourDialog.hpp" @@ -653,7 +654,7 @@ void PhysicalPrinterDialog::update(bool printer_change) text_ctrl* printhost_win = printhost_field ? dynamic_cast(printhost_field->getWindow()) : nullptr; if (!m_opened_as_connect && printhost_win && m_last_host_type != htPrusaConnect){ m_stored_host = printhost_win->GetValue(); - printhost_win->SetValue(L"https://connect.prusa3d.com"); + printhost_win->SetValue(from_u8(Utils::ServiceConfig::instance().connect_url())); } } else { m_printhost_browse_btn->Show(); @@ -888,10 +889,11 @@ void PhysicalPrinterDialog::OnOK(wxEvent& event) text_ctrl* printhost_win = printhost_field ? dynamic_cast(printhost_field->getWindow()) : nullptr; const auto opt = m_config->option>("host_type"); if (opt->value == htPrusaConnect) { - if (printhost_win && printhost_win->GetValue() != L"https://connect.prusa3d.com"){ - InfoDialog msg(this, _L("Warning"), _L("URL of Prusa Connect is different from https://connect.prusa3d.com. Do you want to continue?"), true, wxYES_NO); + auto& sc = Utils::ServiceConfig::instance(); + if (printhost_win && printhost_win->GetValue() != GUI::from_u8(sc.connect_url())){ + InfoDialog msg(this, _L("Warning"), GUI::format(_L("URL of Prusa Connect is different from %1%. Do you want to continue?"), sc.connect_url()), true, wxYES_NO); if(msg.ShowModal() != wxID_YES){ - printhost_win->SetValue(L"https://connect.prusa3d.com"); + printhost_win->SetValue(GUI::from_u8(Utils::ServiceConfig::instance().connect_url())); return; } } diff --git a/src/slic3r/GUI/PresetArchiveDatabase.cpp b/src/slic3r/GUI/PresetArchiveDatabase.cpp index 642c6bf6c1..ae77171d1a 100644 --- a/src/slic3r/GUI/PresetArchiveDatabase.cpp +++ b/src/slic3r/GUI/PresetArchiveDatabase.cpp @@ -1,6 +1,7 @@ #include "PresetArchiveDatabase.hpp" #include "slic3r/Utils/Http.hpp" +#include "slic3r/Utils/ServiceConfig.hpp" #include "slic3r/GUI/format.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" @@ -866,11 +867,7 @@ namespace { bool sync_inner(std::string& manifest) { bool ret = false; -#ifdef SLIC3R_REPO_URL - std::string url = SLIC3R_REPO_URL; -#else - std::string url = "https://preset-repo-api.prusa3d.com/v1/repos"; -#endif + std::string url = Utils::ServiceConfig::instance().preset_repo_repos_url(); auto http = Http::get(std::move(url)); add_authorization_header(http); http diff --git a/src/slic3r/GUI/UserAccountCommunication.cpp b/src/slic3r/GUI/UserAccountCommunication.cpp index 405cf55f12..0a7f261755 100644 --- a/src/slic3r/GUI/UserAccountCommunication.cpp +++ b/src/slic3r/GUI/UserAccountCommunication.cpp @@ -322,7 +322,8 @@ void UserAccountCommunication::on_uuid_map_success() } wxString UserAccountCommunication::get_login_redirect_url() { - const std::string AUTH_HOST = "https://account.prusa3d.com"; + auto& sc = Utils::ServiceConfig::instance(); + const std::string AUTH_HOST = sc.account_url(); const std::string CLIENT_ID = client_id(); const std::string REDIRECT_URI = "prusaslicer://login"; CodeChalengeGenerator ccg; diff --git a/src/slic3r/GUI/UserAccountCommunication.hpp b/src/slic3r/GUI/UserAccountCommunication.hpp index 9dfc8dca49..623cbf7e6d 100644 --- a/src/slic3r/GUI/UserAccountCommunication.hpp +++ b/src/slic3r/GUI/UserAccountCommunication.hpp @@ -98,7 +98,7 @@ private: void wakeup_session_thread(); void init_session_thread(); void login_redirect(); - std::string client_id() const { return "oamhmhZez7opFosnwzElIgE2oGgI2iJORSkw587O"; } + std::string client_id() const { return Utils::ServiceConfig::instance().account_client_id(); } diff --git a/src/slic3r/GUI/UserAccountSession.hpp b/src/slic3r/GUI/UserAccountSession.hpp index 77aa9e29bc..1733ec728f 100644 --- a/src/slic3r/GUI/UserAccountSession.hpp +++ b/src/slic3r/GUI/UserAccountSession.hpp @@ -3,6 +3,7 @@ #include "Event.hpp" #include "libslic3r/AppConfig.hpp" +#include "slic3r/Utils/ServiceConfig.hpp" #include #include @@ -108,18 +109,19 @@ public: , m_polling_action(polling_enabled ? UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_PRINTER_MODELS : UserAccountActionID::USER_ACCOUNT_ACTION_DUMMY) { + auto& sc = Utils::ServiceConfig::instance(); // do not forget to add delete to destructor m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_DUMMY] = std::make_unique(); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_REFRESH_TOKEN] = std::make_unique("EXCHANGE_TOKENS", "https://account.prusa3d.com/o/token/"); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CODE_FOR_TOKEN] = std::make_unique("EXCHANGE_TOKENS", "https://account.prusa3d.com/o/token/"); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_USER_ID] = std::make_unique("USER_ID", "https://account.prusa3d.com/api/v1/me/", EVT_UA_ID_USER_SUCCESS, EVT_UA_RESET); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_TEST_ACCESS_TOKEN] = std::make_unique("TEST_ACCESS_TOKEN", "https://account.prusa3d.com/api/v1/me/", EVT_UA_ID_USER_SUCCESS, EVT_UA_FAIL); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_TEST_CONNECTION] = std::make_unique("TEST_CONNECTION", "https://account.prusa3d.com/api/v1/me/", wxEVT_NULL, EVT_UA_RESET); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_STATUS] = std::make_unique("CONNECT_STATUS", "https://connect.prusa3d.com/slicer/status", EVT_UA_PRUSACONNECT_STATUS_SUCCESS, EVT_UA_FAIL); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_PRINTER_MODELS] = std::make_unique("CONNECT_PRINTER_MODELS", "https://connect.prusa3d.com/slicer/printer_list", EVT_UA_PRUSACONNECT_PRINTER_MODELS_SUCCESS, EVT_UA_FAIL); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_AVATAR] = std::make_unique("AVATAR", "https://media.printables.com/media/", EVT_UA_AVATAR_SUCCESS, EVT_UA_FAIL); - m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_DATA_FROM_UUID] = std::make_unique("USER_ACCOUNT_ACTION_CONNECT_DATA_FROM_UUID", "https://connect.prusa3d.com/app/printers/", EVT_UA_PRUSACONNECT_PRINTER_DATA_SUCCESS, EVT_UA_FAIL); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_REFRESH_TOKEN] = std::make_unique("EXCHANGE_TOKENS", sc.account_token_url()); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CODE_FOR_TOKEN] = std::make_unique("EXCHANGE_TOKENS", sc.account_token_url()); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_USER_ID] = std::make_unique("USER_ID", sc.account_me_url(), EVT_UA_ID_USER_SUCCESS, EVT_UA_RESET); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_TEST_ACCESS_TOKEN] = std::make_unique("TEST_ACCESS_TOKEN", sc.account_me_url(), EVT_UA_ID_USER_SUCCESS, EVT_UA_FAIL); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_TEST_CONNECTION] = std::make_unique("TEST_CONNECTION", sc.account_me_url(), wxEVT_NULL, EVT_UA_RESET); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_STATUS] = std::make_unique("CONNECT_STATUS", sc.connect_status_url(), EVT_UA_PRUSACONNECT_STATUS_SUCCESS, EVT_UA_FAIL); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_PRINTER_MODELS] = std::make_unique("CONNECT_PRINTER_MODELS", sc.connect_printer_list_url(), EVT_UA_PRUSACONNECT_PRINTER_MODELS_SUCCESS, EVT_UA_FAIL); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_AVATAR] = std::make_unique("AVATAR", sc.media_url(), EVT_UA_AVATAR_SUCCESS, EVT_UA_FAIL); + m_actions[UserAccountActionID::USER_ACCOUNT_ACTION_CONNECT_DATA_FROM_UUID] = std::make_unique("USER_ACCOUNT_ACTION_CONNECT_DATA_FROM_UUID", sc.connect_printers_url(), EVT_UA_PRUSACONNECT_PRINTER_DATA_SUCCESS, EVT_UA_FAIL); } ~UserAccountSession() { @@ -162,7 +164,7 @@ private: void cancel_queue(); void code_exchange_fail_callback(const std::string& body); void token_success_callback(const std::string& body); - std::string client_id() const { return "oamhmhZez7opFosnwzElIgE2oGgI2iJORSkw587O"; } + std::string client_id() const { return Utils::ServiceConfig::instance().account_client_id(); } // false prevents action queu to be processed - no communication is done // sets to true by init_with_code or enqueue_action call diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index 030ac7b15a..9d37cb53e0 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -108,6 +108,10 @@ WebViewPanel::WebViewPanel(wxWindow *parent, const wxString& default_url, const // Create the webview m_browser = WebView::CreateWebView(this, /*m_default_url*/ GUI::format_wxstr("file://%1%/web/%2%.html", boost::filesystem::path(resources_dir()).generic_string(), m_loading_html), m_script_message_hadler_names); + if (Utils::ServiceConfig::instance().webdev_enabled()) { + m_browser->EnableContextMenu(); + m_browser->EnableAccessToDevTools(); + } if (!m_browser) { wxStaticText* text = new wxStaticText(this, wxID_ANY, _L("Failed to load a web browser.")); topsizer->Add(text, 0, wxALIGN_LEFT | wxBOTTOM, 10); @@ -576,7 +580,7 @@ void ConnectRequestHandler::on_connect_action_request_open_in_browser(const std: } ConnectWebViewPanel::ConnectWebViewPanel(wxWindow* parent) - : WebViewPanel(parent, L"https://connect.prusa3d.com/", { "_prusaSlicer" }, "connect_loading") + : WebViewPanel(parent, GUI::from_u8(Utils::ServiceConfig::instance().connect_url()), { "_prusaSlicer" }, "connect_loading") { //m_browser->RegisterHandler(wxSharedPtr(new WebViewHandler("https"))); @@ -862,6 +866,10 @@ WebViewDialog::WebViewDialog(wxWindow* parent, const wxString& url, const wxStri // Create the webview m_browser = WebView::CreateWebView(this, GUI::format_wxstr("file://%1%/web/%2%.html", boost::filesystem::path(resources_dir()).generic_string(), m_loading_html), m_script_message_hadler_names); + if (Utils::ServiceConfig::instance().webdev_enabled()) { + m_browser->EnableContextMenu(); + m_browser->EnableAccessToDevTools(); + } if (!m_browser) { wxStaticText* text = new wxStaticText(this, wxID_ANY, _L("Failed to load a web browser.")); topsizer->Add(text, 0, wxALIGN_LEFT | wxBOTTOM, 10); @@ -1354,7 +1362,7 @@ void LoginWebViewDialog::on_dpi_changed(const wxRect &suggested_rect) LogoutWebViewDialog::LogoutWebViewDialog(wxWindow *parent) : WebViewDialog(parent - , L"https://account.prusa3d.com/logout" + , GUI::from_u8(Utils::ServiceConfig::instance().account_logout_url()) , _L("Logout dialog") , wxSize(std::max(parent->GetClientSize().x / 4, 10 * wxGetApp().em_unit()), std::max(parent->GetClientSize().y / 4, 10 * wxGetApp().em_unit())) , {}) diff --git a/src/slic3r/Utils/PrusaConnect.cpp b/src/slic3r/Utils/PrusaConnect.cpp index 2fad12c76a..42cee4f1a7 100644 --- a/src/slic3r/Utils/PrusaConnect.cpp +++ b/src/slic3r/Utils/PrusaConnect.cpp @@ -78,7 +78,7 @@ bool PrusaConnectNew::test(wxString& curl_msg) const { // Test is not used by upload and gets list of files on a device. const std::string name = get_name(); - std::string url = GUI::format("https://connect.prusa3d.com/app/teams/%1%/files?printer_uuid=%2%", m_team_id, m_uuid); + std::string url = GUI::format("%1%/%2%/files?printer_uuid=%3%", Utils::ServiceConfig::instance().connect_teams_url(), m_team_id, m_uuid); const std::string access_token = GUI::wxGetApp().plater()->get_user_account()->get_access_token(); BOOST_LOG_TRIVIAL(info) << GUI::format("%1%: Get files/raw at: %2%", name, url); bool res = true; diff --git a/src/slic3r/Utils/PrusaConnect.hpp b/src/slic3r/Utils/PrusaConnect.hpp index d60d28bf5e..9127f5b16e 100644 --- a/src/slic3r/Utils/PrusaConnect.hpp +++ b/src/slic3r/Utils/PrusaConnect.hpp @@ -2,6 +2,7 @@ #define slic3r_PrusaConnect_hpp_ #include "PrintHost.hpp" +#include "ServiceConfig.hpp" #include "libslic3r/PrintConfig.hpp" /* #include @@ -32,7 +33,7 @@ public: bool has_auto_discovery() const override { return true; } bool can_test() const override { return true; } PrintHostPostUploadActions get_post_upload_actions() const override { return PrintHostPostUploadAction::StartPrint | PrintHostPostUploadAction::QueuePrint; } - std::string get_host() const override { return "https://connect.prusa3d.com"; } + std::string get_host() const override { return Utils::ServiceConfig::instance().connect_url(); } bool get_storage(wxArrayString& storage_path, wxArrayString& storage_name) const override; //const std::string& get_apikey() const { return m_apikey; } //const std::string& get_cafile() const { return m_cafile; } diff --git a/src/slic3r/Utils/ServiceConfig.cpp b/src/slic3r/Utils/ServiceConfig.cpp new file mode 100644 index 0000000000..2690cc343a --- /dev/null +++ b/src/slic3r/Utils/ServiceConfig.cpp @@ -0,0 +1,44 @@ +#include "ServiceConfig.hpp" + +#include + +namespace Slic3r::Utils { + +void update_from_env(std::string& dest, const char* env_name, bool remove_trailing_slash=false) +{ + const char* env_val = std::getenv(env_name); + if (env_val == nullptr || std::strlen(env_val) == 0) + return; + + dest = env_val; + if (remove_trailing_slash) { + auto idx = dest.find_last_not_of('/'); + if (idx != std::string::npos && idx + 1 < dest.length()) + dest.erase(idx + 1, std::string::npos); + } +} + +ServiceConfig::ServiceConfig() + : m_connect_url("https://connect.prusa3d.com") + , m_account_url("https://account.prusa3d.com") + , m_account_client_id("oamhmhZez7opFosnwzElIgE2oGgI2iJORSkw587O") + , m_media_url("https://media.printables.com") + , m_preset_repo_url("https://preset-repo-api.prusa3d.com") { +#ifdef SLIC3R_REPO_URL + m_preset_repo_url = SLIC3R_REPO_URL; +#endif + + update_from_env(m_connect_url, "PRUSA_CONNECT_URL", true); + update_from_env(m_account_url, "PRUSA_ACCOUNT_URL", true); + update_from_env(m_account_client_id, "PRUSA_ACCOUNT_CLIENT_ID"); + update_from_env(m_media_url, "PRUSA_MEDIA_URL", true); + update_from_env(m_preset_repo_url, "PRUSA_PRESET_REPO_URL", true); +} + +ServiceConfig& ServiceConfig::instance() +{ + static ServiceConfig inst; + return inst; +} + +} diff --git a/src/slic3r/Utils/ServiceConfig.hpp b/src/slic3r/Utils/ServiceConfig.hpp new file mode 100644 index 0000000000..4dd6b6692e --- /dev/null +++ b/src/slic3r/Utils/ServiceConfig.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include + +namespace Slic3r::Utils { + +class ServiceConfig { + ServiceConfig(); +public: + const std::string& connect_url() const { return m_connect_url; } + + std::string connect_status_url() const { return m_connect_url + "/slicer/status"; } + std::string connect_printer_list_url() const { return m_connect_url + "/slicer/printer_list"; } + std::string connect_printers_url() const { return m_connect_url + "/app/printers/"; } + std::string connect_teams_url() const { return m_connect_url + "/app/teams"; } + + const std::string& account_url() const { return m_account_url; } + const std::string& account_client_id() const { return m_account_client_id; } + + std::string account_token_url() const { return m_account_url + "/o/token/"; } + std::string account_me_url() const { return m_account_url + "/api/v1/me/"; } + std::string account_logout_url() const { return m_account_url + "/logout"; } + + std::string media_url() const { return m_media_url + "/media/"; } + + const std::string& preset_repo_url() const { return m_preset_repo_url; } + std::string preset_repo_repos_url() const { return m_preset_repo_url + "/v1/repos"; } + + bool webdev_enabled() const { return m_webdev_enabled; } + void set_webdev_enabled(bool enabled) { m_webdev_enabled = enabled; } + + static ServiceConfig& instance(); +private: + std::string m_connect_url; + std::string m_account_url; + std::string m_account_client_id; + std::string m_media_url; + std::string m_preset_repo_url; + bool m_webdev_enabled{false}; +}; + +} From 38939b070344b5eba2b5fd52d91b3d3ab988b922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ba=C5=99tip=C3=A1n?= Date: Wed, 3 Jul 2024 15:27:14 +0200 Subject: [PATCH 2/2] Online service configuration: fixed URL in connect select pritner --- src/slic3r/GUI/WebViewDialog.cpp | 8 +++++--- src/slic3r/Utils/ServiceConfig.hpp | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index 9d37cb53e0..cc2fe608b2 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -649,12 +649,14 @@ wxString ConnectWebViewPanel::get_login_script(bool refresh) .then(function (resp) { console.log('Login resp', resp); resp.text() - .then(function (json) { console.log('Login resp body', json); }) + .then(function (json) { console.log('Login resp body', json); return json; }) .then(function (body) { if (resp.status >= 400) errorHandler({status: resp.status, body}); }); }) - .catch(errorHandler); + .catch(function (err){ + errorHandler({message: err.message, stack: err.stack}); + }); )", #endif access_token @@ -1226,7 +1228,7 @@ void WebViewDialog::EndModal(int retCode) PrinterPickWebViewDialog::PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val) : WebViewDialog(parent - , L"https://connect.prusa3d.com/slicer-select-printer" + , GUI::from_u8(Utils::ServiceConfig::instance().connect_select_printer_url()) , _L("Choose a printer") , wxSize(std::max(parent->GetClientSize().x / 2, 100 * wxGetApp().em_unit()), std::max(parent->GetClientSize().y / 2, 50 * wxGetApp().em_unit())) ,{"_prusaSlicer"} diff --git a/src/slic3r/Utils/ServiceConfig.hpp b/src/slic3r/Utils/ServiceConfig.hpp index 4dd6b6692e..fdcf40d034 100644 --- a/src/slic3r/Utils/ServiceConfig.hpp +++ b/src/slic3r/Utils/ServiceConfig.hpp @@ -11,6 +11,7 @@ public: std::string connect_status_url() const { return m_connect_url + "/slicer/status"; } std::string connect_printer_list_url() const { return m_connect_url + "/slicer/printer_list"; } + std::string connect_select_printer_url() const { return m_connect_url + "/slicer-select-printer"; } std::string connect_printers_url() const { return m_connect_url + "/app/printers/"; } std::string connect_teams_url() const { return m_connect_url + "/app/teams"; }