diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index ebc6b3a01..d6425ac39 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -67,11 +67,11 @@ std::string AppConfig::get_hms_host() std::string host = ""; #if !BBL_RELEASE_TO_PUBLIC if (sel == ENV_DEV_HOST) - host = "e-dev.bambulab.net"; + host = "e-dev.bambu-lab.com"; else if (sel == ENV_QAT_HOST) - host = "e-qa.bambulab.net"; + host = "e-qa.bambu-lab.com"; else if (sel == ENV_PRE_HOST) - host = "e-pre.bambulab.net"; + host = "e-pre.bambu-lab.com"; else if (sel == ENV_PRODUCT_HOST) host = "e.bambulab.com"; return host; diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index da60cf206..19a93518a 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -40,45 +40,30 @@ int get_hms_info_version(std::string& version) return result; } -int HMSQuery::download_hms_related(std::string hms_type, json* receive_json) +int HMSQuery::download_hms_info() { - std::string local_version = "0"; - load_from_local(local_version, hms_type, receive_json); AppConfig* config = wxGetApp().app_config; if (!config) return -1; std::string hms_host = wxGetApp().app_config->get_hms_host(); std::string lang; std::string query_params = HMSQuery::build_query_params(lang); - std::string url; - if (hms_type.compare(QUERY_HMS_INFO) == 0) { - url = (boost::format("https://%1%/query.php?%2%&v=%3%") % hms_host % query_params % local_version).str(); - } - else if (hms_type.compare(QUERY_HMS_ACTION) == 0) { - url = (boost::format("https://%1%/hms/GetActionImage.php?v=%2%") % hms_host % local_version).str(); - } + std::string url = (boost::format("https://%1%/query.php?%2%") % hms_host % query_params).str(); BOOST_LOG_TRIVIAL(info) << "hms: download url = " << url; + Slic3r::Http http = Slic3r::Http::get(url); - http.on_complete([this, receive_json, hms_type](std::string body, unsigned status) { + m_hms_json.clear(); + http.on_complete([this](std::string body, unsigned status) { try { json j = json::parse(body); if (j.contains("result")) { if (j["result"] == 0 && j.contains("data")) { - if (hms_type.compare(QUERY_HMS_INFO) == 0) { - (*receive_json) = j["data"]; - this->save_local = true; - } - else if (hms_type.compare(QUERY_HMS_ACTION) == 0) { - (*receive_json)["data"] = j["data"]; - this->save_local = true; - } + this->m_hms_json = j["data"]; if (j.contains("ver")) - (*receive_json)["version"] = std::to_string(j["ver"].get()); - } else if (j["result"] == 201){ - BOOST_LOG_TRIVIAL(info) << "HMSQuery: HMS info is the latest version"; - }else{ - receive_json->clear(); + m_hms_json["version"] = std::to_string(j["ver"].get()); + } else { + this->m_hms_json.clear(); BOOST_LOG_TRIVIAL(info) << "HMSQuery: update hms info error = " << j["result"].get(); } } @@ -91,21 +76,19 @@ int HMSQuery::download_hms_related(std::string hms_type, json* receive_json) BOOST_LOG_TRIVIAL(error) << "HMSQuery: update hms info error = " << error << ", body = " << body << ", status = " << status; }).perform_sync(); - if (!receive_json->empty() && save_local == true) { - save_to_local(lang, hms_type, *receive_json); - save_local = false; - } + if (!m_hms_json.empty()) + save_to_local(lang); return 0; } -int HMSQuery::load_from_local(std::string& version_info, std::string hms_type, json* load_json) +int HMSQuery::load_from_local(std::string &version_info) { if (data_dir().empty()) { - version_info = "0"; + version_info = ""; BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local, data_dir() is empty"; return -1; } - std::string filename = get_hms_file(hms_type, HMSQuery::hms_language_code()); + std::string filename = get_hms_file(HMSQuery::hms_language_code()); auto hms_folder = (boost::filesystem::path(data_dir()) / "hms"); if (!fs::exists(hms_folder)) fs::create_directory(hms_folder); @@ -114,9 +97,9 @@ int HMSQuery::load_from_local(std::string& version_info, std::string hms_type, j std::ifstream json_file(encode_path(dir_str.c_str())); try { if (json_file.is_open()) { - json_file >> (*load_json); - if ((*load_json).contains("version")) { - version_info = (*load_json)["version"].get(); + json_file >> m_hms_json; + if (m_hms_json.contains("version")) { + version_info = m_hms_json["version"].get(); return 0; } else { BOOST_LOG_TRIVIAL(warning) << "HMS: load_from_local, no version info"; @@ -124,28 +107,28 @@ int HMSQuery::load_from_local(std::string& version_info, std::string hms_type, j } } } catch(...) { - version_info = "0"; + version_info = ""; BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local failed"; return -1; } - version_info = "0"; + version_info = ""; return 0; } -int HMSQuery::save_to_local(std::string lang, std::string hms_type, json save_json) +int HMSQuery::save_to_local(std::string lang) { if (data_dir().empty()) { BOOST_LOG_TRIVIAL(error) << "HMS: save_to_local, data_dir() is empty"; return -1; } - std::string filename = get_hms_file(hms_type,lang); + std::string filename = get_hms_file(lang); auto hms_folder = (boost::filesystem::path(data_dir()) / "hms"); if (!fs::exists(hms_folder)) fs::create_directory(hms_folder); std::string dir_str = (hms_folder / filename).make_preferred().string(); std::ofstream json_file(encode_path(dir_str.c_str())); if (json_file.is_open()) { - json_file << std::setw(4) << save_json << std::endl; + json_file << std::setw(4) << m_hms_json << std::endl; json_file.close(); return 0; } @@ -181,13 +164,9 @@ std::string HMSQuery::build_query_params(std::string& lang) return query_params; } -std::string HMSQuery::get_hms_file(std::string hms_type, std::string lang) +std::string HMSQuery::get_hms_file(std::string lang) { - //return hms action filename - if (hms_type.compare(QUERY_HMS_ACTION) == 0) { - return (boost::format("hms_action.json")).str(); - } - //return hms filename + //std::string lang_code = HMSQuery::hms_language_code(); return (boost::format("hms_%1%.json") % lang).str(); } @@ -204,9 +183,9 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ if (long_error_code.empty()) return wxEmptyString; - if (m_hms_info_json.contains("device_hms")) { - if (m_hms_info_json["device_hms"].contains(lang_code)) { - for (auto item = m_hms_info_json["device_hms"][lang_code].begin(); item != m_hms_info_json["device_hms"][lang_code].end(); item++) { + if (m_hms_json.contains("device_hms")) { + if (m_hms_json["device_hms"].contains(lang_code)) { + for (auto item = m_hms_json["device_hms"][lang_code].begin(); item != m_hms_json["device_hms"][lang_code].end(); item++) { if (item->contains("ecode")) { std::string temp_string = (*item)["ecode"].get(); if (boost::to_upper_copy(temp_string) == long_error_code) { @@ -220,8 +199,8 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ } else { BOOST_LOG_TRIVIAL(error) << "hms: query_hms_msg, do not contains lang_code = " << lang_code; // return first language - if (!m_hms_info_json["device_hms"].empty()) { - for (auto lang : m_hms_info_json["device_hms"]) { + if (!m_hms_json["device_hms"].empty()) { + for (auto lang : m_hms_json["device_hms"]) { for (auto item = lang.begin(); item != lang.end(); item++) { if (item->contains("ecode")) { std::string temp_string = (*item)["ecode"].get(); @@ -244,9 +223,9 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ wxString HMSQuery::_query_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 (m_hms_json.contains("device_error")) { + if (m_hms_json["device_error"].contains(lang_code)) { + for (auto item = m_hms_json["device_error"][lang_code].begin(); item != m_hms_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()); @@ -257,8 +236,8 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod } else { BOOST_LOG_TRIVIAL(error) << "hms: query_error_msg, do not contains lang_code = " << lang_code; // return first language - if (!m_hms_info_json["device_error"].empty()) { - for (auto lang : m_hms_info_json["device_error"]) { + if (!m_hms_json["device_error"].empty()) { + for (auto lang : m_hms_json["device_error"]) { 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")) { @@ -277,33 +256,6 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod return wxEmptyString; } -wxString HMSQuery::_query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action) -{ - if (m_hms_action_json.contains("data")) { - for (auto item = m_hms_action_json["data"].begin(); item != m_hms_action_json["data"].end(); item++) { - if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == long_error_code) { - if (item->contains("device") && (boost::to_upper_copy((*item)["device"].get()) == dev_id || - (*item)["device"].get() == "default")) { - if (item->contains("actions")) { - for (auto item_actions = (*item)["actions"].begin(); item_actions != (*item)["actions"].end(); item_actions++) { - button_action.emplace_back(item_actions->get()); - } - } - if (item->contains("image")) { - return wxString::FromUTF8((*item)["image"].get()); - } - } - } - } - } - else { - BOOST_LOG_TRIVIAL(info) << "data is not exists"; - return wxEmptyString; - } - return wxEmptyString; -} - - wxString HMSQuery::query_print_error_msg(int print_error) { char buf[32]; @@ -312,22 +264,29 @@ wxString HMSQuery::query_print_error_msg(int print_error) return _query_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) -{ - char buf[32]; - ::sprintf(buf, "%08X", print_error); - //The first three digits of SN number - dev_id = dev_id.substr(0, 3); - return _query_error_url_action(std::string(buf), dev_id, button_action); -} - - int HMSQuery::check_hms_info() { boost::thread check_thread = boost::thread([this] { + bool download_new_hms_info = true; + // load local hms json file + std::string version = ""; + if (load_from_local(version) == 0) { + BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info current version = " << version; + std::string new_version; + get_hms_info_version(new_version); + BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info latest version = " << new_version; - download_hms_related(QUERY_HMS_INFO, &m_hms_info_json); - download_hms_related(QUERY_HMS_ACTION, &m_hms_action_json); + if (new_version.empty()) {return 0;} + + if (!version.empty() && version == new_version) { + download_new_hms_info = false; + } + } + BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info need download new hms info = " << download_new_hms_info; + // download if version is update + if (download_new_hms_info) { + download_hms_info(); + } return 0; }); return 0; diff --git a/src/slic3r/GUI/HMS.hpp b/src/slic3r/GUI/HMS.hpp index 01df19ed3..64edf84ca 100644 --- a/src/slic3r/GUI/HMS.hpp +++ b/src/slic3r/GUI/HMS.hpp @@ -16,30 +16,23 @@ namespace Slic3r { namespace GUI { #define HMS_INFO_FILE "hms.json" -#define QUERY_HMS_INFO "query_hms_info" -#define QUERY_HMS_ACTION "query_hms_action" class HMSQuery { protected: - json m_hms_info_json; - json m_hms_action_json; - int download_hms_related(std::string hms_type,json* receive_json); - int load_from_local(std::string& version_info, std::string hms_type, json* load_json); - 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")); - wxString _query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action); + json m_hms_json; + int download_hms_info(); + int load_from_local(std::string& version_info); + int save_to_local(std::string lang); + std::string get_hms_file(std::string lang); + wxString _query_hms_msg(std::string long_error_code, std::string lang_code = "en"); + wxString _query_error_msg(std::string long_error_code, std::string lang_code = "en"); public: HMSQuery() {} int check_hms_info(); wxString query_hms_msg(std::string long_error_code); wxString query_print_error_msg(int print_error); - 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); - - bool save_local = false; }; int get_hms_info_version(std::string &version); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index bd9632d25..d0b421d8c 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -33,7 +33,6 @@ wxDEFINE_EVENT(EVT_ENTER_IP_ADDRESS, wxCommandEvent); wxDEFINE_EVENT(EVT_CLOSE_IPADDRESS_DLG, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECK_IP_ADDRESS_FAILED, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_RETRY, wxCommandEvent); -wxDEFINE_EVENT(EVT_PRINT_ERROR_STOP, wxCommandEvent); wxDEFINE_EVENT(EVT_UPDATE_NOZZLE, wxCommandEvent); ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) @@ -842,291 +841,6 @@ void SecondaryCheckDialog::rescale() m_button_cancel->Rescale(); } -PrintErrorDialog::PrintErrorDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) - :DPIFrame(parent, id, title, pos, size, style) -{ - std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); - - m_error_prompt_pic_static = new wxStaticBitmap(this, wxID_ANY, wxBitmap(), wxDefaultPosition, wxSize(FromDIP(300), FromDIP(180))); - - m_sizer_main = new wxBoxSizer(wxVERTICAL); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(350), 1)); - m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); - m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); - m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); - - wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); - - m_sizer_right->Add(0, 0, 1, wxTOP, FromDIP(15)); - - m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); - m_vebview_release_note->SetScrollRate(0, 5); - m_vebview_release_note->SetBackgroundColour(*wxWHITE); - m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), FromDIP(250))); - m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); - - - auto bottom_sizer = new wxBoxSizer(wxVERTICAL); - m_sizer_button = new wxBoxSizer(wxVERTICAL); - - 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(0, 0, 0, wxTOP, FromDIP(10)); - - m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); - - Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {this->on_hide(); }); - Bind(wxEVT_ACTIVATE, [this](auto& e) { if (!e.GetActive()) this->RequestUserAttention(wxUSER_ATTENTION_ERROR); }); - Bind(wxEVT_WEBREQUEST_STATE, &PrintErrorDialog::on_webrequest_state, this); - - - SetSizer(m_sizer_main); - Layout(); - m_sizer_main->Fit(this); - - init_button_list(); - - CenterOnParent(); - wxGetApp().UpdateFrameDarkUI(this); -} - -void PrintErrorDialog::post_event(wxCommandEvent&& event) -{ - if (event_parent) { - event.SetString(""); - event.SetEventObject(event_parent); - wxPostEvent(event_parent, event); - event.Skip(); - } -} - -void PrintErrorDialog::on_webrequest_state(wxWebRequestEvent& evt) -{ - BOOST_LOG_TRIVIAL(trace) << "monitor: monitor_panel web request state = " << evt.GetState(); - switch (evt.GetState()) { - case wxWebRequest::State_Completed: { - wxImage img(*evt.GetResponse().GetStream()); - wxImage resize_img = img.Scale(FromDIP(320), FromDIP(180), wxIMAGE_QUALITY_HIGH); - wxBitmap error_prompt_pic = resize_img; - m_error_prompt_pic_static->SetBitmap(error_prompt_pic); - - - break; - } - case wxWebRequest::State_Failed: - case wxWebRequest::State_Cancelled: - case wxWebRequest::State_Unauthorized: { - m_error_prompt_pic_static->SetBitmap(wxBitmap()); - break; - } - case wxWebRequest::State_Active: - case wxWebRequest::State_Idle: break; - default: break; - } -} - -void PrintErrorDialog::update_text_image(wxString text, 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); - - - if (!m_staticText_release_note) { - m_staticText_release_note = new Label(m_vebview_release_note, text, LB_AUTO_WRAP); - sizer_text_release_note->Add(0, 0, 0, wxTOP, FromDIP(5)); - sizer_text_release_note->Add(m_error_prompt_pic_static, 0, wxLEFT, FromDIP(10)); - sizer_text_release_note->Add(m_staticText_release_note, 0, wxLEFT | wxRIGHT, 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; - if (web_request.GetState() == wxWebRequest::State_Idle) - web_request.Start(); - BOOST_LOG_TRIVIAL(trace) << "monitor: start new webrequest, state = " << web_request.GetState() << ", url = " << image_url; - m_error_prompt_pic_static->Show(); - - } - else { - m_error_prompt_pic_static->Hide(); - } - sizer_text_release_note->Layout(); - 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_release_note->SetForegroundColour(wxColour("#5C5C5C")); - m_vebview_release_note->Layout(); - - auto text_size = m_staticText_release_note->GetBestSize(); - if (text_size.y < FromDIP(360)) - if (!image_url.empty()) { - m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(220))); - } - else { - m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(25))); - } - else { - m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), FromDIP(340))); - } - - Layout(); - Fit(); -} - -void PrintErrorDialog::on_show() -{ - wxGetApp().UpdateFrameDarkUI(this); - - this->Show(); - this->Raise(); -} - -void PrintErrorDialog::on_hide() -{ - //m_sizer_button->Clear(); - //m_sizer_button->Layout(); - //m_used_button.clear(); - this->Hide(); - if (web_request.IsOk() && web_request.GetState() == wxWebRequest::State_Active) { - BOOST_LOG_TRIVIAL(info) << "web_request: cancelled"; - web_request.Cancel(); - } - m_error_prompt_pic_static->SetBitmap(wxBitmap()); - - if (wxGetApp().mainframe != nullptr) { - wxGetApp().mainframe->Show(); - wxGetApp().mainframe->Raise(); - } -} - -void PrintErrorDialog::update_title_style(wxString title, std::vector button_style, wxWindow* parent) -{ - - SetTitle(title); - event_parent = parent; - for (int used_button_id : m_used_button) { - if (m_button_list.find(used_button_id) != m_button_list.end()) { - m_button_list[used_button_id]->Hide(); - } - } - m_sizer_button->Clear(); - m_used_button = button_style; - for (int button_id : button_style) { - if (m_button_list.find(button_id) != m_button_list.end()) { - m_sizer_button->Add(m_button_list[button_id], 0, wxALL, FromDIP(5)); - m_button_list[button_id]->Show(); - } - } - Layout(); - Fit(); - -} - -void PrintErrorDialog::init_button(PrintErrorButton style,wxString buton_text) { - Button* print_error_button = new Button(this, buton_text); - print_error_button->SetBorderColor(wxColour("#C2C2C2")); - print_error_button->SetTextColor(wxColour("#1F1F1F")); - print_error_button->SetFont(Label::Body_14); - print_error_button->SetSize(wxSize(FromDIP(300), FromDIP(30))); - print_error_button->SetMinSize(wxSize(FromDIP(300), FromDIP(30))); - print_error_button->SetMaxSize(wxSize(-1, FromDIP(30))); - print_error_button->SetCornerRadius(FromDIP(5)); - print_error_button->Hide(); - m_button_list[style] = print_error_button; - -} - -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)); - e.Skip(); - }); - - init_button(RESUME_PRINTING_DEFECTS, _L("Resume Printing(defects acceptable)")); - m_button_list[RESUME_PRINTING_DEFECTS]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); - e.Skip(); - }); - - - init_button(RESUME_PRINTING_PROBELM_SOLVED, _L("Resume Printing(problem solved)")); - m_button_list[RESUME_PRINTING_PROBELM_SOLVED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); - e.Skip(); - }); - - init_button(STOP_PRINTING, _L("Stop Printing")); - m_button_list[STOP_PRINTING]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - post_event(wxCommandEvent(EVT_PRINT_ERROR_STOP)); - e.Skip(); - }); - - init_button(FILAMENT_EXTRUDED, _L("Filament Extruded,Continue")); - m_button_list[FILAMENT_EXTRUDED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - wxCommandEvent evt(EVT_SECONDARY_CHECK_CONFIRM, GetId()); - e.SetEventObject(this); - GetEventHandler()->ProcessEvent(evt); - this->on_hide(); - }); - - init_button(RETRY_FILAMENT_EXTRUDED, _L("Not Extruded Yet,Retry")); - m_button_list[RETRY_FILAMENT_EXTRUDED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - wxCommandEvent evt(EVT_SECONDARY_CHECK_RETRY, GetId()); - e.SetEventObject(this); - GetEventHandler()->ProcessEvent(evt); - this->on_hide(); - }); - - init_button(CONTINUE, _L("Finished,Continue")); - m_button_list[CONTINUE]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - wxCommandEvent evt(EVT_SECONDARY_CHECK_CONFIRM, GetId()); - e.SetEventObject(this); - GetEventHandler()->ProcessEvent(evt); - this->on_hide(); - }); - - init_button(LOAD_VIRTUAL_TRAY, _L("Load Filament ")); - m_button_list[LOAD_VIRTUAL_TRAY]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - //TODO - }); - - init_button(OK_BUTTON, _L("OK ")); - m_button_list[OK_BUTTON]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - wxCommandEvent evt(EVT_SECONDARY_CHECK_CONFIRM, GetId()); - e.SetEventObject(this); - GetEventHandler()->ProcessEvent(evt); - this->on_hide(); - }); -} - -PrintErrorDialog::~PrintErrorDialog() -{ - -} - -void PrintErrorDialog::on_dpi_changed(const wxRect& suggested_rect) -{ - rescale(); -} - -void PrintErrorDialog::msw_rescale() { - wxGetApp().UpdateFrameDarkUI(this); - Refresh(); -} - -void PrintErrorDialog::rescale() -{ - for(auto used_button:m_used_button) - m_button_list[used_button]->Rescale(); -} - ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style, bool not_show_again_check) :DPIDialog(parent, id, title, pos, size, style) { diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index ab26b4dab..81a981480 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -45,7 +45,6 @@ wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_RETRY, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_DONE, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_RESUME, wxCommandEvent); -wxDECLARE_EVENT(EVT_PRINT_ERROR_STOP, wxCommandEvent); wxDECLARE_EVENT(EVT_UPDATE_NOZZLE, wxCommandEvent); class ReleaseNoteDialog : public DPIDialog @@ -158,53 +157,6 @@ public: std::string show_again_config_text = ""; }; -class PrintErrorDialog : public DPIFrame -{ -private: - wxWindow* event_parent{ nullptr }; -public: - enum PrintErrorButton { - RESUME_PRINTING = 2, - RESUME_PRINTING_DEFECTS = 3, - RESUME_PRINTING_PROBELM_SOLVED = 4, - STOP_PRINTING = 5, - FILAMENT_EXTRUDED = 7, - RETRY_FILAMENT_EXTRUDED = 8, - CONTINUE = 9, - LOAD_VIRTUAL_TRAY=10, - OK_BUTTON=11 - }; - PrintErrorDialog( - wxWindow* parent, - wxWindowID id = wxID_ANY, - const wxString& title = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCLOSE_BOX | wxCAPTION - ); - void update_text_image(wxString text, wxString image_url); - void on_show(); - void on_hide(); - void update_title_style(wxString title, std::vector style, wxWindow* parent = nullptr); - void post_event(wxCommandEvent&& event); - void rescale(); - ~PrintErrorDialog(); - void on_dpi_changed(const wxRect& suggested_rect); - void msw_rescale(); - void init_button(PrintErrorButton style, wxString buton_text); - void init_button_list(); - void on_webrequest_state(wxWebRequestEvent& evt); - - - wxWebRequest web_request; - wxStaticBitmap* m_error_prompt_pic_static; - Label* m_staticText_release_note{ nullptr }; - wxBoxSizer* m_sizer_main; - wxBoxSizer* m_sizer_button; - wxScrolledWindow* m_vebview_release_note{ nullptr }; - std::map m_button_list; - std::vector m_used_button; -}; struct ConfirmBeforeSendInfo { diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 98d91f358..af917833d 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -64,6 +64,37 @@ static wxColour PAGE_TITLE_FONT_COL = wxColour(107, 107, 107); static wxColour GROUP_TITLE_FONT_COL = wxColour(172, 172, 172); static wxColour TEXT_LIGHT_FONT_COL = wxColour(107, 107, 107); +static std::vector message_containing_retry{ + "0701 8004", + "0701 8005", + "0701 8006", + "0701 8006", + "0701 8007", + "0700 8012", + "0701 8012", + "0702 8012", + "0703 8012", + "07FF 8003", + "07FF 8004", + "07FF 8005", + "07FF 8006", + "07FF 8007", + "07FF 8010", + "07FF 8011", + "07FF 8012", + "07FF 8013", + "12FF 8007" +}; + +static std::vector message_containing_done{ + "07FF 8007", + "12FF 8007" +}; + +static std::vector message_containing_resume{ + "0300 8013" +}; + static wxImage fail_image; @@ -1669,7 +1700,6 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_FAN_CHANGED, &StatusPanel::on_fan_changed, this); Bind(EVT_SECONDARY_CHECK_DONE, &StatusPanel::on_print_error_done, this); Bind(EVT_SECONDARY_CHECK_RESUME, &StatusPanel::on_subtask_pause_resume, this); - Bind(EVT_PRINT_ERROR_STOP, &StatusPanel::on_subtask_abort, this); m_switch_speed->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); @@ -2048,21 +2078,39 @@ 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, wxString msg, std::string print_error_str) { if (msg.IsEmpty()) { error_info_reset(); } else { m_project_task_panel->show_error_msg(msg); + auto it_retry = std::find(message_containing_retry.begin(), message_containing_retry.end(), print_error_str); + auto it_done = std::find(message_containing_done.begin(), message_containing_done.end(), print_error_str); + 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; if (m_print_error_dlg == nullptr) { - m_print_error_dlg = new PrintErrorDialog(this->GetParent(), wxID_ANY, _L("Error")); + m_print_error_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); } - m_print_error_dlg->update_title_style(_L("Error"), used_button,this); - m_print_error_dlg->update_text_image(msg, image_url); + if (it_done != message_containing_done.end() && it_retry != message_containing_retry.end()) { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::DONE_AND_RETRY, this); + } + else if (it_done != message_containing_done.end()) { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_DONE, this); + } + else if (it_retry != message_containing_retry.end()) { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RETRY, this); + } + else if (it_resume!= message_containing_resume.end()) { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RESUME, this); + } + else { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); + } + m_print_error_dlg->update_text(msg); + 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); @@ -2099,15 +2147,13 @@ void StatusPanel::update_error_message() } wxString error_msg = wxGetApp().get_hms_query()->query_print_error_msg(obj->print_error); - 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); if (!error_msg.IsEmpty()) { wxDateTime now = wxDateTime::Now(); wxString show_time = now.Format("%H:%M:%S"); - error_msg = wxString::Format("%s\n[%s %s]", + error_msg = wxString::Format("%s[%s %s]", error_msg, print_error_str, show_time); - show_error_message(obj, error_msg, print_error_str,error_image_url,used_button); + show_error_message(obj, error_msg, print_error_str); } else { BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error; } diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index abc585498..289052b69 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -460,7 +460,7 @@ protected: CalibrationDialog* calibration_dlg {nullptr}; AMSMaterialsSetting *m_filament_setting_dlg{nullptr}; - PrintErrorDialog* m_print_error_dlg = nullptr; + SecondaryCheckDialog* m_print_error_dlg = nullptr; SecondaryCheckDialog* abort_dlg = nullptr; SecondaryCheckDialog* con_load_dlg = nullptr; SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr; @@ -513,7 +513,7 @@ 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, wxString msg, std::string print_error_str = ""); void error_info_reset(); void show_recenter_dialog();