From e39f867af4a4d25191e2a154db4665fc7a9b18ef Mon Sep 17 00:00:00 2001 From: David Kocik Date: Wed, 26 Jun 2024 12:03:05 +0200 Subject: [PATCH 1/5] Wizard login page error showing custom html page --- src/slic3r/GUI/ConfigWizardWebViewPage.cpp | 32 ++++++++++++++++++++-- src/slic3r/GUI/ConfigWizardWebViewPage.hpp | 3 ++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/ConfigWizardWebViewPage.cpp b/src/slic3r/GUI/ConfigWizardWebViewPage.cpp index 79804aa21f..d05a1e5193 100644 --- a/src/slic3r/GUI/ConfigWizardWebViewPage.cpp +++ b/src/slic3r/GUI/ConfigWizardWebViewPage.cpp @@ -47,7 +47,7 @@ ConfigWizardWebViewPage::ConfigWizardWebViewPage(ConfigWizard *parent) // Connect the webview events Bind(wxEVT_WEBVIEW_ERROR, &ConfigWizardWebViewPage::on_error, this, m_browser->GetId()); Bind(wxEVT_WEBVIEW_NAVIGATING, &ConfigWizardWebViewPage::on_navigation_request, this, m_browser->GetId()); - + Bind(wxEVT_IDLE, &ConfigWizardWebViewPage::on_idle, this); } bool ConfigWizardWebViewPage::login_changed() @@ -85,9 +85,37 @@ case type: \ WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER); } - BOOST_LOG_TRIVIAL(error) << "WebViewPanel error: " << category; + BOOST_LOG_TRIVIAL(error) << "ConfigWizardWebViewPage error: " << category; + load_error_page(); } +void ConfigWizardWebViewPage::load_error_page() { + if (!m_browser) + return; + + m_browser->Stop(); + m_load_error_page = true; +} + +void ConfigWizardWebViewPage::on_idle(wxIdleEvent &WXUNUSED(evt)) { + if (!m_browser) + return; + if (m_browser->IsBusy()) { + wxSetCursor(wxCURSOR_ARROWWAIT); + } else { + wxSetCursor(wxNullCursor); + + if (m_load_error_page) { + m_load_error_page = false; + m_browser->LoadURL(GUI::format_wxstr( + "file://%1%/web/connection_failed.html", + boost::filesystem::path(resources_dir()).generic_string() + )); + } + } +} + + void ConfigWizardWebViewPage::on_navigation_request(wxWebViewEvent &evt) { wxString url = evt.GetURL(); diff --git a/src/slic3r/GUI/ConfigWizardWebViewPage.hpp b/src/slic3r/GUI/ConfigWizardWebViewPage.hpp index c05e6ebfeb..23097a534b 100644 --- a/src/slic3r/GUI/ConfigWizardWebViewPage.hpp +++ b/src/slic3r/GUI/ConfigWizardWebViewPage.hpp @@ -49,6 +49,8 @@ public: void on_error(wxWebViewEvent &evt); void on_navigation_request(wxWebViewEvent &evt); + void on_idle(wxIdleEvent &evt); + void load_error_page(); // returns true if logged in - wizard needs to update repos bool login_changed(); @@ -57,6 +59,7 @@ private: UserAccount *p_user_account{nullptr}; wxBoxSizer *m_browser_sizer{nullptr}; wxStaticText *m_text{nullptr}; + bool m_load_error_page{false}; }; }} // namespace Slic3r::GUI From c29e70d42987036371de73eb68cf7d73675de3c3 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Tue, 25 Jun 2024 13:05:00 +0200 Subject: [PATCH 2/5] Resize login dialog --- src/slic3r/GUI/WebViewDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index f9f64fd382..5df645a28a 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -1316,8 +1316,8 @@ void PrinterPickWebViewDialog::request_compatible_printers_SLA() LoginWebViewDialog::LoginWebViewDialog(wxWindow *parent, std::string &ret_val, const wxString& url) : WebViewDialog(parent , url - , _L("Log in dialog") - , wxSize(parent->GetClientSize().x / 3, parent->GetClientSize().y / 4 * 3) + , _L("Log in dialog"), + wxSize(50 * wxGetApp().em_unit(), 80 * wxGetApp().em_unit()) , {}) , m_ret_val(ret_val) { From 1689918a3e5ec847fe264ed4cc1307061fdbcd95 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Tue, 25 Jun 2024 15:57:45 +0200 Subject: [PATCH 3/5] DPIDialog as base class WebViewDialog. --- src/slic3r/GUI/WebViewDialog.cpp | 22 +++++++++++++++++++++- src/slic3r/GUI/WebViewDialog.hpp | 6 +++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index 5df645a28a..8b5066fa14 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -820,7 +820,7 @@ void PrinterWebViewPanel::sys_color_changed() } WebViewDialog::WebViewDialog(wxWindow* parent, const wxString& url, const wxString& dialog_name, const wxSize& size, const std::vector& message_handler_names, const std::string& loading_html/* = "loading"*/) - : wxDialog(parent, wxID_ANY, dialog_name, wxDefaultPosition, size, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + : DPIDialog(parent, wxID_ANY, dialog_name, wxDefaultPosition, size, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) , m_loading_html(loading_html) , m_script_message_hadler_names (message_handler_names) { @@ -1313,6 +1313,18 @@ void PrinterPickWebViewDialog::request_compatible_printers_SLA() wxString script = GUI::format_wxstr("window._prusaConnect_v1.requestCompatiblePrinter(%1%)", request); run_script(script); } +void PrinterPickWebViewDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + wxWindow *parent = GetParent(); + const wxSize &size = wxSize( + std::max(parent->GetClientSize().x / 2, 100 * wxGetApp().em_unit()), + std::max(parent->GetClientSize().y / 2, 50 * wxGetApp().em_unit()) + ); + SetMinSize(size); + Fit(); + Refresh(); +} + LoginWebViewDialog::LoginWebViewDialog(wxWindow *parent, std::string &ret_val, const wxString& url) : WebViewDialog(parent , url @@ -1332,6 +1344,13 @@ void LoginWebViewDialog::on_navigation_request(wxWebViewEvent &evt) EndModal(wxID_OK); } } +void LoginWebViewDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + const wxSize &size = wxSize(50 * wxGetApp().em_unit(), 80 * wxGetApp().em_unit()); + SetMinSize(size); + Fit(); + Refresh(); +} LogoutWebViewDialog::LogoutWebViewDialog(wxWindow *parent) : WebViewDialog(parent @@ -1342,6 +1361,7 @@ LogoutWebViewDialog::LogoutWebViewDialog(wxWindow *parent) { Centre(); } + void LogoutWebViewDialog::on_loaded(wxWebViewEvent &evt) { EndModal(wxID_OK); diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 7c8d6ea33e..90ae1c8ccc 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -7,6 +7,7 @@ #include #include +#include "GUI_Utils.hpp" #include "UserAccountSession.hpp" #ifdef DEBUG_URL_PANEL @@ -102,7 +103,7 @@ protected: }; -class WebViewDialog : public wxDialog +class WebViewDialog : public DPIDialog { public: WebViewDialog(wxWindow* parent, const wxString& url, const wxString& dialog_name, const wxSize& size, const std::vector& message_handler_names, const std::string& loading_html = "loading"); @@ -247,6 +248,7 @@ protected: void request_compatible_printers_FFF(); void request_compatible_printers_SLA(); void run_script_bridge(const wxString& script) override { run_script(script); } + void on_dpi_changed(const wxRect &suggested_rect) override; private: std::string& m_ret_val; @@ -263,6 +265,7 @@ class LoginWebViewDialog : public WebViewDialog public: LoginWebViewDialog(wxWindow *parent, std::string &ret_val, const wxString& url); void on_navigation_request(wxWebViewEvent &evt) override; + void on_dpi_changed(const wxRect &suggested_rect) override; private: std::string &m_ret_val; @@ -273,6 +276,7 @@ class LogoutWebViewDialog : public WebViewDialog public: LogoutWebViewDialog(wxWindow* parent); void on_loaded(wxWebViewEvent &evt) override; + void on_dpi_changed(const wxRect &suggested_rect) override {} }; } // GUI From 4f317e540a460cf49fcb9df19eac47af8681b5e6 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Wed, 26 Jun 2024 12:10:29 +0200 Subject: [PATCH 4/5] Remove "choose_account" option from login url. --- src/slic3r/GUI/UserAccountCommunication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/UserAccountCommunication.cpp b/src/slic3r/GUI/UserAccountCommunication.cpp index 0b32f42082..47af20d5f8 100644 --- a/src/slic3r/GUI/UserAccountCommunication.cpp +++ b/src/slic3r/GUI/UserAccountCommunication.cpp @@ -307,7 +307,7 @@ wxString UserAccountCommunication::get_login_redirect_url() { BOOST_LOG_TRIVIAL(info) << "code verifier: " << m_code_verifier; BOOST_LOG_TRIVIAL(info) << "code challenge: " << code_challenge; - wxString url = GUI::format_wxstr(L"%1%/o/authorize/?embed=1&client_id=%2%&response_type=code&code_challenge=%3%&code_challenge_method=S256&scope=basic_info&redirect_uri=%4%&choose_account=1&language=%5%", AUTH_HOST, CLIENT_ID, code_challenge, REDIRECT_URI, language); + wxString url = GUI::format_wxstr(L"%1%/o/authorize/?embed=1&client_id=%2%&response_type=code&code_challenge=%3%&code_challenge_method=S256&scope=basic_info&redirect_uri=%4%&language=%5%", AUTH_HOST, CLIENT_ID, code_challenge, REDIRECT_URI, language); return url; } From 24ce924ca6d6a9488292a82a4e3d2d4fce53899b Mon Sep 17 00:00:00 2001 From: David Kocik Date: Wed, 26 Jun 2024 15:32:31 +0200 Subject: [PATCH 5/5] Wizard login page fix. --- src/slic3r/GUI/ConfigWizardWebViewPage.cpp | 6 ++++-- src/slic3r/GUI/ConfigWizardWebViewPage.hpp | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/ConfigWizardWebViewPage.cpp b/src/slic3r/GUI/ConfigWizardWebViewPage.cpp index d05a1e5193..87e7f6ccbe 100644 --- a/src/slic3r/GUI/ConfigWizardWebViewPage.cpp +++ b/src/slic3r/GUI/ConfigWizardWebViewPage.cpp @@ -92,7 +92,8 @@ case type: \ void ConfigWizardWebViewPage::load_error_page() { if (!m_browser) return; - + if (m_vetoed) + return; m_browser->Stop(); m_load_error_page = true; } @@ -105,7 +106,7 @@ void ConfigWizardWebViewPage::on_idle(wxIdleEvent &WXUNUSED(evt)) { } else { wxSetCursor(wxNullCursor); - if (m_load_error_page) { + if (!m_vetoed && m_load_error_page) { m_load_error_page = false; m_browser->LoadURL(GUI::format_wxstr( "file://%1%/web/connection_failed.html", @@ -121,6 +122,7 @@ void ConfigWizardWebViewPage::on_navigation_request(wxWebViewEvent &evt) wxString url = evt.GetURL(); if (url.starts_with(L"prusaslicer")) { evt.Veto(); + m_vetoed = true; wxPostEvent(wxGetApp().plater(), Event(EVT_LOGIN_VIA_WIZARD, into_u8(url))); } } diff --git a/src/slic3r/GUI/ConfigWizardWebViewPage.hpp b/src/slic3r/GUI/ConfigWizardWebViewPage.hpp index 23097a534b..8ad6638063 100644 --- a/src/slic3r/GUI/ConfigWizardWebViewPage.hpp +++ b/src/slic3r/GUI/ConfigWizardWebViewPage.hpp @@ -60,6 +60,7 @@ private: wxBoxSizer *m_browser_sizer{nullptr}; wxStaticText *m_text{nullptr}; bool m_load_error_page{false}; + bool m_vetoed{false}; }; }} // namespace Slic3r::GUI