diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index 1536da840f..0b3e989e8b 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -760,7 +760,7 @@ PingCodeBindDialog::~PingCodeBindDialog() { json j = json::parse(str.utf8_string()); if (j.contains("err_code")) { int error_code = j["err_code"].get(); - extra = wxGetApp().get_hms_query()->query_print_error_msg(error_code); + wxGetApp().get_hms_query()->query_print_error_msg(error_code, extra); } } catch (...) { diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index be5effc74c..f98b9fbb8c 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -243,14 +243,15 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ return wxEmptyString; } -wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_code) +bool HMSQuery::_query_error_msg(wxString &error_msg, std::string error_code, std::string lang_code) { if (m_hms_info_json.contains("device_error")) { if (m_hms_info_json["device_error"].contains(lang_code)) { for (auto item = m_hms_info_json["device_error"][lang_code].begin(); item != m_hms_info_json["device_error"][lang_code].end(); item++) { if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == error_code) { if (item->contains("intro")) { - return wxString::FromUTF8((*item)["intro"].get()); + error_msg = wxString::FromUTF8((*item)["intro"].get()); + return true; } } } @@ -263,7 +264,8 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod for (auto item = lang.begin(); item != lang.end(); item++) { if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == error_code) { if (item->contains("intro")) { - return wxString::FromUTF8((*item)["intro"].get()); + error_msg = wxString::FromUTF8((*item)["intro"].get()); + return true; } } } @@ -273,9 +275,11 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod } else { BOOST_LOG_TRIVIAL(info) << "device_error is not exists"; - return wxEmptyString; + error_msg = wxEmptyString; + return false; } - return wxEmptyString; + error_msg = wxEmptyString; + return false; } wxString HMSQuery::_query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action) @@ -305,12 +309,12 @@ wxString HMSQuery::_query_error_url_action(std::string long_error_code, std::str } -wxString HMSQuery::query_print_error_msg(int print_error) +bool HMSQuery::query_print_error_msg(int print_error, wxString &error_msg) { char buf[32]; ::sprintf(buf, "%08X", print_error); std::string lang_code = HMSQuery::hms_language_code(); - return _query_error_msg(std::string(buf), lang_code); + return _query_error_msg(error_msg, std::string(buf), lang_code); } wxString HMSQuery::query_print_error_url_action(int print_error, std::string dev_id, std::vector& button_action) diff --git a/src/slic3r/GUI/HMS.hpp b/src/slic3r/GUI/HMS.hpp index 01df19ed38..f2455f3c5f 100644 --- a/src/slic3r/GUI/HMS.hpp +++ b/src/slic3r/GUI/HMS.hpp @@ -28,13 +28,13 @@ protected: int save_to_local(std::string lang, std::string hms_type,json save_json); std::string get_hms_file(std::string hms_type, std::string lang = std::string("en")); wxString _query_hms_msg(std::string long_error_code, std::string lang_code = std::string("en")); - wxString _query_error_msg(std::string long_error_code, std::string lang_code = std::string("en")); + bool _query_error_msg(wxString &error_msg, std::string long_error_code, std::string lang_code = std::string("en")); wxString _query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action); public: HMSQuery() {} int check_hms_info(); wxString query_hms_msg(std::string long_error_code); - wxString query_print_error_msg(int print_error); + bool query_print_error_msg(int print_error, wxString &error_msg); wxString query_print_error_url_action(int print_error, std::string dev_id, std::vector& button_action); static std::string hms_language_code(); static std::string build_query_params(std::string& lang); diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 5809b8be7e..fa4057214c 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -105,7 +105,9 @@ void BindJob::process(Ctl &ctl) try { error_code = stoi(result_info); - result_info = wxGetApp().get_hms_query()->query_print_error_msg(error_code).ToStdString(); + wxString error_msg; + wxGetApp().get_hms_query()->query_print_error_msg(error_code, error_msg); + result_info = error_msg.ToStdString(); } catch (...) { ; diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 877992a89a..241c890cd3 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -896,7 +896,7 @@ PrintErrorDialog::PrintErrorDialog(wxWindow* parent, wxWindowID id, const wxStri bottom_sizer->Add(m_sizer_button, 0, wxEXPAND | wxRIGHT | wxLEFT, 0); - m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(20)); m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(10)); m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); @@ -952,20 +952,34 @@ void PrintErrorDialog::on_webrequest_state(wxWebRequestEvent& evt) } } -void PrintErrorDialog::update_text_image(wxString text, wxString image_url) +void PrintErrorDialog::update_text_image(const wxString& text, const wxString& error_code, const wxString& image_url) { //if (!m_sizer_text_release_note) { // m_sizer_text_release_note = new wxBoxSizer(wxVERTICAL); //} wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); - + wxString error_code_msg = error_code; + if (!error_code.IsEmpty()) { + wxDateTime now = wxDateTime::Now(); + wxString show_time = now.Format("%H%M%d"); + error_code_msg = wxString::Format("[%S %S]", error_code, show_time); + } + if (!m_staticText_release_note) { m_staticText_release_note = new Label(m_vebview_release_note, text, LB_AUTO_WRAP); sizer_text_release_note->Add(m_error_prompt_pic_static, 0, wxALIGN_CENTER, FromDIP(5)); + sizer_text_release_note->AddSpacer(10); sizer_text_release_note->Add(m_staticText_release_note, 0, wxALIGN_CENTER , FromDIP(5)); - m_vebview_release_note->SetSizer(sizer_text_release_note); } + if (!m_staticText_error_code) { + m_staticText_error_code = new Label(m_vebview_release_note, error_code_msg, LB_AUTO_WRAP); + sizer_text_release_note->AddSpacer(5); + sizer_text_release_note->Add(m_staticText_error_code, 0, wxALIGN_CENTER, FromDIP(5)); + } + + m_vebview_release_note->SetSizer(sizer_text_release_note); + if (!image_url.empty()) { web_request = wxWebSession::GetDefault().CreateRequest(this, image_url); BOOST_LOG_TRIVIAL(trace) << "monitor: create new webrequest, state = " << web_request.GetState() << ", url = " << image_url; @@ -982,6 +996,9 @@ void PrintErrorDialog::update_text_image(wxString text, wxString image_url) m_staticText_release_note->SetMaxSize(wxSize(FromDIP(300), -1)); m_staticText_release_note->SetMinSize(wxSize(FromDIP(300), -1)); m_staticText_release_note->SetLabelText(text); + m_staticText_error_code->SetMaxSize(wxSize(FromDIP(300), -1)); + m_staticText_error_code->SetMinSize(wxSize(FromDIP(300), -1)); + m_staticText_error_code->SetLabelText(error_code_msg); m_vebview_release_note->Layout(); auto text_size = m_staticText_release_note->GetBestSize(); @@ -1048,7 +1065,8 @@ void PrintErrorDialog::update_title_style(wxString title, std::vector butto } -void PrintErrorDialog::init_button(PrintErrorButton style,wxString buton_text) { +void PrintErrorDialog::init_button(PrintErrorButton style,wxString buton_text) +{ Button* print_error_button = new Button(this, buton_text); print_error_button->SetBackgroundColor(btn_bg_white); print_error_button->SetBorderColor(wxColour(38, 46, 48)); @@ -1062,8 +1080,8 @@ void PrintErrorDialog::init_button(PrintErrorButton style,wxString buton_text) { } -void PrintErrorDialog::init_button_list() { - +void PrintErrorDialog::init_button_list() +{ init_button(RESUME_PRINTING, _L("Resume Printing")); m_button_list[RESUME_PRINTING]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index 75c4c24edb..7923c0fa28 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -189,7 +189,7 @@ public: const wxSize& size = wxDefaultSize, long style = wxCLOSE_BOX | wxCAPTION ); - void update_text_image(wxString text, wxString image_url); + void update_text_image(const wxString& text, const wxString& error_code,const wxString& image_url); void on_show(); void on_hide(); void update_title_style(wxString title, std::vector style, wxWindow* parent = nullptr); @@ -206,6 +206,7 @@ public: wxWebRequest web_request; wxStaticBitmap* m_error_prompt_pic_static; Label* m_staticText_release_note{ nullptr }; + Label* m_staticText_error_code{ nullptr }; wxBoxSizer* m_sizer_main; wxBoxSizer* m_sizer_button; wxScrolledWindow* m_vebview_release_note{ nullptr }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 8a7a37c17a..fa2b6b639f 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2176,9 +2176,9 @@ void StatusPanel::show_recenter_dialog() { obj->command_go_home(); } -void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::string print_error_str, wxString image_url, std::vector used_button) +void StatusPanel::show_error_message(MachineObject *obj, bool is_exist, wxString msg, std::string print_error_str, wxString image_url, std::vector used_button) { - if (msg.IsEmpty()) { + if (is_exist && msg.IsEmpty()) { error_info_reset(); } else { m_project_task_panel->show_error_msg(msg); @@ -2190,7 +2190,7 @@ void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::stri } m_print_error_dlg->update_title_style(_L("Error"), used_button, this); - m_print_error_dlg->update_text_image(msg, image_url); + m_print_error_dlg->update_text_image(msg, print_error_str, image_url); m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { if (obj) { obj->command_clean_print_error(obj->subtask_id_, obj->print_error); @@ -2212,6 +2212,11 @@ void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::stri auto it_resume = std::find(message_containing_resume.begin(), message_containing_resume.end(), print_error_str); BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; + + wxDateTime now = wxDateTime::Now(); + wxString show_time = now.Format("%H%M%d"); + wxString error_code_msg = wxString::Format("%S\n[%S %S]", msg, print_error_str, show_time); + if (m_print_error_dlg_no_action == nullptr) { m_print_error_dlg_no_action = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); } @@ -2231,7 +2236,7 @@ void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::stri else { m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); } - m_print_error_dlg_no_action->update_text(msg); + m_print_error_dlg_no_action->update_text(error_code_msg); m_print_error_dlg_no_action->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { if (obj) { obj->command_clean_print_error(obj->subtask_id_, obj->print_error); @@ -2254,7 +2259,7 @@ void StatusPanel::update_error_message() { if (obj->print_error <= 0) { before_error_code = obj->print_error; - show_error_message(obj, wxEmptyString); + show_error_message(obj, true, wxEmptyString); return; } else if (before_error_code != obj->print_error && obj->print_error != skip_print_error) { before_error_code = obj->print_error; @@ -2263,27 +2268,17 @@ void StatusPanel::update_error_message() char buf[32]; ::sprintf(buf, "%08X", obj->print_error); std::string print_error_str = std::string(buf); - if (print_error_str.size() > 4) { - print_error_str.insert(4, " "); - } + if (print_error_str.size() > 4) { print_error_str.insert(4, " "); } - wxString error_msg = wxGetApp().get_hms_query()->query_print_error_msg(obj->print_error); + wxString error_msg; + bool is_errocode_exist = wxGetApp().get_hms_query()->query_print_error_msg(obj->print_error, error_msg); std::vector used_button; - wxString error_image_url = wxGetApp().get_hms_query()->query_print_error_url_action(obj->print_error,obj->dev_id, used_button); + wxString error_image_url = wxGetApp().get_hms_query()->query_print_error_url_action(obj->print_error, obj->dev_id, used_button); // special case - if (print_error_str == "0300 8003" || print_error_str == "0300 8002" || print_error_str == "0300 800A") + if (print_error_str == "0300 8003" || print_error_str == "0300 8002" || print_error_str == "0300 800A") { used_button.emplace_back(PrintErrorDialog::PrintErrorButton::JUMP_TO_LIVEVIEW); - if (!error_msg.IsEmpty()) { - wxDateTime now = wxDateTime::Now(); - wxString show_time = now.Format("%Y-%m-%d %H:%M:%S"); - - error_msg = wxString::Format("%s\n[%s %s]", - error_msg, - print_error_str, show_time); - show_error_message(obj, error_msg, print_error_str,error_image_url,used_button); - } else { - BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error; } + show_error_message(obj, is_errocode_exist, error_msg, print_error_str, error_image_url, used_button); } } } diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 517367d7f3..e34bf908aa 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -527,7 +527,8 @@ protected: void on_subtask_pause_resume(wxCommandEvent &event); void on_subtask_abort(wxCommandEvent &event); void on_print_error_clean(wxCommandEvent &event); - void show_error_message(MachineObject* obj, wxString msg, std::string print_error_str = "",wxString image_url="",std::vector used_button=std::vector()); + void show_error_message( + MachineObject *obj, bool is_exist, wxString msg, std::string print_error_str = "", wxString image_url = "", std::vector used_button = std::vector()); void error_info_reset(); void show_recenter_dialog();