From 07dbc5d7f01fbb9cd0aceeda340f841deded349b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ba=C5=99tip=C3=A1n?= Date: Fri, 21 Jun 2024 10:58:52 +0200 Subject: [PATCH] WebViewPanel: Javascript init flow error reporting (WIP) --- src/slic3r/GUI/GUI_Init.cpp | 3 +- src/slic3r/GUI/WebViewDialog.cpp | 47 ++++++++++++++++++++++---------- src/slic3r/GUI/WebViewDialog.hpp | 1 + 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp index 2c74971ce2..155bdc92c0 100644 --- a/src/slic3r/GUI/GUI_Init.cpp +++ b/src/slic3r/GUI/GUI_Init.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #if __APPLE__ #include @@ -52,7 +53,7 @@ int GUI_Run(GUI_InitParams ¶ms) #ifdef SLIC3R_LOG_TO_FILE auto sink = boost::log::add_file_log(get_default_datadir() + "/slicer.log"); sink->locked_backend()->auto_flush(); - boost::log::core::get()->set_filter(boost::log::trivial::severity >= boost::log::trivial::info); + boost::log::add_console_log(); #endif // SLIC3R_LOG_TO_FILE try { GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index bbeedac62c..df8d394865 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -7,7 +7,7 @@ #include "slic3r/GUI/UserAccount.hpp" #include "slic3r/GUI/format.hpp" #include "slic3r/GUI/WebView.hpp" - +#include "slic3r/GUI/MsgDialog.hpp" #include @@ -327,7 +327,7 @@ void WebViewPanel::run_script(const wxString& javascript) // Remember the script we run in any case, so the next time the user opens // the "Run Script" dialog box, it is shown there for convenient updating. m_javascript = javascript; - std::cout << "RunScript " << javascript << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript << "\n"; m_browser->RunScriptAsync(javascript); } @@ -363,7 +363,7 @@ void WebViewPanel::on_add_user_script(wxCommandEvent& WXUNUSED(evt)) return; const wxString& javascript = dialog.GetValue(); - std::cout << "RunScript " << javascript << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript << "\n"; if (!m_browser->AddUserScript(javascript)) wxLogError("Could not add user script"); } @@ -630,18 +630,21 @@ wxString ConnectWebViewPanel::get_login_script(bool refresh) R"( console.log('Preparing login'); function errorHandler(err) { - window._prusaSlicer.postMessage({ + const msg = { action: 'ERROR', - error: err - }); + error: JSON.stringify(err), + critical: false + }; + console.error('Login error occurred', msg); + window._prusaSlicer.postMessage(msg); }; - window.fetch('/slicer/login', {method: 'POST', headers: {Authorization: 'Bearer %s'}}) + window.fetch('/slicer/loginx', {method: 'POST', headers: {Authorization: 'Bearer %s'}}) .then(function (resp) { console.log('Login resp', resp); resp.text() .then(function (json) { console.log('Login resp body', json); }) .then(function (body) { - if (resp.status >= 400) window._prusaSlicer.postMessage({action: 'ERROR', error: body}); + if (resp.status >= 400) errorHandler({status: resp.status, body}); }); }) .catch(errorHandler); @@ -655,7 +658,7 @@ wxString ConnectWebViewPanel::get_login_script(bool refresh) void ConnectWebViewPanel::on_page_will_load() { auto javascript = get_login_script(false); - std::cout << "RunScript " << javascript << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript << "\n"; m_browser->AddUserScript(javascript); } @@ -666,7 +669,7 @@ void ConnectWebViewPanel::on_user_token(UserAccountSuccessEvent& e) assert(!access_token.empty()); wxString javascript = get_login_script(true); //m_browser->AddUserScript(javascript, wxWEBVIEW_INJECT_AT_DOCUMENT_END); - std::cout << "RunScript " << javascript << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript << "\n"; m_browser->RunScriptAsync(javascript); } @@ -689,6 +692,20 @@ void ConnectWebViewPanel::on_navigation_request(wxWebViewEvent &evt) evt.Veto(); } } + +void ConnectWebViewPanel::on_connect_action_error(const std::string &message_data) +{ + ConnectRequestHandler::on_connect_action_error(message_data); + MessageDialog dialog( + this, + GUI::format_wxstr(_L("WebKit Runtime Error encountered:\n\n%s"), message_data), + "WebKit Runtime Error", + wxOK + ); + dialog.ShowModal(); + +} + void ConnectWebViewPanel::logout() { wxString script = L"window._prusaConnect_v1.logout()"; @@ -706,7 +723,7 @@ void ConnectWebViewPanel::logout() )", plater->get_user_account()->get_access_token() ); - std::cout << "RunScript " << javascript << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript << "\n"; m_browser->RunScript(javascript); } @@ -767,7 +784,7 @@ void PrinterWebViewPanel::send_api_key() key); m_browser->RemoveAllUserScripts(); - std::cout << "RunScript " << script << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << script << "\n"; m_browser->AddUserScript(script); m_browser->Reload(); @@ -793,7 +810,7 @@ void PrinterWebViewPanel::send_credentials() )", usr, psk); m_browser->RemoveAllUserScripts(); - std::cout << "RunScript " << script << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << script << "\n"; m_browser->AddUserScript(script); m_browser->Reload(); @@ -1080,7 +1097,7 @@ void WebViewDialog::on_add_user_script(wxCommandEvent& WXUNUSED(evt)) return; const wxString& javascript = dialog.GetValue(); - std::cout << "RunScript " << javascript <<"\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript <<"\n"; if (!m_browser->AddUserScript(javascript)) wxLogError("Could not add user script"); } @@ -1188,7 +1205,7 @@ void WebViewDialog::run_script(const wxString& javascript) // Remember the script we run in any case, so the next time the user opens // the "Run Script" dialog box, it is shown there for convenient updating. m_javascript = javascript; - std::cout << "RunScript " << javascript << "\n"; + BOOST_LOG_TRIVIAL(debug) << "RunScript " << javascript << "\n"; m_browser->RunScriptAsync(javascript); } diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 214944109d..7c8d6ea33e 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -207,6 +207,7 @@ protected: void on_connect_action_webapp_ready(const std::string& message_data) override {} void run_script_bridge(const wxString& script) override {run_script(script); } void on_page_will_load() override; + void on_connect_action_error(const std::string &message_data) override; private: static wxString get_login_script(bool refresh); void on_user_token(UserAccountSuccessEvent& e);