From 3e790b4b9e13870cd8e8ae4cec743b60bf5db53e Mon Sep 17 00:00:00 2001 From: alves Date: Tue, 6 Jan 2026 20:38:04 +0800 Subject: [PATCH 01/18] feature sentry report to server use log module. --- deps/Sentry/Sentry.cmake | 2 +- src/common_func/common_func.cpp | 73 +++++++++++++++++- src/common_func/common_func.hpp | 4 + src/sentry_wrapper/SentryWrapper.cpp | 106 +++++++++++++++++---------- 4 files changed, 142 insertions(+), 43 deletions(-) diff --git a/deps/Sentry/Sentry.cmake b/deps/Sentry/Sentry.cmake index 138580b24f..07fb569c56 100644 --- a/deps/Sentry/Sentry.cmake +++ b/deps/Sentry/Sentry.cmake @@ -81,7 +81,7 @@ endif() Snapmaker_Orca_add_cmake_project(Sentry GIT_REPOSITORY https://github.com/getsentry/sentry-native.git - GIT_TAG 0.12.1 + GIT_TAG 0.12.2 GIT_SHALLOW ON PATCH_COMMAND ${SENTRY_PATCH_COMMAND} CMAKE_ARGS diff --git a/src/common_func/common_func.cpp b/src/common_func/common_func.cpp index cdde23d3c6..4b31cfd860 100644 --- a/src/common_func/common_func.cpp +++ b/src/common_func/common_func.cpp @@ -100,8 +100,8 @@ namespace common } nlohmann::json json_data; json_file >> json_data; - std::string str_version = json_data["version"]; - std::string str_build_number = json_data["build_number"]; + std::string str_version = json_data.value("version", ""); + std::string str_build_number = json_data.value("build_number", ""); std::string flutter_version = std::string("flutter_version: ") + str_version + std::string(" ") + std::string("build_number: ") + str_build_number; @@ -109,4 +109,73 @@ namespace common return flutter_version; } + + std::string getLocalArea() + { + std::string localArea = ""; + std::string cfgfile = ""; +#ifdef _WIN32 + wchar_t appDataPath[MAX_PATH] = {0}; + auto hr = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath); + char* path = new char[MAX_PATH]; + size_t pathLength; + wcstombs_s(&pathLength, path, MAX_PATH, appDataPath, MAX_PATH); + std::string filePath = path; + cfgfile = filePath + "\\" + std::string("Snapmaker_Orca\\Snapmaker_Orca.conf"); +#elif __APPLE__ + const char* home_env = getenv("HOME"); + cfgfile = home_env; + cfgfile = versionFilePath + "/Library/Application Support/Snapmaker_Orca/Snapmaker_Orca.conf"; +#else + +#endif + std::ifstream json_file(cfgfile); + if (!json_file.is_open()) { + std::ifstream json_file(cfgfile); + return ""; + } + + nlohmann::json json_data; + json_file >> json_data; + + auto dataObj = json_data.value("app", nlohmann::json::object()); + localArea = dataObj.value("region", ""); + + return localArea; + } + + std::string getLanguage() + { + std::string localLanguage = ""; + + std::string cfgfile = ""; +#ifdef _WIN32 + wchar_t appDataPath[MAX_PATH] = {0}; + auto hr = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath); + char* path = new char[MAX_PATH]; + size_t pathLength; + wcstombs_s(&pathLength, path, MAX_PATH, appDataPath, MAX_PATH); + std::string filePath = path; + cfgfile = filePath + "\\" + std::string("Snapmaker_Orca\\Snapmaker_Orca.conf"); +#elif __APPLE__ + const char* home_env = getenv("HOME"); + cfgfile = home_env; + cfgfile = versionFilePath + "/Library/Application Support/Snapmaker_Orca/Snapmaker_Orca.conf"; +#else + +#endif + std::ifstream json_file(cfgfile); + if (!json_file.is_open()) { + std::ifstream json_file(cfgfile); + return ""; + } + + nlohmann::json json_data; + json_file >> json_data; + + auto dataObj = json_data.value("app", nlohmann::json::object()); + localLanguage = dataObj.value("language", ""); + + return localLanguage; + } } \ No newline at end of file diff --git a/src/common_func/common_func.hpp b/src/common_func/common_func.hpp index 9303b4196f..8ad5eec3f7 100644 --- a/src/common_func/common_func.hpp +++ b/src/common_func/common_func.hpp @@ -25,6 +25,10 @@ namespace common std::string getMachineId(); + std::string getLocalArea(); + + std::string getLanguage(); + } // namespace common #endif \ No newline at end of file diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index de4dd86c6a..4657754836 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -55,10 +55,13 @@ static sentry_value_t on_crash_callback(const sentry_ucontext_t* uctx, sentry_va return event; } + static sentry_value_t before_send_log(sentry_value_t log, void* user_dataa) +{ + return log; + } + static sentry_value_t before_send(sentry_value_t event, void* hint, void* data) { - - sentry_value_t level_val = sentry_value_get_by_key(event, SENTRY_KEY_LEVEL); std::string levelName = sentry_value_as_string(level_val); @@ -198,8 +201,8 @@ void initSentryEx() sentry_options_set_debug(options, 0); #endif - // sentry_options_set_environment(options, "develop"); - sentry_options_set_environment(options, "Release"); + sentry_options_set_environment(options, "develop"); + //sentry_options_set_environment(options, "Release"); sentry_options_set_auto_session_tracking(options, 0); sentry_options_set_symbolize_stacktraces(options, 1); @@ -209,6 +212,10 @@ void initSentryEx() sentry_options_set_sample_rate(options, 1.0); sentry_options_set_traces_sample_rate(options, 1.0); + sentry_options_set_enable_logs(options, 1); + sentry_options_set_before_send_log(options, before_send_log, NULL); + sentry_options_set_logs_with_attributes(options, true); + sentry_init(options); sentry_start_session(); @@ -240,48 +247,67 @@ void sentryReportLogEx(SENTRY_LOG_LEVEL logLevel, const std::string& logTraceId) { sentry_level_t sentry_msg_level; - switch (logLevel) - { - case SENTRY_LOG_TRACE: - sentry_msg_level = SENTRY_LEVEL_TRACE; - break; - case SENTRY_LOG_DEBUG: - sentry_msg_level = SENTRY_LEVEL_DEBUG; - break; - case SENTRY_LOG_INFO: - sentry_msg_level = SENTRY_LEVEL_INFO; - break; - case SENTRY_LOG_WARNING: - sentry_msg_level = SENTRY_LEVEL_WARNING; - break; - case SENTRY_LOG_ERROR: - sentry_msg_level = SENTRY_LEVEL_ERROR; - break; - case SENTRY_LOG_FATAL: - sentry_msg_level = SENTRY_LEVEL_FATAL; - break; - default: - return; - } + sentry_value_t tags = sentry_value_new_object(); - sentry_value_t event = sentry_value_new_message_event(sentry_msg_level, - funcModule.c_str(), - logContent.c_str() - ); + if (!funcModule.empty()) + sentry_value_set_by_key(tags, "function_module", sentry_value_new_string(funcModule.c_str())); - sentry_value_t tags = sentry_value_new_object(); + if (!logTraceId.empty()) + sentry_value_set_by_key(tags, "snapmaker_trace_id", sentry_value_new_string(logTraceId.c_str())); - if (!logTraceId.empty()) - sentry_value_set_by_key(tags, "snapmaker_trace_id", sentry_value_new_string(logTraceId.c_str())); - - if (SENTRY_LEVEL_TRACE == sentry_msg_level) - sentry_value_set_by_key(tags, BURY_POINT, sentry_value_new_string("snapmaker_bury_point")); - if (!logTagKey.empty()) sentry_value_set_by_key(tags, logTagKey.c_str(), sentry_value_new_string(logTagValue.c_str())); - sentry_value_set_by_key(event, "snapmaker_tags", tags); - sentry_capture_event(event); + sentry_value_set_by_key(tags, "snapmaker_version", sentry_value_new_string(Snapmaker_VERSION)); + + std::string flutterVersion = common::get_flutter_version(); + if (!flutterVersion.empty()) + sentry_value_set_by_key(tags, "flutter_version", sentry_value_new_string(flutterVersion.c_str())); + + std::string pcName = common::get_pc_name(); + if (!pcName.empty()) + sentry_value_set_by_key(tags, "pc_name", sentry_value_new_string(pcName.c_str())); + + std::string machineID = common::getMachineId(); + if (!machineID.empty()) + sentry_value_set_by_key(tags, "machine_id", sentry_value_new_string(machineID.c_str())); + + std::string currentLanguage = common::getLanguage(); + if (!currentLanguage.empty()) + sentry_value_set_by_key(tags, "current_language", sentry_value_new_string(currentLanguage.c_str())); + + std::string localArea = common::getLocalArea(); + if (!localArea.empty()) + sentry_value_set_by_key(tags, "local_area", sentry_value_new_string(localArea.c_str())); + + switch (logLevel) { + case SENTRY_LOG_TRACE: + sentry_msg_level = SENTRY_LEVEL_TRACE; + sentry_value_set_by_key(tags, BURY_POINT, sentry_value_new_string("snapmaker_bury_point")); + sentry_log_trace(logContent.c_str(), tags, 3); + break; + case SENTRY_LOG_DEBUG: + sentry_msg_level = SENTRY_LEVEL_DEBUG; + sentry_log_debug(logContent.c_str(), tags, 3); + break; + case SENTRY_LOG_INFO: + sentry_msg_level = SENTRY_LEVEL_INFO; + sentry_log_info(logContent.c_str(), tags, 3); + break; + case SENTRY_LOG_WARNING: + sentry_msg_level = SENTRY_LEVEL_WARNING; + sentry_log_warn(logContent.c_str(), tags, 3); + break; + case SENTRY_LOG_ERROR: + sentry_msg_level = SENTRY_LEVEL_ERROR; + sentry_log_error(logContent.c_str(), tags, 3); + break; + case SENTRY_LOG_FATAL: + sentry_msg_level = SENTRY_LEVEL_FATAL; + sentry_log_fatal(logContent.c_str(), tags, 3); + break; + default: return; + } } From 49546332c3b6977e56b41e4d3b2caad66d918fc7 Mon Sep 17 00:00:00 2001 From: alves Date: Tue, 6 Jan 2026 20:45:05 +0800 Subject: [PATCH 02/18] feature add log for privacy policy changed. --- src/slic3r/GUI/GUI_App.cpp | 4 ++-- src/slic3r/GUI/Preferences.cpp | 3 ++- src/slic3r/GUI/WebGuideDialog.cpp | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index b92533e3f5..d7cdcef833 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -7072,7 +7072,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); set_privacy_policy(isAgree == "true"); - + BOOST_LOG_TRIVIAL(warning) << "run_wizard changed the privacy policy with: " << (isAgree); return res; } @@ -7292,7 +7292,7 @@ bool GUI_App::config_wizard_startup() { auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); set_privacy_policy(isAgree == "true"); - + BOOST_LOG_TRIVIAL(warning) << "config_wizard_startup changed the privacy policy with: " << (isAgree); if (!m_app_conf_exists || preset_bundle->printers.only_default_printers()) { BOOST_LOG_TRIVIAL(info) << "run wizard..."; run_wizard(ConfigWizard::RR_DATA_EMPTY); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 41265bc2e0..5909829264 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -750,7 +750,8 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa if (param == "privacy_policy_isagree") { - app_config->set("app", "privacy_policy_isagree", checkbox->GetValue()); + app_config->set("app", "privacy_policy_isagree", checkbox->GetValue()); + BOOST_LOG_TRIVIAL(warning) <<"create_item_checkbox changed the privacy policy with: "<<(checkbox->GetValue()?"true" : "false"); set_privacy_policy(checkbox->GetValue()); } // if (param == "staff_pick_switch") { diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 7784c408d4..045a099a8e 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -650,6 +650,7 @@ int GuideFrame::SaveProfile() // } else // m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "0"); m_MainPtr->app_config->set("app", "privacy_policy_isagree", PrivacyUse); + BOOST_LOG_TRIVIAL(warning) << "SaveProfile changed the privacy policy with: " << (PrivacyUse ? "true" : "false"); set_privacy_policy(PrivacyUse); m_MainPtr->app_config->set("region", m_Region); m_MainPtr->app_config->set_bool("stealth_mode", StealthMode); From 7ad145dd30d0d68e688058f5fe90b6b8943c4635 Mon Sep 17 00:00:00 2001 From: alves Date: Tue, 6 Jan 2026 20:49:07 +0800 Subject: [PATCH 03/18] feature upload sentry log by the flags control. --- src/sentry_wrapper/SentryWrapper.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index 4657754836..0a2136018c 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -246,6 +246,10 @@ void sentryReportLogEx(SENTRY_LOG_LEVEL logLevel, const std::string& logTagValue, const std::string& logTraceId) { + if (!get_privacy_policy()) { + return; + } + sentry_level_t sentry_msg_level; sentry_value_t tags = sentry_value_new_object(); From eb49ab79688e042c4491b88e84a06da7034b5756 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 09:39:44 +0800 Subject: [PATCH 04/18] feature remove not work code. --- src/sentry_wrapper/SentryWrapper.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index 0a2136018c..e3d5bad670 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -126,11 +126,6 @@ void initSentryEx() sentry_options_t* options = sentry_options_new(); std::string dsn = std::string("https://c74b617c2aedc291444d3a238d23e780@o4508125599563776.ingest.us.sentry.io/4510425163956224"); { -#ifdef __APPLE__ - -#elif _WIN32 - -#endif sentry_options_set_dsn(options, dsn.c_str()); std::string handlerDir = ""; std::string dataBaseDir = ""; From 4a7746cc5a7c5ec215b26d1d189504b8e8c3aae7 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 10:10:31 +0800 Subject: [PATCH 05/18] feature add tags for sentry report log. --- src/sentry_wrapper/SentryWrapper.cpp | 86 ++++++++++++++++------------ 1 file changed, 50 insertions(+), 36 deletions(-) diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index e3d5bad670..33d4163a50 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -196,8 +196,8 @@ void initSentryEx() sentry_options_set_debug(options, 0); #endif - sentry_options_set_environment(options, "develop"); - //sentry_options_set_environment(options, "Release"); + //sentry_options_set_environment(options, "develop"); + sentry_options_set_environment(options, "Release"); sentry_options_set_auto_session_tracking(options, 0); sentry_options_set_symbolize_stacktraces(options, 1); @@ -235,11 +235,11 @@ void exitSentryEx() sentry_close(); } void sentryReportLogEx(SENTRY_LOG_LEVEL logLevel, - const std::string& logContent, - const std::string& funcModule, - const std::string& logTagKey, - const std::string& logTagValue, - const std::string& logTraceId) + const std::string& logContent, + const std::string& funcModule, + const std::string& logTagKey, + const std::string& logTagValue, + const std::string& logTraceId) { if (!get_privacy_policy()) { return; @@ -248,62 +248,76 @@ void sentryReportLogEx(SENTRY_LOG_LEVEL logLevel, sentry_level_t sentry_msg_level; sentry_value_t tags = sentry_value_new_object(); - if (!funcModule.empty()) - sentry_value_set_by_key(tags, "function_module", sentry_value_new_string(funcModule.c_str())); + if (!funcModule.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(funcModule.c_str()), NULL); + sentry_value_set_by_key(tags, "function_module", attr); + } - if (!logTraceId.empty()) - sentry_value_set_by_key(tags, "snapmaker_trace_id", sentry_value_new_string(logTraceId.c_str())); + if (!logTraceId.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(logTraceId.c_str()), NULL); + sentry_value_set_by_key(tags, "snapmaker_trace_id", attr); + } - if (!logTagKey.empty()) - sentry_value_set_by_key(tags, logTagKey.c_str(), sentry_value_new_string(logTagValue.c_str())); + if (!logTagKey.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(logTagValue.c_str()), NULL); + sentry_value_set_by_key(tags, logTagKey.c_str(), attr); + } - sentry_value_set_by_key(tags, "snapmaker_version", sentry_value_new_string(Snapmaker_VERSION)); + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(Snapmaker_VERSION), NULL); + sentry_value_set_by_key(tags, "snapmaker_version", attr); std::string flutterVersion = common::get_flutter_version(); - if (!flutterVersion.empty()) - sentry_value_set_by_key(tags, "flutter_version", sentry_value_new_string(flutterVersion.c_str())); - + if (!flutterVersion.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(flutterVersion.c_str()), NULL); + sentry_value_set_by_key(tags, "flutter_version", attr); + } std::string pcName = common::get_pc_name(); - if (!pcName.empty()) - sentry_value_set_by_key(tags, "pc_name", sentry_value_new_string(pcName.c_str())); - + if (!pcName.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(pcName.c_str()), NULL); + sentry_value_set_by_key(tags, "pc_name", attr); + } std::string machineID = common::getMachineId(); - if (!machineID.empty()) - sentry_value_set_by_key(tags, "machine_id", sentry_value_new_string(machineID.c_str())); - + if (!machineID.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(machineID.c_str()), NULL); + sentry_value_set_by_key(tags, "machine_id", attr); + } std::string currentLanguage = common::getLanguage(); - if (!currentLanguage.empty()) - sentry_value_set_by_key(tags, "current_language", sentry_value_new_string(currentLanguage.c_str())); - + if (!currentLanguage.empty()) { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(currentLanguage.c_str()), NULL); + sentry_value_set_by_key(tags, "current_language", attr); + } std::string localArea = common::getLocalArea(); - if (!localArea.empty()) - sentry_value_set_by_key(tags, "local_area", sentry_value_new_string(localArea.c_str())); - + if (!localArea.empty()) + { + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(localArea.c_str()), NULL); + sentry_value_set_by_key(tags, "local_area", attr); + } switch (logLevel) { case SENTRY_LOG_TRACE: sentry_msg_level = SENTRY_LEVEL_TRACE; - sentry_value_set_by_key(tags, BURY_POINT, sentry_value_new_string("snapmaker_bury_point")); - sentry_log_trace(logContent.c_str(), tags, 3); + sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string("snapmaker_bury_point"), NULL); + sentry_value_set_by_key(tags, BURY_POINT, attr); + sentry_log_trace(logContent.c_str(), tags); break; case SENTRY_LOG_DEBUG: sentry_msg_level = SENTRY_LEVEL_DEBUG; - sentry_log_debug(logContent.c_str(), tags, 3); + sentry_log_debug(logContent.c_str(), tags); break; case SENTRY_LOG_INFO: sentry_msg_level = SENTRY_LEVEL_INFO; - sentry_log_info(logContent.c_str(), tags, 3); + sentry_log_info(logContent.c_str(), tags); break; case SENTRY_LOG_WARNING: sentry_msg_level = SENTRY_LEVEL_WARNING; - sentry_log_warn(logContent.c_str(), tags, 3); + sentry_log_warn(logContent.c_str(), tags); break; case SENTRY_LOG_ERROR: sentry_msg_level = SENTRY_LEVEL_ERROR; - sentry_log_error(logContent.c_str(), tags, 3); + sentry_log_error(logContent.c_str(), tags); break; case SENTRY_LOG_FATAL: sentry_msg_level = SENTRY_LEVEL_FATAL; - sentry_log_fatal(logContent.c_str(), tags, 3); + sentry_log_fatal(logContent.c_str(), tags); break; default: return; } From 89d3ea6c2f6b6a6d6e5ed096862033cd30fe3a6d Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 15:43:11 +0800 Subject: [PATCH 06/18] fix thread not check join able and use it may be crash bug. --- src/slic3r/GUI/GUI.cpp | 4 ---- src/slic3r/GUI/GUI_App.cpp | 8 -------- src/slic3r/GUI/SSWCP.cpp | 41 ++++++++++++++++++++++++++++++++++++++ src/slic3r/GUI/SSWCP.hpp | 2 +- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 15ec58f924..6b338b5f03 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -497,10 +497,6 @@ void about() void login() { - //LoginDialog dlg; - //dlg.ShowModal(); - - // ZUserLogin dlg; SMUserLogin dlg; dlg.run(); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index b92533e3f5..7d395687e8 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4092,14 +4092,6 @@ void GUI_App::sm_request_user_logout() m_login_userinfo.set_user_login(false); } try { - //if (!sm_login_dlg) { - // sm_login_dlg = new SMUserLogin(true); - //} else { - // delete sm_login_dlg; - // sm_login_dlg = new SMUserLogin(true); - //} - //// sm_login_dlg->ShowModal(); - wxString region = wxString::FromUTF8(app_config->get_country_code()); std::string url = ""; if (region == "CN") { diff --git a/src/slic3r/GUI/SSWCP.cpp b/src/slic3r/GUI/SSWCP.cpp index 8a6d91f88d..70364b2ad5 100644 --- a/src/slic3r/GUI/SSWCP.cpp +++ b/src/slic3r/GUI/SSWCP.cpp @@ -644,6 +644,10 @@ void SSWCP_Instance::sw_GetActiveFile() if (iszip) { std::weak_ptr weak_self = shared_from_this(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([file_path, file_name, weak_self]() { auto self = weak_self.lock(); std::string zipname = generate_zip_path(file_path, file_name); @@ -766,6 +770,8 @@ void SSWCP_Instance::sw_GetFileStream() { auto targetname = SSWCP::get_display_filename(); std::weak_ptr weak_self = shared_from_this(); + if (m_work_thread.joinable()) + m_work_thread.join(); m_work_thread = std::thread([oriname, targetname, weak_self]() { auto self = weak_self.lock(); if (self) { @@ -784,6 +790,8 @@ void SSWCP_Instance::sw_GetFileStream() { } }); } else { + if (m_work_thread.joinable()) + m_work_thread.join(); m_work_thread = std::thread([file_path, weak_self]() { auto self = weak_self.lock(); if (self) { @@ -2703,6 +2711,9 @@ void SSWCP_MachineOption_Instance::sw_GetPrintZip() std::weak_ptr weak_self = shared_from_this(); + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([oriname, targetname, weak_self]() { auto self = weak_self.lock(); if (self) { @@ -3915,6 +3926,8 @@ void SSWCP_MachineConnect_Instance::sw_test_connect() { // 错误处理 finish_job(); } else { + if (m_work_thread.joinable()) + m_work_thread.join(); m_work_thread = std::thread([this, host] { wxString msg; bool res = host->test(msg); @@ -3967,6 +3980,10 @@ void SSWCP_MachineConnect_Instance::sw_disconnect() { std::string dev_id = m_param_data.count("dev_id") ? m_param_data["dev_id"] : ""; auto weak_self = std::weak_ptr(shared_from_this()); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_self, need_reload, dev_id](){ auto self = weak_self.lock(); @@ -4724,6 +4741,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_connect() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine]() { if (!weak_ptr.lock()) { return; @@ -4776,6 +4797,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_disconnect() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine]() { if (!weak_ptr.lock()) { return; @@ -4850,6 +4875,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_subscribe() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine, topic, qos]() { if (!weak_ptr.lock()) { return; @@ -4923,6 +4952,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_unsubscribe() { std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine, topic]() { if (!weak_ptr.lock()) { return; @@ -5110,6 +5143,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() } else { auto weak_self = std::weak_ptr(shared_from_this()); // 设置断联回调 + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_self, host, connect_params, link_mode, id, userid, reload_device_view] { auto self = weak_self.lock(); wxString msg = ""; @@ -5583,6 +5620,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_publish() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine, topic, payload, qos]() { if (!weak_ptr.lock()) { return; diff --git a/src/slic3r/GUI/SSWCP.hpp b/src/slic3r/GUI/SSWCP.hpp index 7963745995..19b8d89093 100644 --- a/src/slic3r/GUI/SSWCP.hpp +++ b/src/slic3r/GUI/SSWCP.hpp @@ -185,7 +185,7 @@ public: void update_filament_info(const json& objects, bool send_message = false); protected: - std::thread m_work_thread; // Worker thread + std::thread m_work_thread; // Worker thread public: std::string m_cmd; // Command to execute From 416033f6a880eb3e454ef1dfca27dd4640ab3916 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 15:43:11 +0800 Subject: [PATCH 07/18] fix thread not check join able and use it may be crash bug. --- src/slic3r/GUI/GUI.cpp | 4 ---- src/slic3r/GUI/GUI_App.cpp | 8 -------- src/slic3r/GUI/SSWCP.cpp | 41 ++++++++++++++++++++++++++++++++++++++ src/slic3r/GUI/SSWCP.hpp | 2 +- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 15ec58f924..6b338b5f03 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -497,10 +497,6 @@ void about() void login() { - //LoginDialog dlg; - //dlg.ShowModal(); - - // ZUserLogin dlg; SMUserLogin dlg; dlg.run(); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index d7cdcef833..905d9eaf6b 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4092,14 +4092,6 @@ void GUI_App::sm_request_user_logout() m_login_userinfo.set_user_login(false); } try { - //if (!sm_login_dlg) { - // sm_login_dlg = new SMUserLogin(true); - //} else { - // delete sm_login_dlg; - // sm_login_dlg = new SMUserLogin(true); - //} - //// sm_login_dlg->ShowModal(); - wxString region = wxString::FromUTF8(app_config->get_country_code()); std::string url = ""; if (region == "CN") { diff --git a/src/slic3r/GUI/SSWCP.cpp b/src/slic3r/GUI/SSWCP.cpp index 8a6d91f88d..70364b2ad5 100644 --- a/src/slic3r/GUI/SSWCP.cpp +++ b/src/slic3r/GUI/SSWCP.cpp @@ -644,6 +644,10 @@ void SSWCP_Instance::sw_GetActiveFile() if (iszip) { std::weak_ptr weak_self = shared_from_this(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([file_path, file_name, weak_self]() { auto self = weak_self.lock(); std::string zipname = generate_zip_path(file_path, file_name); @@ -766,6 +770,8 @@ void SSWCP_Instance::sw_GetFileStream() { auto targetname = SSWCP::get_display_filename(); std::weak_ptr weak_self = shared_from_this(); + if (m_work_thread.joinable()) + m_work_thread.join(); m_work_thread = std::thread([oriname, targetname, weak_self]() { auto self = weak_self.lock(); if (self) { @@ -784,6 +790,8 @@ void SSWCP_Instance::sw_GetFileStream() { } }); } else { + if (m_work_thread.joinable()) + m_work_thread.join(); m_work_thread = std::thread([file_path, weak_self]() { auto self = weak_self.lock(); if (self) { @@ -2703,6 +2711,9 @@ void SSWCP_MachineOption_Instance::sw_GetPrintZip() std::weak_ptr weak_self = shared_from_this(); + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([oriname, targetname, weak_self]() { auto self = weak_self.lock(); if (self) { @@ -3915,6 +3926,8 @@ void SSWCP_MachineConnect_Instance::sw_test_connect() { // 错误处理 finish_job(); } else { + if (m_work_thread.joinable()) + m_work_thread.join(); m_work_thread = std::thread([this, host] { wxString msg; bool res = host->test(msg); @@ -3967,6 +3980,10 @@ void SSWCP_MachineConnect_Instance::sw_disconnect() { std::string dev_id = m_param_data.count("dev_id") ? m_param_data["dev_id"] : ""; auto weak_self = std::weak_ptr(shared_from_this()); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_self, need_reload, dev_id](){ auto self = weak_self.lock(); @@ -4724,6 +4741,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_connect() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine]() { if (!weak_ptr.lock()) { return; @@ -4776,6 +4797,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_disconnect() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine]() { if (!weak_ptr.lock()) { return; @@ -4850,6 +4875,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_subscribe() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine, topic, qos]() { if (!weak_ptr.lock()) { return; @@ -4923,6 +4952,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_unsubscribe() { std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine, topic]() { if (!weak_ptr.lock()) { return; @@ -5110,6 +5143,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() } else { auto weak_self = std::weak_ptr(shared_from_this()); // 设置断联回调 + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_self, host, connect_params, link_mode, id, userid, reload_device_view] { auto self = weak_self.lock(); wxString msg = ""; @@ -5583,6 +5620,10 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_publish() std::weak_ptr weak_ptr = shared_from_this(); auto engine = get_current_engine(); + + if (m_work_thread.joinable()) + m_work_thread.join(); + m_work_thread = std::thread([weak_ptr, engine, topic, payload, qos]() { if (!weak_ptr.lock()) { return; diff --git a/src/slic3r/GUI/SSWCP.hpp b/src/slic3r/GUI/SSWCP.hpp index 7963745995..19b8d89093 100644 --- a/src/slic3r/GUI/SSWCP.hpp +++ b/src/slic3r/GUI/SSWCP.hpp @@ -185,7 +185,7 @@ public: void update_filament_info(const json& objects, bool send_message = false); protected: - std::thread m_work_thread; // Worker thread + std::thread m_work_thread; // Worker thread public: std::string m_cmd; // Command to execute From cf07ba7596ca5c39158e4d40a614b0665cad6651 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 16:43:17 +0800 Subject: [PATCH 08/18] fix exit application and check the data is valid.then don't use undefine data. --- src/slic3r/GUI/GLCanvas3D.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 815fce5d5a..abad24d327 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1330,7 +1330,10 @@ void GLCanvas3D::reset_volumes() m_volumes.clear(); m_dirty = true; - _set_warning_notification(EWarning::ObjectOutside, false); + if (wxGetApp.plater() && wxGetApp().plater()->get_notification_manager()) + { + _set_warning_notification(EWarning::ObjectOutside, false); + } } //BBS: get current plater's bounding box @@ -9695,8 +9698,15 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) //BBS: this may happened when exit the app, plater is null if (!wxGetApp().plater()) return; + NotificationManager* notification_managerEx = wxGetApp().plater()->get_notification_manager(); auto& notification_manager = *wxGetApp().plater()->get_notification_manager(); + if (!notification_managerEx) + { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("notification_manager is null"); + return; + } + switch (error) { case PLATER_WARNING: From 7a2909b8f1f90b75bd6abc9d2419f3ff8c176cd5 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 15:43:11 +0800 Subject: [PATCH 09/18] fix thread not check join able and use it may be crash bug. From 20a78cce43be843364258dcad8a646d6c112ce64 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 16:43:17 +0800 Subject: [PATCH 10/18] fix exit application and check the data is valid.then don't use undefine data. --- src/slic3r/GUI/GLCanvas3D.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 815fce5d5a..abad24d327 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1330,7 +1330,10 @@ void GLCanvas3D::reset_volumes() m_volumes.clear(); m_dirty = true; - _set_warning_notification(EWarning::ObjectOutside, false); + if (wxGetApp.plater() && wxGetApp().plater()->get_notification_manager()) + { + _set_warning_notification(EWarning::ObjectOutside, false); + } } //BBS: get current plater's bounding box @@ -9695,8 +9698,15 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) //BBS: this may happened when exit the app, plater is null if (!wxGetApp().plater()) return; + NotificationManager* notification_managerEx = wxGetApp().plater()->get_notification_manager(); auto& notification_manager = *wxGetApp().plater()->get_notification_manager(); + if (!notification_managerEx) + { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("notification_manager is null"); + return; + } + switch (error) { case PLATER_WARNING: From 1f9d0e4685bd1ef25a2d6ccd77532f143eac7ee5 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 7 Jan 2026 19:01:55 +0800 Subject: [PATCH 11/18] fix build error bug --- src/slic3r/GUI/GLCanvas3D.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index abad24d327..a78ff2d68f 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1330,7 +1330,9 @@ void GLCanvas3D::reset_volumes() m_volumes.clear(); m_dirty = true; - if (wxGetApp.plater() && wxGetApp().plater()->get_notification_manager()) + auto pLater = wxGetApp().plater(); + + if (pLater && wxGetApp().plater()->get_notification_manager()) { _set_warning_notification(EWarning::ObjectOutside, false); } From 40f566974ce1fb20653dc9eaebf65dad12d85cf1 Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 8 Jan 2026 14:53:53 +0800 Subject: [PATCH 12/18] fix code format for read config file data. --- src/common_func/common_func.cpp | 50 +++++++++++++++++++--------- src/sentry_wrapper/SentryWrapper.cpp | 36 +++++++++++++++----- 2 files changed, 63 insertions(+), 23 deletions(-) diff --git a/src/common_func/common_func.cpp b/src/common_func/common_func.cpp index 4b31cfd860..120985e138 100644 --- a/src/common_func/common_func.cpp +++ b/src/common_func/common_func.cpp @@ -78,13 +78,19 @@ namespace common std::string versionFilePath = ""; #ifdef _WIN32 - wchar_t appDataPath[MAX_PATH] = {0}; - auto hr = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath); - char* path = new char[MAX_PATH]; - size_t pathLength; - wcstombs_s(&pathLength, path, MAX_PATH, appDataPath, MAX_PATH); + PWSTR pszPath = nullptr; + char* path = new char[MAX_PATH](); + size_t pathLength = 0; + HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &pszPath); + if (SUCCEEDED(hr)) { + wcstombs_s(&pathLength, path, MAX_PATH, pszPath, MAX_PATH); + CoTaskMemFree(pszPath); + } + std::string filePath = path; versionFilePath = filePath + "\\" + std::string("Snapmaker_Orca\\web\\flutter_web\\version.json"); + + delete[] path; #elif __APPLE__ const char* home_env = getenv("HOME"); versionFilePath = home_env; @@ -115,13 +121,20 @@ namespace common std::string localArea = ""; std::string cfgfile = ""; #ifdef _WIN32 - wchar_t appDataPath[MAX_PATH] = {0}; - auto hr = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath); - char* path = new char[MAX_PATH]; - size_t pathLength; - wcstombs_s(&pathLength, path, MAX_PATH, appDataPath, MAX_PATH); + + PWSTR pszPath = nullptr; + char* path = new char[MAX_PATH](); + size_t pathLength = 0; + HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &pszPath); + if (SUCCEEDED(hr)) { + wcstombs_s(&pathLength, path, MAX_PATH, pszPath, MAX_PATH); + CoTaskMemFree(pszPath); + } + std::string filePath = path; cfgfile = filePath + "\\" + std::string("Snapmaker_Orca\\Snapmaker_Orca.conf"); + delete[] path; + #elif __APPLE__ const char* home_env = getenv("HOME"); cfgfile = home_env; @@ -150,13 +163,20 @@ namespace common std::string cfgfile = ""; #ifdef _WIN32 - wchar_t appDataPath[MAX_PATH] = {0}; - auto hr = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath); - char* path = new char[MAX_PATH]; - size_t pathLength; - wcstombs_s(&pathLength, path, MAX_PATH, appDataPath, MAX_PATH); + + PWSTR pszPath = nullptr; + char* path = new char[MAX_PATH](); + size_t pathLength = 0; + HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &pszPath); + if (SUCCEEDED(hr)) { + wcstombs_s(&pathLength, path, MAX_PATH, pszPath, MAX_PATH); + CoTaskMemFree(pszPath); + } + std::string filePath = path; cfgfile = filePath + "\\" + std::string("Snapmaker_Orca\\Snapmaker_Orca.conf"); + delete[] path; + #elif __APPLE__ const char* home_env = getenv("HOME"); cfgfile = home_env; diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index 33d4163a50..ef996b28b6 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -15,6 +15,9 @@ #ifdef _WIN32 #include #include +#include +#include +#pragma comment(lib, "iphlpapi.lib") #endif #ifdef __APPLE__ @@ -174,14 +177,20 @@ void initSentryEx() handlerDir = wstringTostring(desDir); - wchar_t appDataPath[MAX_PATH] = {0}; - auto hr = SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appDataPath); - char* path = new char[MAX_PATH]; - size_t pathLength; - wcstombs_s(&pathLength, path, MAX_PATH, appDataPath, MAX_PATH); + PWSTR pszPath = nullptr; + char* path = new char[MAX_PATH](); + size_t pathLength = 0; + HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &pszPath); + + if (SUCCEEDED(hr)) { + wcstombs_s(&pathLength, path, MAX_PATH, pszPath, MAX_PATH); + CoTaskMemFree(pszPath); + } + std::string filePath = path; std::string appName = "\\" + std::string("Snapmaker_Orca\\"); dataBaseDir = filePath + appName; + delete[] path; #endif if (!handlerDir.empty()) @@ -276,17 +285,28 @@ void sentryReportLogEx(SENTRY_LOG_LEVEL logLevel, sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(pcName.c_str()), NULL); sentry_value_set_by_key(tags, "pc_name", attr); } - std::string machineID = common::getMachineId(); + static std::string machineID = ""; + if (machineID.empty()) + machineID = common::getMachineId(); + if (!machineID.empty()) { sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(machineID.c_str()), NULL); sentry_value_set_by_key(tags, "machine_id", attr); } - std::string currentLanguage = common::getLanguage(); + + static std::string currentLanguage = ""; + if (currentLanguage.empty()) + currentLanguage = common::getLanguage(); + if (!currentLanguage.empty()) { sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(currentLanguage.c_str()), NULL); sentry_value_set_by_key(tags, "current_language", attr); } - std::string localArea = common::getLocalArea(); + + static std::string localArea = ""; + if (localArea.empty()) + localArea = common::getLocalArea(); + if (!localArea.empty()) { sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string(localArea.c_str()), NULL); From ca7199a0fb6a8b44ac206cbd7b4ec90d317608fd Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 8 Jan 2026 15:13:56 +0800 Subject: [PATCH 13/18] feature fix mac os build fail bug. --- src/common_func/common_func.cpp | 8 +++++--- src/sentry_wrapper/SentryWrapper.cpp | 24 ++++++++++++++---------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/common_func/common_func.cpp b/src/common_func/common_func.cpp index 120985e138..410e31568f 100644 --- a/src/common_func/common_func.cpp +++ b/src/common_func/common_func.cpp @@ -120,6 +120,8 @@ namespace common { std::string localArea = ""; std::string cfgfile = ""; + std::string versionFilePath = ""; + #ifdef _WIN32 PWSTR pszPath = nullptr; @@ -137,7 +139,7 @@ namespace common #elif __APPLE__ const char* home_env = getenv("HOME"); - cfgfile = home_env; + versionFilePath = home_env; cfgfile = versionFilePath + "/Library/Application Support/Snapmaker_Orca/Snapmaker_Orca.conf"; #else @@ -160,7 +162,7 @@ namespace common std::string getLanguage() { std::string localLanguage = ""; - + std::string versionFilePath = ""; std::string cfgfile = ""; #ifdef _WIN32 @@ -179,7 +181,7 @@ namespace common #elif __APPLE__ const char* home_env = getenv("HOME"); - cfgfile = home_env; + versionFilePath = home_env; cfgfile = versionFilePath + "/Library/Application Support/Snapmaker_Orca/Snapmaker_Orca.conf"; #else diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index ef996b28b6..562e82b0d4 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -313,31 +313,35 @@ void sentryReportLogEx(SENTRY_LOG_LEVEL logLevel, sentry_value_set_by_key(tags, "local_area", attr); } switch (logLevel) { - case SENTRY_LOG_TRACE: - sentry_msg_level = SENTRY_LEVEL_TRACE; + case SENTRY_LOG_TRACE: { + sentry_msg_level = SENTRY_LEVEL_TRACE; sentry_value_t attr = sentry_value_new_attribute(sentry_value_new_string("snapmaker_bury_point"), NULL); sentry_value_set_by_key(tags, BURY_POINT, attr); sentry_log_trace(logContent.c_str(), tags); - break; - case SENTRY_LOG_DEBUG: + } break; + case SENTRY_LOG_DEBUG: { sentry_msg_level = SENTRY_LEVEL_DEBUG; sentry_log_debug(logContent.c_str(), tags); - break; - case SENTRY_LOG_INFO: + } break; + case SENTRY_LOG_INFO: { sentry_msg_level = SENTRY_LEVEL_INFO; sentry_log_info(logContent.c_str(), tags); - break; - case SENTRY_LOG_WARNING: + } break; + case SENTRY_LOG_WARNING: { sentry_msg_level = SENTRY_LEVEL_WARNING; sentry_log_warn(logContent.c_str(), tags); - break; + } break; case SENTRY_LOG_ERROR: + { sentry_msg_level = SENTRY_LEVEL_ERROR; sentry_log_error(logContent.c_str(), tags); + } break; - case SENTRY_LOG_FATAL: + case SENTRY_LOG_FATAL: + { sentry_msg_level = SENTRY_LEVEL_FATAL; sentry_log_fatal(logContent.c_str(), tags); + } break; default: return; } From e39befda0f7d4c49f23cdf4ca291233dcd157d27 Mon Sep 17 00:00:00 2001 From: alves Date: Fri, 9 Jan 2026 14:23:07 +0800 Subject: [PATCH 14/18] feature add parameter for print video. --- src/slic3r/GUI/ConfigManipulation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 367cd9d26a..b094f65ddc 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -846,7 +846,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co apply(config, &new_conf); } toggle_line("overhang_reverse_threshold", has_detect_overhang_wall && allow_overhang_reverse && has_overhang_reverse && !has_overhang_reverse_internal_only); - toggle_line("timelapse_type", is_BBL_Printer); + toggle_line("timelapse_type", true); bool have_small_area_infill_flow_compensation = config->opt_bool("small_area_infill_flow_compensation"); From 6b8b8b0e76b122c94b15badc8cde76f4598667f9 Mon Sep 17 00:00:00 2001 From: alves Date: Mon, 12 Jan 2026 14:50:37 +0800 Subject: [PATCH 15/18] feature crashpad need mac os 12.0 environment. --- CMakeLists.txt | 5 +++-- build_release_macos.sh | 2 +- deps/CMakeLists.txt | 5 +++-- src/dev-utils/platform/osx/Info.plist.in | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df6d220c1e..08855a48a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,9 +46,10 @@ You can do this in Environment Variables settings. endif () if (APPLE) - # if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3 + # Require macOS 12.0+ (Monterey) as minimum version + # This ensures proper "requires macOS 12.0" system dialog instead of crash on older systems if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) - set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum OS X deployment version" FORCE) endif () message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}") endif () diff --git a/build_release_macos.sh b/build_release_macos.sh index 16d86e36a5..5744cf21cf 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -82,7 +82,7 @@ if [ -z "$DEPS_CMAKE_GENERATOR" ]; then fi if [ -z "$OSX_DEPLOYMENT_TARGET" ]; then - export OSX_DEPLOYMENT_TARGET="11.3" + export OSX_DEPLOYMENT_TARGET="12.0" fi echo "Build params:" diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 4b0d02d2a8..c0cb5be71c 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -22,9 +22,10 @@ cmake_minimum_required(VERSION 3.2) if (APPLE) - # if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3 + # Require macOS 12.0+ (Monterey) as minimum version + # All deps must use the same deployment target for consistent behavior if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) - set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum OS X deployment version" FORCE) endif () message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}") diff --git a/src/dev-utils/platform/osx/Info.plist.in b/src/dev-utils/platform/osx/Info.plist.in index 5cb04bb0f8..d471724ee9 100644 --- a/src/dev-utils/platform/osx/Info.plist.in +++ b/src/dev-utils/platform/osx/Info.plist.in @@ -125,7 +125,7 @@ LSMinimumSystemVersion - 10.10 + 12.0 NSPrincipalClass NSApplication NSHighResolutionCapable From 4ff14ce96e8f517e03e5ba0a98384922122534e6 Mon Sep 17 00:00:00 2001 From: alves Date: Tue, 13 Jan 2026 16:07:52 +0800 Subject: [PATCH 16/18] feature add sub for privacy update flags for web control. --- src/slic3r/GUI/GUI_App.cpp | 21 +++++++++-- src/slic3r/GUI/GUI_App.hpp | 4 +-- src/slic3r/GUI/Preferences.cpp | 2 +- src/slic3r/GUI/SSWCP.cpp | 60 +++++++++++++++++++++++++++++-- src/slic3r/GUI/SSWCP.hpp | 4 +++ src/slic3r/GUI/WebGuideDialog.cpp | 2 +- 6 files changed, 85 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 905d9eaf6b..0d4ac1f262 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -7063,7 +7063,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage } auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); - set_privacy_policy(isAgree == "true"); + user_update_privacy_notify(isAgree == "true"); BOOST_LOG_TRIVIAL(warning) << "run_wizard changed the privacy policy with: " << (isAgree); return res; } @@ -7268,6 +7268,23 @@ void GUI_App::cache_notify(const std::string& key, const json& res) } } +void GUI_App::user_update_privacy_notify(const bool& res) +{ + set_privacy_policy(res); + + json data; + + data["privacy_policy_isagree"] = res; + + for (const auto& instance : m_user_update_privacy_subscribers) { + auto ptr = instance.second.lock(); + if (ptr) { + ptr->m_res_data = data; + ptr->send_to_js(); + } + } + +} void GUI_App::user_login_notify(const json& res) { @@ -7283,7 +7300,7 @@ void GUI_App::user_login_notify(const json& res) bool GUI_App::config_wizard_startup() { auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); - set_privacy_policy(isAgree == "true"); + user_update_privacy_notify(isAgree == "true"); BOOST_LOG_TRIVIAL(warning) << "config_wizard_startup changed the privacy policy with: " << (isAgree); if (!m_app_conf_exists || preset_bundle->printers.only_default_printers()) { BOOST_LOG_TRIVIAL(info) << "run wizard..."; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index da12caa315..1607110598 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -834,7 +834,7 @@ public: std::unordered_map> m_user_login_subscribers; std::unordered_map> m_device_card_subscribers; std::unordered_map> m_page_state_subscribers; - + std::unordered_map> m_user_update_privacy_subscribers; struct CachePairCompare { bool operator()(const std::pair>& lhs, @@ -850,7 +850,7 @@ public: void device_card_notify(const json& res); void page_state_notify_webview(wxWebView* webview, const std::string& state); void cache_notify(const std::string& key, const json& res); - + void user_update_privacy_notify(const bool& res); public: bool sm_disconnect_current_machine(bool need_reload_printerview = true); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 5909829264..7d83a7914f 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -752,7 +752,7 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa { app_config->set("app", "privacy_policy_isagree", checkbox->GetValue()); BOOST_LOG_TRIVIAL(warning) <<"create_item_checkbox changed the privacy policy with: "<<(checkbox->GetValue()?"true" : "false"); - set_privacy_policy(checkbox->GetValue()); + wxGetApp().user_update_privacy_notify(checkbox->GetValue()); } // if (param == "staff_pick_switch") { // bool pbool = app_config->get("staff_pick_switch") == "true"; diff --git a/src/slic3r/GUI/SSWCP.cpp b/src/slic3r/GUI/SSWCP.cpp index 70364b2ad5..bd30ea6cfb 100644 --- a/src/slic3r/GUI/SSWCP.cpp +++ b/src/slic3r/GUI/SSWCP.cpp @@ -1175,6 +1175,7 @@ void SSWCP_Instance::sw_UnsubscribeAll() { wxGetApp().m_recent_file_subscribers.clear(); wxGetApp().m_user_login_subscribers.clear(); wxGetApp().m_cache_subscribers.clear(); + wxGetApp().m_user_update_privacy_subscribers.clear(); send_to_js(); finish_job(); @@ -1217,6 +1218,15 @@ void SSWCP_Instance::sw_Webview_Unsubscribe() { } } + auto& privacy_map = wxGetApp().m_user_update_privacy_subscribers; + for (auto iter = privacy_map.begin(); iter != privacy_map.end();) { + if (iter->first == m_webview) { + iter = privacy_map.erase(iter); + } else { + iter++; + } + } + send_to_js(); finish_job(); } @@ -1233,6 +1243,7 @@ void SSWCP_Instance::sw_Unsubscribe_Filter() { auto& device_map = wxGetApp().m_device_card_subscribers; auto& login_map = wxGetApp().m_user_login_subscribers; + auto& privacy_map = wxGetApp().m_user_update_privacy_subscribers; auto& recent_file_map = wxGetApp().m_recent_file_subscribers; auto& cache_map = wxGetApp().m_cache_subscribers; @@ -1271,6 +1282,23 @@ void SSWCP_Instance::sw_Unsubscribe_Filter() { } } + for (auto iter = privacy_map.begin(); iter != privacy_map.end();) { + if (iter->first == m_webview) { + auto ptr = iter->second.lock(); + if (ptr) { + if (ptr->m_event_id == event_id) { + iter = privacy_map.erase(iter); + } else { + iter++; + } + } else { + iter = privacy_map.erase(iter); + } + } else { + iter++; + } + } + for (auto iter = recent_file_map.begin(); iter != recent_file_map.end();) { if (iter->first == m_webview) { auto ptr = iter->second.lock(); @@ -1339,7 +1367,26 @@ void SSWCP_Instance::sw_Unsubscribe_Filter() { iter++; } } - } else if (cmd == "sw_SubscribeLocalDevices") { + } else if (cmd == UPDATE_PRIVACY_STATUS) { + + for (auto iter = privacy_map.begin(); iter != privacy_map.end();) { + if (iter->first == m_webview) { + auto ptr = iter->second.lock(); + if (ptr) { + if (event_id == "" || (event_id != "" && event_id == ptr->m_event_id)) { + iter = privacy_map.erase(iter); + } else { + iter++; + } + } else { + iter = privacy_map.erase(iter); + } + } else { + iter++; + } + } + + }else if (cmd == "sw_SubscribeLocalDevices") { for (auto iter = device_map.begin(); iter != device_map.end();) { if (iter->first == m_webview) { auto ptr = iter->second.lock(); @@ -1373,7 +1420,7 @@ void SSWCP_Instance::sw_Unsubscribe_Filter() { iter++; } } - } + } send_to_js(); finish_job(); @@ -5941,6 +5988,15 @@ void SSWCP::on_webview_delete(wxWebView* view) } } + auto& privacy_map = wxGetApp().m_user_update_privacy_subscribers; + for (auto iter = privacy_map.begin(); iter != privacy_map.end();) { + if (iter->first == view) { + iter = privacy_map.erase(iter); + } else { + iter++; + } + } + auto& recent_file_map = wxGetApp().m_recent_file_subscribers; for (auto iter = recent_file_map.begin(); iter != recent_file_map.end();) { if (iter->first == view) { diff --git a/src/slic3r/GUI/SSWCP.hpp b/src/slic3r/GUI/SSWCP.hpp index 19b8d89093..a8af7daa7e 100644 --- a/src/slic3r/GUI/SSWCP.hpp +++ b/src/slic3r/GUI/SSWCP.hpp @@ -23,6 +23,8 @@ using namespace nlohmann; namespace asio = boost::asio; using tcp = asio::ip::tcp; +#define UPDATE_PRIVACY_STATUS "sw_SubUserUpdatePrivacy" + namespace Slic3r { namespace GUI { class WCP_Logger @@ -525,6 +527,8 @@ private: void sw_SubscribeUserLoginState(); + void sw_SubUserUpdatePrivacy(); + }; // Instance class for homepage business diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 045a099a8e..f80b5761aa 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -651,7 +651,7 @@ int GuideFrame::SaveProfile() // m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "0"); m_MainPtr->app_config->set("app", "privacy_policy_isagree", PrivacyUse); BOOST_LOG_TRIVIAL(warning) << "SaveProfile changed the privacy policy with: " << (PrivacyUse ? "true" : "false"); - set_privacy_policy(PrivacyUse); + wxGetApp().user_update_privacy_notify(PrivacyUse); m_MainPtr->app_config->set("region", m_Region); m_MainPtr->app_config->set_bool("stealth_mode", StealthMode); From dab81c330bccdbc6647cf5ec99e64f6bc3edcca3 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 14 Jan 2026 09:26:54 +0800 Subject: [PATCH 17/18] feature when webview init fail and log it. --- src/slic3r/GUI/GUI_App.cpp | 9 +++-- src/slic3r/GUI/PrinterWebView.cpp | 2 +- src/slic3r/GUI/ReleaseNote.cpp | 12 +++++++ src/slic3r/GUI/WebDeviceDialog.cpp | 14 +++++++- src/slic3r/GUI/WebDownPluginDlg.hpp | 2 +- src/slic3r/GUI/WebGuideDialog.cpp | 35 +++++++------------ src/slic3r/GUI/WebPreprintDialog.cpp | 16 +++++++-- src/slic3r/GUI/WebPresetDialog.cpp | 35 +++++++------------ src/slic3r/GUI/WebSMUserLoginDialog.cpp | 46 +++++++------------------ src/slic3r/GUI/WebUrlDialog.cpp | 16 +++++++-- src/slic3r/GUI/WebUserLoginDialog.cpp | 44 +++++++---------------- 11 files changed, 110 insertions(+), 121 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 0d4ac1f262..172aec2f2f 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4151,13 +4151,18 @@ wxString GUI_App::get_international_url(const wxString& origin_url) { string dark_mode = wxGetApp().app_config->get("dark_color_mode"); + auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); + std::string useAgree = (isAgree == "true" ? "1" : "0"); + if (baseUrl.find("?") != std::string::npos) { return baseUrl + wxString::FromUTF8("&locale=") + lang + wxString::FromUTF8("-") + region + - wxString::FromUTF8("&dark_mode=" + dark_mode); + wxString::FromUTF8("&dark_mode=" + dark_mode) + wxString::FromUTF8("&privacy_policy_isagree=" + useAgree); } else { return baseUrl + wxString::FromUTF8("?locale=") + lang + wxString::FromUTF8("-") + region + - wxString::FromUTF8("&dark_mode=" + dark_mode); + wxString::FromUTF8("&dark_mode=" + dark_mode) + wxString::FromUTF8("&privacy_policy_isagree=" + useAgree); } + + } bool GUI_App::is_user_login() diff --git a/src/slic3r/GUI/PrinterWebView.cpp b/src/slic3r/GUI/PrinterWebView.cpp index 4a8c42edc6..9af9872799 100644 --- a/src/slic3r/GUI/PrinterWebView.cpp +++ b/src/slic3r/GUI/PrinterWebView.cpp @@ -183,7 +183,7 @@ void PrinterWebView::OnError(wxWebViewEvent &evt) e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": error loading page %1% %2% %3% %4%") %evt.GetURL() %evt.GetTarget() %e %evt.GetString(); + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":PrinterWebView error loading page %1% %2% %3% %4%") %evt.GetURL() %evt.GetTarget() %e %evt.GetString(); } void PrinterWebView::OnLoaded(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 4889537145..42629f2ba7 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -445,6 +445,18 @@ void UpdateVersionDialog::OnTitleChanged(wxWebViewEvent& event) } void UpdateVersionDialog::OnError(wxWebViewEvent& event) { + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; + } + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":UpdateVersionDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e %event.GetString(); event.Skip(); } diff --git a/src/slic3r/GUI/WebDeviceDialog.cpp b/src/slic3r/GUI/WebDeviceDialog.cpp index 1ff52b0162..ba9b5f66d8 100644 --- a/src/slic3r/GUI/WebDeviceDialog.cpp +++ b/src/slic3r/GUI/WebDeviceDialog.cpp @@ -105,7 +105,19 @@ void WebDeviceDialog::OnDocumentLoaded(wxWebViewEvent &evt) void WebDeviceDialog::OnError(wxWebViewEvent &evt) { - wxLogError("Web View Error: %s", evt.GetString()); + auto e = "unknown error"; + switch (evt.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; + } + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebDeviceDialog error loading page %1% %2% %3% %4%") % evt.GetURL() % evt.GetTarget() % e %evt.GetString(); + } void WebDeviceDialog::OnScriptMessage(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/WebDownPluginDlg.hpp b/src/slic3r/GUI/WebDownPluginDlg.hpp index c05de098e5..1ecf1581ce 100644 --- a/src/slic3r/GUI/WebDownPluginDlg.hpp +++ b/src/slic3r/GUI/WebDownPluginDlg.hpp @@ -29,7 +29,7 @@ #include "GUI_App.hpp" namespace Slic3r { namespace GUI { - +//not use on snapmaker orca class DownPluginFrame : public wxDialog { public: diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index f80b5761aa..dc0f7ca493 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -596,32 +596,21 @@ void GuideFrame::OnRunScriptArrayWithEmulationLevel(wxCommandEvent &WXUNUSED(evt /** * Callback invoked when a loading error occurs */ -void GuideFrame::OnError(wxWebViewEvent &evt) +void GuideFrame::OnError(wxWebViewEvent& event) { -#define WX_ERROR_CASE(type) \ - case type: category = #type; break; - - wxString category; - switch (evt.GetInt()) { - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CONNECTION); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CERTIFICATE); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_AUTH); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_SECURITY); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_NOT_FOUND); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_REQUEST); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_USER_CANCELLED); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } - // wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + - // category + " (" + evt.GetString() + ")'"); - - // Show the info bar with an error - // m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + - // "\n" + "'" + category + "'", wxICON_ERROR); - BOOST_LOG_TRIVIAL(trace) << "GuideFrame::OnError: An error occurred loading " << evt.GetURL() << category; - - UpdateState(); + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":GuideFrame error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); } void GuideFrame::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebPreprintDialog.cpp b/src/slic3r/GUI/WebPreprintDialog.cpp index 6267a457af..aac8f37ad3 100644 --- a/src/slic3r/GUI/WebPreprintDialog.cpp +++ b/src/slic3r/GUI/WebPreprintDialog.cpp @@ -151,9 +151,21 @@ void WebPreprintDialog::OnDocumentLoaded(wxWebViewEvent &evt) evt.Skip(); } -void WebPreprintDialog::OnError(wxWebViewEvent &evt) +void WebPreprintDialog::OnError(wxWebViewEvent &event) { - wxLogError("Web View Error: %s", evt.GetString()); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; + } + + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebPreprintDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); } void WebPreprintDialog::OnScriptMessage(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/WebPresetDialog.cpp b/src/slic3r/GUI/WebPresetDialog.cpp index 3143ac2f76..1e59b48d5c 100644 --- a/src/slic3r/GUI/WebPresetDialog.cpp +++ b/src/slic3r/GUI/WebPresetDialog.cpp @@ -692,32 +692,21 @@ void WebPresetDialog::OnRunScriptArrayWithEmulationLevel(wxCommandEvent& WXUNUSE /** * Callback invoked when a loading error occurs */ -void WebPresetDialog::OnError(wxWebViewEvent& evt) +void WebPresetDialog::OnError(wxWebViewEvent& event) { -#define WX_ERROR_CASE(type) \ - case type: category = #type; break; - - wxString category; - switch (evt.GetInt()) { - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CONNECTION); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CERTIFICATE); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_AUTH); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_SECURITY); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_NOT_FOUND); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_REQUEST); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_USER_CANCELLED); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } - // wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + - // category + " (" + evt.GetString() + ")'"); - - // Show the info bar with an error - // m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + - // "\n" + "'" + category + "'", wxICON_ERROR); - BOOST_LOG_TRIVIAL(trace) << "WebPresetDialog::OnError: An error occurred loading " << evt.GetURL() << category; - - UpdateState(); + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebPresetDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); } void WebPresetDialog::OnScriptResponseMessage(wxCommandEvent& WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebSMUserLoginDialog.cpp b/src/slic3r/GUI/WebSMUserLoginDialog.cpp index 5292c4cd67..85367b5479 100644 --- a/src/slic3r/GUI/WebSMUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebSMUserLoginDialog.cpp @@ -387,42 +387,20 @@ void SMUserLogin::OnRunScriptArrayWithEmulationLevel(wxCommandEvent &WXUNUSED(ev /** * Callback invoked when a loading error occurs */ -void SMUserLogin::OnError(wxWebViewEvent &evt) +void SMUserLogin::OnError(wxWebViewEvent &event) { -#define WX_ERROR_CASE(type) \ - case type: category = #type; break; - - wxString category; - switch (evt.GetInt()) { - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CONNECTION); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CERTIFICATE); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_AUTH); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_SECURITY); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_NOT_FOUND); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_REQUEST); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_USER_CANCELLED); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } - - if( evt.GetInt()==wxWEBVIEW_NAV_ERR_CONNECTION ) - { - if(m_timer!=NULL) - m_timer->Stop(); - - m_networkOk = false; - - if (m_networkOk==false) - ShowErrorPage(); - } - - // wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + - // category + " (" + evt.GetString() + ")'"); - - // Show the info bar with an error - // m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + - // "\n" + "'" + category + "'", wxICON_ERROR); - - UpdateState(); + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":SMUserLogin error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); } void SMUserLogin::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebUrlDialog.cpp b/src/slic3r/GUI/WebUrlDialog.cpp index b410cdcf54..f81852a077 100644 --- a/src/slic3r/GUI/WebUrlDialog.cpp +++ b/src/slic3r/GUI/WebUrlDialog.cpp @@ -114,9 +114,21 @@ void WebUrlDialog::OnDocumentLoaded(wxWebViewEvent &evt) evt.Skip(); } -void WebUrlDialog::OnError(wxWebViewEvent &evt) +void WebUrlDialog::OnError(wxWebViewEvent &event) { - wxLogError("Web View Error: %s", evt.GetString()); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; + } + + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebUrlDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); } void WebUrlDialog::OnScriptMessage(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 5afc43568a..2cca78168a 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -361,40 +361,20 @@ void ZUserLogin::OnRunScriptArrayWithEmulationLevel(wxCommandEvent &WXUNUSED(evt /** * Callback invoked when a loading error occurs */ -void ZUserLogin::OnError(wxWebViewEvent &evt) +void ZUserLogin::OnError(wxWebViewEvent &event) { -#define WX_ERROR_CASE(type) \ - case type: category = #type; break; - - wxString category; - switch (evt.GetInt()) { - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CONNECTION); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CERTIFICATE); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_AUTH); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_SECURITY); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_NOT_FOUND); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_REQUEST); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_USER_CANCELLED); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } - - if( evt.GetInt()==wxWEBVIEW_NAV_ERR_CONNECTION ) - { - if(m_timer!=NULL) - m_timer->Stop(); - - if (m_networkOk==false) - ShowErrorPage(); - } - - // wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + - // category + " (" + evt.GetString() + ")'"); - - // Show the info bar with an error - // m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + - // "\n" + "'" + category + "'", wxICON_ERROR); - - UpdateState(); + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":ZUserLogin error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); } void ZUserLogin::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) From 2519603b3dccf922ec141ed4ed9bb4eaba837752 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 14 Jan 2026 11:07:26 +0800 Subject: [PATCH 18/18] feature add bury point for webview init. --- src/slic3r/GUI/MarkdownTip.cpp | 14 ++++++++ src/slic3r/GUI/PrinterWebView.cpp | 2 ++ src/slic3r/GUI/ReleaseNote.cpp | 2 ++ src/slic3r/GUI/WebDeviceDialog.cpp | 3 +- src/slic3r/GUI/WebGuideDialog.cpp | 3 +- src/slic3r/GUI/WebPreprintDialog.cpp | 2 ++ src/slic3r/GUI/WebPresetDialog.cpp | 3 +- src/slic3r/GUI/WebSMUserLoginDialog.cpp | 1 + src/slic3r/GUI/WebUrlDialog.cpp | 2 ++ src/slic3r/GUI/WebUserLoginDialog.cpp | 3 +- src/slic3r/GUI/WebViewDialog.cpp | 44 ++++++++----------------- 11 files changed, 45 insertions(+), 34 deletions(-) diff --git a/src/slic3r/GUI/MarkdownTip.cpp b/src/slic3r/GUI/MarkdownTip.cpp index 7ffeae9e36..bfd9608a0e 100644 --- a/src/slic3r/GUI/MarkdownTip.cpp +++ b/src/slic3r/GUI/MarkdownTip.cpp @@ -8,6 +8,7 @@ #include "I18N.hpp" #include +#include "sentry_wrapper/SentryWrapper.hpp" namespace fs = boost::filesystem; @@ -268,6 +269,19 @@ void MarkdownTip::OnTitleChanged(wxWebViewEvent& event) } void MarkdownTip::OnError(wxWebViewEvent& event) { + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; + } + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":MarkdownTip error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init MarkdownTip webview fail", BP_WEB_VIEW); } void MarkdownTip::OnTimer(wxTimerEvent& event) diff --git a/src/slic3r/GUI/PrinterWebView.cpp b/src/slic3r/GUI/PrinterWebView.cpp index 9af9872799..e2cb533bbd 100644 --- a/src/slic3r/GUI/PrinterWebView.cpp +++ b/src/slic3r/GUI/PrinterWebView.cpp @@ -15,6 +15,7 @@ #include #include #include "slic3r/GUI/SSWCP.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" namespace pt = boost::property_tree; @@ -184,6 +185,7 @@ void PrinterWebView::OnError(wxWebViewEvent &evt) break; } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":PrinterWebView error loading page %1% %2% %3% %4%") %evt.GetURL() %evt.GetTarget() %e %evt.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init PrinterWebView webview fail", BP_WEB_VIEW); } void PrinterWebView::OnLoaded(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 42629f2ba7..b8f2b0a210 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -24,6 +24,7 @@ #include "Plater.hpp" #include "BitmapCache.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" namespace Slic3r { namespace GUI { @@ -457,6 +458,7 @@ void UpdateVersionDialog::OnError(wxWebViewEvent& event) case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":UpdateVersionDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e %event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init UpdateVersionDialog webview fail", BP_WEB_VIEW); event.Skip(); } diff --git a/src/slic3r/GUI/WebDeviceDialog.cpp b/src/slic3r/GUI/WebDeviceDialog.cpp index ba9b5f66d8..c7addbad3a 100644 --- a/src/slic3r/GUI/WebDeviceDialog.cpp +++ b/src/slic3r/GUI/WebDeviceDialog.cpp @@ -5,6 +5,7 @@ #include "SSWCP.hpp" #include #include +#include "sentry_wrapper/SentryWrapper.hpp" namespace Slic3r { namespace GUI { @@ -117,7 +118,7 @@ void WebDeviceDialog::OnError(wxWebViewEvent &evt) case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebDeviceDialog error loading page %1% %2% %3% %4%") % evt.GetURL() % evt.GetTarget() % e %evt.GetString(); - + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init WebDeviceDialog webview fail", BP_WEB_VIEW); } void WebDeviceDialog::OnScriptMessage(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index dc0f7ca493..7b4eee552e 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -34,7 +34,7 @@ #include #include "CreatePresetsDialog.hpp" #include -#include "bury_cfg/bury_point.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" using namespace nlohmann; @@ -611,6 +611,7 @@ void GuideFrame::OnError(wxWebViewEvent& event) } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":GuideFrame error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init GuideFrame webview fail", BP_WEB_VIEW); } void GuideFrame::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebPreprintDialog.cpp b/src/slic3r/GUI/WebPreprintDialog.cpp index aac8f37ad3..7068d93ab2 100644 --- a/src/slic3r/GUI/WebPreprintDialog.cpp +++ b/src/slic3r/GUI/WebPreprintDialog.cpp @@ -6,6 +6,7 @@ #include #include #include "NotificationManager.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" namespace Slic3r { namespace GUI { @@ -166,6 +167,7 @@ void WebPreprintDialog::OnError(wxWebViewEvent &event) } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebPreprintDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init WebPreprintDialog webview fail", BP_WEB_VIEW); } void WebPreprintDialog::OnScriptMessage(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/WebPresetDialog.cpp b/src/slic3r/GUI/WebPresetDialog.cpp index 1e59b48d5c..b38bda9da4 100644 --- a/src/slic3r/GUI/WebPresetDialog.cpp +++ b/src/slic3r/GUI/WebPresetDialog.cpp @@ -6,7 +6,7 @@ #include "libslic3r/AppConfig.hpp" #include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" -#include "common_func/common_func.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" #include #include @@ -707,6 +707,7 @@ void WebPresetDialog::OnError(wxWebViewEvent& event) } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebPresetDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init WebPresetDialog webview fail", BP_WEB_VIEW); } void WebPresetDialog::OnScriptResponseMessage(wxCommandEvent& WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebSMUserLoginDialog.cpp b/src/slic3r/GUI/WebSMUserLoginDialog.cpp index 85367b5479..94ab2680d7 100644 --- a/src/slic3r/GUI/WebSMUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebSMUserLoginDialog.cpp @@ -401,6 +401,7 @@ void SMUserLogin::OnError(wxWebViewEvent &event) case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":SMUserLogin error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init SMUserLogin webview fail", BP_WEB_VIEW); } void SMUserLogin::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebUrlDialog.cpp b/src/slic3r/GUI/WebUrlDialog.cpp index f81852a077..c6ea8de44b 100644 --- a/src/slic3r/GUI/WebUrlDialog.cpp +++ b/src/slic3r/GUI/WebUrlDialog.cpp @@ -6,6 +6,7 @@ #include "SSWCP.hpp" #include #include +#include "sentry_wrapper/SentryWrapper.hpp" namespace Slic3r { namespace GUI { @@ -129,6 +130,7 @@ void WebUrlDialog::OnError(wxWebViewEvent &event) } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":WebUrlDialog error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init WebUrlDialog webview fail", BP_WEB_VIEW); } void WebUrlDialog::OnScriptMessage(wxWebViewEvent &evt) diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 2cca78168a..21aa1c68fc 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -5,7 +5,7 @@ #include "libslic3r/AppConfig.hpp" #include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" -#include "common_func/common_func.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" #include #include @@ -375,6 +375,7 @@ void ZUserLogin::OnError(wxWebViewEvent &event) case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":ZUserLogin error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init ZUserLogin webview fail", BP_WEB_VIEW); } void ZUserLogin::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index 98aa42af2a..ac4c26943b 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -4,7 +4,7 @@ #include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/MainFrame.hpp" -#include "common_func/common_func.hpp" +#include "sentry_wrapper/SentryWrapper.hpp" #include "../Utils/Http.hpp" #include "SSWCP.hpp" @@ -894,37 +894,21 @@ void WebViewPanel::OnSelectAll(wxCommandEvent& WXUNUSED(evt)) /** * Callback invoked when a loading error occurs */ -void WebViewPanel::OnError(wxWebViewEvent& evt) +void WebViewPanel::OnError(wxWebViewEvent& event) { -#define WX_ERROR_CASE(type) \ - case type: \ - category = #type; \ - break; - - wxString category; - switch (evt.GetInt()) - { - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CONNECTION); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_CERTIFICATE); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_AUTH); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_SECURITY); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_NOT_FOUND); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_REQUEST); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_USER_CANCELLED); - WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER); + auto e = "unknown error"; + switch (event.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: e = "wxWEBVIEW_NAV_ERR_CONNECTION"; break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; break; + case wxWEBVIEW_NAV_ERR_AUTH: e = "wxWEBVIEW_NAV_ERR_AUTH"; break; + case wxWEBVIEW_NAV_ERR_SECURITY: e = "wxWEBVIEW_NAV_ERR_SECURITY"; break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; break; + case wxWEBVIEW_NAV_ERR_REQUEST: e = "wxWEBVIEW_NAV_ERR_REQUEST"; break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; break; + case wxWEBVIEW_NAV_ERR_OTHER: e = "wxWEBVIEW_NAV_ERR_OTHER"; break; } - - BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": [" << category << "] " << evt.GetString().ToUTF8().data(); - - if (wxGetApp().get_mode() == comDevelop) - { - wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + category + " (" + evt.GetString() + ")'"); - - // Show the info bar with an error - m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + "\n" + "'" + category + "'", wxICON_ERROR); - } - - UpdateState(); + BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__<< boost::format(":PrinterWebView error loading page %1% %2% %3% %4%") % event.GetURL() % event.GetTarget() %e % event.GetString(); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_init WebViewPanel webview fail", BP_WEB_VIEW); }