From 4f07b6552544a8c0b5fd7f1516cdfebd8ba43e79 Mon Sep 17 00:00:00 2001 From: alves Date: Tue, 23 Dec 2025 17:03:21 +0800 Subject: [PATCH 01/12] fix build all yml version not corecet --- .github/workflows/build_all.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 2fe102dbe1..640f110c43 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -151,7 +151,7 @@ jobs: if-no-files-found: error - name: Deploy Flatpak to nightly release - if: ${{github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1'}} + if: ${{github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0'}} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} From f121f453900d5347faeb49dae609ffe1bb50a2a1 Mon Sep 17 00:00:00 2001 From: alves Date: Tue, 23 Dec 2025 18:04:33 +0800 Subject: [PATCH 02/12] fix lost User Experience on settings --- src/libslic3r/AppConfig.cpp | 2 +- src/slic3r/GUI/GUI_App.cpp | 4 ++-- src/slic3r/GUI/Preferences.cpp | 23 +++++++++++++++++++++++ src/slic3r/GUI/WebGuideDialog.cpp | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index bca966900a..a1eaf50ecc 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -89,7 +89,7 @@ bool AppConfig::get_stealth_mode() return true; } - auto isAgree = get("snapmaker_privacy_policy", "isagree"); + auto isAgree = get("app", "privacy_policy_isagree"); if (isAgree.empty()) { diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 02ef34d6b0..98ad45f5e8 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3764,7 +3764,7 @@ if (res) { } catch (std::exception &) { // wxMessageBox(e.what(), "", MB_OK); } - auto isAgree = wxGetApp().app_config->get("snapmaker_privacy_policy", "isagree"); + auto isAgree = wxGetApp().app_config->get("app", "isagree"); set_privacy_policy(isAgree == "true"); } @@ -7072,7 +7072,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage mainframe->refresh_plugin_tips(); // BBS: remove SLA related message } - auto isAgree = wxGetApp().app_config->get("snapmaker_privacy_policy", "isagree"); + auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); set_privacy_policy(isAgree == "true"); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index f902e5208d..f8f30cb809 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -19,6 +19,8 @@ #include #include +#include "sentry_wrapper/SentryWrapper.hpp" + #ifdef __WINDOWS__ #ifdef _MSW_DARK_MODE #include "dark_mode.hpp" @@ -746,6 +748,8 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa app_config->set_bool(param, checkbox->GetValue()); app_config->save(); + if (param == "privacy_policy_isagree") + set_privacy_policy(checkbox->GetValue()); // if (param == "staff_pick_switch") { // bool pbool = app_config->get("staff_pick_switch") == "true"; // wxGetApp().switch_staff_pick(pbool); @@ -1285,6 +1289,22 @@ wxWindow* PreferencesDialog::create_general_page() auto item_darkmode = create_item_darkmode_checkbox(_L("Enable Dark mode"), page,_L("Enable Dark mode"), 50, "dark_color_mode"); #endif + std::string enUrl = "https://www.snapmaker.com/privacy-policy"; + std::string cnUrl = "https://www.snapmaker.cn/privacy-policy"; + auto app_config = wxGetApp().app_config; + std::string region = app_config->get("language"); + + auto title_user_experience = create_item_title(_L("User Experience"), page, _L("User Experience")); + auto item_priv_policy = create_item_checkbox(_L("Join Customer Experience Improvement Program."), page, _L(""), 50, "privacy_policy_isagree"); + wxHyperlinkCtrl* hyperlink = nullptr; + if (region.empty() || region != "zh_CN") + hyperlink = new wxHyperlinkCtrl(page, wxID_ANY, _L("What data would be collected?"), enUrl); + else + hyperlink = new wxHyperlinkCtrl(page, wxID_ANY, _L("What data would be collected?"), cnUrl); + + hyperlink->SetFont(Label::Head_13); + item_priv_policy->Add(hyperlink, 0, wxALIGN_CENTER, 0); + auto title_develop_mode = create_item_title(_L("Develop mode"), page, _L("Develop mode")); auto item_develop_mode = create_item_checkbox(_L("Develop mode"), page, _L("Develop mode"), 50, "developer_mode"); auto item_skip_ams_blacklist_check = create_item_checkbox(_L("Skip AMS blacklist check"), page, _L("Skip AMS blacklist check"), 50, "skip_ams_blacklist_check"); @@ -1364,6 +1384,9 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(title_develop_mode, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_develop_mode, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_skip_ams_blacklist_check, 0, wxTOP, FromDIP(3)); + + sizer_page->Add(title_user_experience, 0, wxTOP, FromDIP(20)); + sizer_page->Add(item_priv_policy, 0, wxTOP, FromDIP(3)); page->SetSizer(sizer_page); page->Layout(); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 0deb478fab..672bd516af 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -648,7 +648,7 @@ int GuideFrame::SaveProfile() // m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "1"); // } else // m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "0"); - m_MainPtr->app_config->set("snapmaker_privacy_policy", "isagree", PrivacyUse); + m_MainPtr->app_config->set("app", "privacy_policy_isagree", PrivacyUse); m_MainPtr->app_config->set("region", m_Region); m_MainPtr->app_config->set_bool("stealth_mode", StealthMode); From 2b7aee0050ad966fb18fb5887b55db01436b2060 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 24 Dec 2025 10:45:35 +0800 Subject: [PATCH 03/12] feature add address host name for bury point --- src/bury_cfg/bury_point.hpp | 18 ++-- src/common_func/common_func.cpp | 121 ++++++++++++++++++++++++++- src/common_func/common_func.hpp | 6 +- src/sentry_wrapper/SentryWrapper.cpp | 15 +++- src/slic3r/GUI/HttpServer.cpp | 8 +- src/slic3r/GUI/Widgets/WebView.cpp | 2 +- src/slic3r/Utils/MoonRaker.cpp | 4 +- 7 files changed, 152 insertions(+), 22 deletions(-) diff --git a/src/bury_cfg/bury_point.hpp b/src/bury_cfg/bury_point.hpp index 9089fae41a..e4e477c4da 100644 --- a/src/bury_cfg/bury_point.hpp +++ b/src/bury_cfg/bury_point.hpp @@ -17,21 +17,21 @@ #define BURY_POINT "bury_point" #define BP_START_SOFT "bury_point_start_soft" -#define BP_SOFT_WORKS_TIME "soft_works_time" +#define BP_SOFT_WORKS_TIME "bury_point_soft_works_time" #define BP_DEIVCE_CONNECT "bury_point_device_connect" -#define BP_CONNECT_DEVICE_ID "device_id" -#define BP_CONNECT_NET_TYPE "net_type" +#define BP_CONNECT_DEVICE_ID "bury_point_device_id" +#define BP_CONNECT_NET_TYPE "bury_point_net_type" #define BP_LOGIN "bury_point_login" -#define BP_LOGIN_USER_ID "user_id" -#define BP_LOGIN_HTTP_CODE "http_code" +#define BP_LOGIN_USER_ID "bury_point_user_id" +#define BP_LOGIN_HTTP_CODE "bury_point_http_code" #define BP_VIDEO_START "bury_point_video_start" -#define BP_VIDEO_STATUS "video_status" +#define BP_VIDEO_STATUS "bury_point_video_status" #define BP_DEVICE_ERROR "bury_point_device_error" -#define BP_DEVICE_ERROR_STATUS "error_status" +#define BP_DEVICE_ERROR_STATUS "bury_point_error_status" #define BP_UPLOAD "bury_point_upload" @@ -42,7 +42,7 @@ #define BP_VIDEO_ABNORMAL "bury_point_video_abnormal" #define BP_SLICE_DURATION "bury_point_slice_duration" -#define BP_SLICE_DURATION_TIME "slice_duration_time" +#define BP_SLICE_DURATION_TIME "bury_point_slice_duration_time" #define BP_WEB_VIEW "bury_point_webview" @@ -51,7 +51,7 @@ #define BP_LOCAL_SERVER_ERROR_CODE "bury_point_local_server_error_code" #define BP_LOCAL_SERVER "bury_point_local_server" -#define BP_LOCAL_SERVER_ERR_CODE "bury_local_server_err_code" +#define BP_LOCAL_SERVER_ERR_CODE "bury_point_local_server_err_code" diff --git a/src/common_func/common_func.cpp b/src/common_func/common_func.cpp index c2c7060fb4..eb0ba2a203 100644 --- a/src/common_func/common_func.cpp +++ b/src/common_func/common_func.cpp @@ -4,7 +4,8 @@ #ifdef _WIN32 #include #include - +#include +#pragma comment(lib, "iphlpapi.lib") #elif __APPLE__ #include #endif @@ -19,6 +20,124 @@ namespace common return boost::asio::ip::host_name(); } + std::string getMachineId() + { + std::string machineId = std::string(); +#ifdef _WIN32 + + auto wstringTostring = [](std::wstring wTmpStr) -> std::string { + std::string resStr = std::string(); + int len = WideCharToMultiByte(CP_UTF8, 0, wTmpStr.c_str(), -1, nullptr, 0, nullptr, nullptr); + + if (len <= 0) + return std::string(); + std::string desStr(len, 0); + + WideCharToMultiByte(CP_UTF8, 0, wTmpStr.c_str(), -1, &desStr[0], len, nullptr, nullptr); + + resStr = desStr; + + return resStr; + }; + + HKEY key = NULL; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Cryptography", 0, KEY_READ | KEY_WOW64_64KEY, &key) == ERROR_SUCCESS) { + wchar_t buffer[1024]; + memset(buffer, 0, sizeof(wchar_t) * 1024); + DWORD size = sizeof(buffer); + bool ok = (RegQueryValueEx(key, L"MachineGuid", NULL, NULL, (LPBYTE) buffer, &size) == ERROR_SUCCESS); + RegCloseKey(key); + if (ok) { + machineId = wstringTostring(buffer); + } + } + +#elif __APPLE__ + FILE* fp = NULL; + char buffer[1024]; + + memset(buffer, 0, 1024); + io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice")); + CFStringRef strRef = (CFStringRef) IORegistryEntryCreateCFProperty(service, CFSTR(kIOPlatformUUIDKey), kCFAllocatorDefault, 0); + CFStringGetCString(strRef, buffer, 1024, kCFStringEncodingMacRoman); + machineId = buffer; + +#endif // _WIN32 + return machineId; + } + + std::string getMacAddress() + { + std::string macAddress = std::string(); + +#ifndef __APPLE__ + ULONG ulBufferSize = 0; + DWORD dwResult = ::GetAdaptersInfo(NULL, &ulBufferSize); + if (ERROR_BUFFER_OVERFLOW != dwResult) { + return std::string(); + } + + PIP_ADAPTER_INFO pAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[ulBufferSize]; + if (!pAdapterInfo) { + return std::string(); + } + + dwResult = ::GetAdaptersInfo(pAdapterInfo, &ulBufferSize); + if (ERROR_SUCCESS != dwResult) { + delete[] pAdapterInfo; + return std::string(); + } + + BYTE pMac[MAX_ADAPTER_ADDRESS_LENGTH] = {0}; + int nLen = MAX_ADAPTER_ADDRESS_LENGTH; + + if (NULL != pAdapterInfo) { + PIP_ADDR_STRING pAddTemp = &(pAdapterInfo->IpAddressList); + + if (NULL != pAddTemp) { + for (int i = 0; i < (int) pAdapterInfo->AddressLength; ++i) { + pMac[i] = pAdapterInfo->Address[i]; + } + nLen = pAdapterInfo->AddressLength; + } + } + delete[] pAdapterInfo; + + auto Encode16 = [](const BYTE* buf, int len) -> std::wstring { + const WCHAR strHex[] = L"0123456789ABCDEF"; + std::wstring wstr; + wstr.resize(len * 2); + for (int i = 0; i < len; ++i) { + wstr[i * 2 + 0] = strHex[buf[i] >> 4]; + wstr[i * 2 + 1] = strHex[buf[i] & 0xf]; + } + return wstr; + }; + + auto wstringTostring = [](std::wstring wTmpStr) -> std::string { + std::string resStr = std::string(); + int len = WideCharToMultiByte(CP_UTF8, 0, wTmpStr.c_str(), -1, nullptr, 0, nullptr, nullptr); + + if (len <= 0) + return std::string(); + std::string desStr(len, 0); + + WideCharToMultiByte(CP_UTF8, 0, wTmpStr.c_str(), -1, &desStr[0], len, nullptr, nullptr); + + resStr = desStr; + + return resStr; + }; + + std::wstring strMac = Encode16(pMac, nLen); + macAddress = wstringTostring(strMac); +#else + // todo get mac macaddress +#endif + return macAddress; + } + + std::string get_flutter_version() { diff --git a/src/common_func/common_func.hpp b/src/common_func/common_func.hpp index 0a0d007703..32838ed652 100644 --- a/src/common_func/common_func.hpp +++ b/src/common_func/common_func.hpp @@ -22,6 +22,10 @@ namespace common std::string get_pc_name(); std::string get_flutter_version(); -} // namespace common + + std::string getMachineId(); + + std::string getMacAddress(); + } // namespace common #endif \ No newline at end of file diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index bbcb05545e..a7d7595754 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -190,9 +190,6 @@ void initSentryEx() if (!dataBaseDir.empty()) sentry_options_set_database_path(options, dataBaseDir.c_str()); - std::string softVersion = "snapmaker_orca_2.2.0_beta2"; - sentry_options_set_release(options, softVersion.c_str()); - #if defined(_DEBUG) || !defined(NDEBUG) sentry_options_set_debug(options, 1); #else @@ -219,7 +216,17 @@ void initSentryEx() if (!flutterVersion.empty()) sentry_set_tag("flutter_version", flutterVersion.c_str()); - //sentryReportLog(SENTRY_LOG_ERROR, "init sentry error", "initSentry module"); + std::string machineID = common::getMachineId(); + if (!machineID.empty()) + sentry_set_tag("machine_id", machineID.c_str()); + + std::string macAdress = common::getMacAddress(); + if (!macAdress.empty()) + sentry_set_tag("macaddress", macAdress.c_str()); + + std::string pcName = common::get_pc_name(); + if (!pcName.empty()) + sentry_set_tag("pc_name", pcName.c_str()); } } diff --git a/src/slic3r/GUI/HttpServer.cpp b/src/slic3r/GUI/HttpServer.cpp index b9085a0a29..f2a01268af 100644 --- a/src/slic3r/GUI/HttpServer.cpp +++ b/src/slic3r/GUI/HttpServer.cpp @@ -293,7 +293,7 @@ void HttpServer::start() server_->io_service.run(); } catch (const std::exception& e) { BOOST_LOG_TRIVIAL(error) << "HTTP server error: " << e.what(); - Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL,std::string("HttpServer::start ") + e.what(), BP_LOCAL_SERVER); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL,std::string("bury_point_HttpServer::start ") + e.what(), BP_LOCAL_SERVER); start_http_server = false; } }); @@ -315,7 +315,7 @@ void HttpServer::start() } catch (const std::exception& e) { BOOST_LOG_TRIVIAL(error) << "Failed to start HTTP server: " << e.what(); - std::string error_msg = "Failed to start HTTP server on port " + std::to_string(port) + ": " + e.what(); + std::string error_msg = "bury_point_Failed to start HTTP server on port " + std::to_string(port) + ": " + e.what(); Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, error_msg.c_str(), BP_LOCAL_SERVER); start_http_server = false; throw; @@ -464,7 +464,7 @@ void HttpServer::start_health_check() BOOST_LOG_TRIVIAL(info) << "HTTP server restart completed by health check thread"; } catch (const std::exception& e) { BOOST_LOG_TRIVIAL(error) << "Failed to restart HTTP server: " << e.what(); - std::string error_msg = "HTTP server restart failed after health check on port " + std::to_string(port) + ": " + e.what(); + std::string error_msg = "bury_point_HTTP server restart failed after health check on port " + std::to_string(port) + ": " + e.what(); Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, error_msg.c_str(), BP_LOCAL_SERVER); } } else if (start_http_server) { @@ -662,7 +662,7 @@ std::shared_ptr HttpServer::bbl_auth_handle_request(const user_account = user_j["account"].get(); } catch (const std::exception& e) { BOOST_LOG_TRIVIAL(error) << "Failed to parse user profile JSON: " << e.what(); - std::string error_msg = "User profile JSON parse error: " + std::string(e.what()); + std::string error_msg = "bury_point_User profile JSON parse error: " + std::string(e.what()); Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, error_msg.c_str(), BP_LOCAL_SERVER); } json j; diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index e9ba1a16f1..c388f39ed4 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -314,7 +314,7 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) webView->EnableContextMenu(true); } else { BOOST_LOG_TRIVIAL(fatal) << __FUNCTION__ << ": failed. Use fake web view."; - Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "create webview fail and use fakewebview", BP_WEB_VIEW); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_FATAL, "bury_point_create webview fail and use fakewebview", BP_WEB_VIEW); webView = new FakeWebView; } webView->SetRefData(new WebViewRef(webView)); diff --git a/src/slic3r/Utils/MoonRaker.cpp b/src/slic3r/Utils/MoonRaker.cpp index 9c9be94399..af92115ec9 100644 --- a/src/slic3r/Utils/MoonRaker.cpp +++ b/src/slic3r/Utils/MoonRaker.cpp @@ -2288,7 +2288,7 @@ void Moonraker_Mqtt::async_camera_start(const std::string& domain, int interval, callback) { BOOST_LOG_TRIVIAL(error) << "[Moonraker_Mqtt] 发送启动摄像头监控请求失败"; wcp_loger.add_log("发送启动摄像头监控请求失败", false, "", "Moonraker_Mqtt", "error"); - sentryReportLog(SENTRY_LOG_TRACE, "open video cmd error", BP_VIDEO_ABNORMAL); + sentryReportLog(SENTRY_LOG_TRACE, "bury_point_open video cmd error", BP_VIDEO_ABNORMAL); callback(json::value_t::null); } } @@ -2338,7 +2338,7 @@ void Moonraker_Mqtt::async_canmera_stop(const std::string& domain, std::function callback) { BOOST_LOG_TRIVIAL(error) << "[Moonraker_Mqtt] 发送停止摄像头监控请求失败"; wcp_loger.add_log("发送停止摄像头监控请求失败", false, "", "Moonraker_Mqtt", "error"); - sentryReportLog(SENTRY_LOG_TRACE, "stop video cmd error", BP_VIDEO_ABNORMAL); + sentryReportLog(SENTRY_LOG_TRACE, "bury_point_stop video cmd error", BP_VIDEO_ABNORMAL); callback(json::value_t::null); } } From 3c5019bbbb41c45b417de2913a98b70f9f3264ae Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 24 Dec 2025 10:50:10 +0800 Subject: [PATCH 04/12] feature add http error msg for bury point --- src/slic3r/GUI/WebSMUserLoginDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/WebSMUserLoginDialog.cpp b/src/slic3r/GUI/WebSMUserLoginDialog.cpp index f152ad9e38..5292c4cd67 100644 --- a/src/slic3r/GUI/WebSMUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebSMUserLoginDialog.cpp @@ -224,7 +224,7 @@ void SMUserLogin::OnNavigationRequest(wxWebViewEvent &evt) } }) .on_error([&](std::string body, std::string error, unsigned status) { - std::string http_code = BP_LOGIN_HTTP_CODE + string(":") + std::to_string(status); + std::string http_code = BP_LOGIN_HTTP_CODE + string(":") + std::to_string(status) + "\n" + error + "\n" + body; sentryReportLog(SENTRY_LOG_TRACE, http_code, BP_LOGIN); }) .perform_sync(); From ed81bf6cbe4e0f576e7821299cd9ceede4ca417d Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 24 Dec 2025 12:06:41 +0800 Subject: [PATCH 05/12] feature add include for mac os get mac address --- src/common_func/common_func.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/common_func/common_func.cpp b/src/common_func/common_func.cpp index eb0ba2a203..e18b524b32 100644 --- a/src/common_func/common_func.cpp +++ b/src/common_func/common_func.cpp @@ -8,6 +8,12 @@ #pragma comment(lib, "iphlpapi.lib") #elif __APPLE__ #include +#import +#include +#include +#include + +#include #endif #include From a6b6151b0f305a70c683b62bd6c8cfd0a798d6b5 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 24 Dec 2025 14:26:00 +0800 Subject: [PATCH 06/12] feature remove the mac address on bury point --- src/common_func/common_func.cpp | 82 ++-------------------------- src/common_func/common_func.hpp | 1 - src/sentry_wrapper/SentryWrapper.cpp | 4 -- 3 files changed, 5 insertions(+), 82 deletions(-) diff --git a/src/common_func/common_func.cpp b/src/common_func/common_func.cpp index e18b524b32..cdde23d3c6 100644 --- a/src/common_func/common_func.cpp +++ b/src/common_func/common_func.cpp @@ -8,12 +8,12 @@ #pragma comment(lib, "iphlpapi.lib") #elif __APPLE__ #include -#import +#include #include -#include -#include - -#include +#include +#include +#include +#include #endif #include @@ -72,78 +72,6 @@ namespace common return machineId; } - std::string getMacAddress() - { - std::string macAddress = std::string(); - -#ifndef __APPLE__ - ULONG ulBufferSize = 0; - DWORD dwResult = ::GetAdaptersInfo(NULL, &ulBufferSize); - if (ERROR_BUFFER_OVERFLOW != dwResult) { - return std::string(); - } - - PIP_ADAPTER_INFO pAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[ulBufferSize]; - if (!pAdapterInfo) { - return std::string(); - } - - dwResult = ::GetAdaptersInfo(pAdapterInfo, &ulBufferSize); - if (ERROR_SUCCESS != dwResult) { - delete[] pAdapterInfo; - return std::string(); - } - - BYTE pMac[MAX_ADAPTER_ADDRESS_LENGTH] = {0}; - int nLen = MAX_ADAPTER_ADDRESS_LENGTH; - - if (NULL != pAdapterInfo) { - PIP_ADDR_STRING pAddTemp = &(pAdapterInfo->IpAddressList); - - if (NULL != pAddTemp) { - for (int i = 0; i < (int) pAdapterInfo->AddressLength; ++i) { - pMac[i] = pAdapterInfo->Address[i]; - } - nLen = pAdapterInfo->AddressLength; - } - } - delete[] pAdapterInfo; - - auto Encode16 = [](const BYTE* buf, int len) -> std::wstring { - const WCHAR strHex[] = L"0123456789ABCDEF"; - std::wstring wstr; - wstr.resize(len * 2); - for (int i = 0; i < len; ++i) { - wstr[i * 2 + 0] = strHex[buf[i] >> 4]; - wstr[i * 2 + 1] = strHex[buf[i] & 0xf]; - } - return wstr; - }; - - auto wstringTostring = [](std::wstring wTmpStr) -> std::string { - std::string resStr = std::string(); - int len = WideCharToMultiByte(CP_UTF8, 0, wTmpStr.c_str(), -1, nullptr, 0, nullptr, nullptr); - - if (len <= 0) - return std::string(); - std::string desStr(len, 0); - - WideCharToMultiByte(CP_UTF8, 0, wTmpStr.c_str(), -1, &desStr[0], len, nullptr, nullptr); - - resStr = desStr; - - return resStr; - }; - - std::wstring strMac = Encode16(pMac, nLen); - macAddress = wstringTostring(strMac); -#else - // todo get mac macaddress -#endif - return macAddress; - } - - std::string get_flutter_version() { diff --git a/src/common_func/common_func.hpp b/src/common_func/common_func.hpp index 32838ed652..352d71a4a4 100644 --- a/src/common_func/common_func.hpp +++ b/src/common_func/common_func.hpp @@ -25,7 +25,6 @@ namespace common std::string getMachineId(); - std::string getMacAddress(); } // namespace common #endif \ No newline at end of file diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index a7d7595754..5d63702722 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -220,10 +220,6 @@ void initSentryEx() if (!machineID.empty()) sentry_set_tag("machine_id", machineID.c_str()); - std::string macAdress = common::getMacAddress(); - if (!macAdress.empty()) - sentry_set_tag("macaddress", macAdress.c_str()); - std::string pcName = common::get_pc_name(); if (!pcName.empty()) sentry_set_tag("pc_name", pcName.c_str()); From 996dd9bbcb2b2a7e489b3e60fe920fa0a1c5bca1 Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 24 Dec 2025 16:27:04 +0800 Subject: [PATCH 07/12] feature add device connect error to sentry --- src/bury_cfg/bury_point.hpp | 6 ++++++ src/slic3r/GUI/SSWCP.cpp | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/bury_cfg/bury_point.hpp b/src/bury_cfg/bury_point.hpp index e4e477c4da..ebb8d4fa75 100644 --- a/src/bury_cfg/bury_point.hpp +++ b/src/bury_cfg/bury_point.hpp @@ -54,6 +54,12 @@ #define BP_LOCAL_SERVER_ERR_CODE "bury_point_local_server_err_code" +//device connect error info +#define DEVICE_CONNECT_ERR "error_device_connect" +#define DEVICE_SUBSCRIBE_ERR "error_device_subscribe" +#define DEVICE_PBLISH_ERR "error_device_publish" +#define DEVICE_SET_ENGINE_ERR "error_device_set_engine" + //webview bury point diff --git a/src/slic3r/GUI/SSWCP.cpp b/src/slic3r/GUI/SSWCP.cpp index 94850e66c7..57ef63feb0 100644 --- a/src/slic3r/GUI/SSWCP.cpp +++ b/src/slic3r/GUI/SSWCP.cpp @@ -4707,6 +4707,8 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_connect() try { if (!m_param_data.count("id") || !m_param_data["id"].is_string()) { handle_general_fail(-1, "param [id] is required or wrong type"); + + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_connect param [id] is required or wrong type"), DEVICE_CONNECT_ERR); return; } @@ -4714,6 +4716,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_connect() if (!validate_id(id)) { handle_general_fail(-1, "id is illegal"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_connect id is illegal"),DEVICE_CONNECT_ERR); return; } @@ -4805,6 +4808,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_subscribe() try { if (!m_param_data.count("id") || !m_param_data["id"].is_string()) { handle_general_fail(-1, "param [id] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_subscribe param [id] is required or wrong type"), DEVICE_SUBSCRIBE_ERR); return; } @@ -4812,11 +4816,13 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_subscribe() if (!validate_id(id)) { handle_general_fail(-1, "id is illegal"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_subscribe id is illegal with:")+id,DEVICE_SUBSCRIBE_ERR); return; } if (m_event_id == "") { handle_general_fail(-1, "event_id is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_subscribe event_id is required or wrong type with:") + id,DEVICE_SUBSCRIBE_ERR); return; } @@ -4824,6 +4830,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_subscribe() if (!m_param_data.count("topic") || !m_param_data["topic"].is_string()) { handle_general_fail(-1, "param [topic] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_subscribe param [topic] is required or wrong type"),DEVICE_SUBSCRIBE_ERR); return; } std::string topic = m_param_data["topic"].get(); @@ -4834,6 +4841,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_subscribe() if (!m_param_data.count("qos") || !m_param_data["qos"].is_number()) { handle_general_fail(-1, "param [qos] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_subscribe param [qos] is required or wrong type"), DEVICE_SUBSCRIBE_ERR); return; } int qos = m_param_data["qos"].get(); @@ -4945,6 +4953,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() try { if (!m_param_data.count("engine_id") || !m_param_data["engine_id"].is_string()) { handle_general_fail(-1, "param [engine_id] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine param [engine_id] is required or wrong type"),DEVICE_SET_ENGINE_ERR); return; } @@ -4952,17 +4961,20 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() if (!validate_id(engine_id)) { handle_general_fail(-1, "id is illegal"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine id is illegal with:") + engine_id, DEVICE_SET_ENGINE_ERR); return; } if (!m_param_data.count("ip") || !m_param_data["ip"].is_string()) { handle_general_fail(-1, "param [ip] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine param [ip] is required or wrong type"),DEVICE_SET_ENGINE_ERR); return; } std::string ip = m_param_data["ip"].get(); if (!m_param_data.count("port") || !m_param_data["port"].is_number()) { handle_general_fail(-1, "param [port] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine param [port] is required or wrong type"), DEVICE_SET_ENGINE_ERR); return; } @@ -4989,6 +5001,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() if (engine == nullptr) { handle_general_fail(-1, "invalid engine"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine invalid engine"),DEVICE_SET_ENGINE_ERR); return; } @@ -4997,6 +5010,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() if (!engine->CheckConnected()) { BOOST_LOG_TRIVIAL(error) << "[SSWCP_MqttAgent_Instance] 引擎连接状态异常"; handle_general_fail(-1, "engine connection lost"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine engine connection lost"), DEVICE_SET_ENGINE_ERR); return; } BOOST_LOG_TRIVIAL(info) << "[SSWCP_MqttAgent_Instance] 引擎连接状态正常"; @@ -5089,6 +5103,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_set_engine() if (!host) { handle_general_fail(-1, "host created failed"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_set_engine host created failed"), DEVICE_SET_ENGINE_ERR); return; } else { auto weak_self = std::weak_ptr(shared_from_this()); @@ -5530,6 +5545,7 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_publish() try { if (!m_param_data.count("id") || !m_param_data["id"].is_string()) { handle_general_fail(-1, "param [id] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_publish host created failed"), DEVICE_PBLISH_ERR); return; } @@ -5537,23 +5553,27 @@ void SSWCP_MqttAgent_Instance::sw_mqtt_publish() if (!validate_id(id)) { handle_general_fail(-1, "id is illegal"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_publish id is illegal"), DEVICE_PBLISH_ERR); return; } if (!m_param_data.count("topic") || !m_param_data["topic"].is_string()) { handle_general_fail(-1, "param [topic] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_publish param [topic] is required or wrong type"), DEVICE_PBLISH_ERR); return; } std::string topic = m_param_data["topic"].get(); if (!m_param_data.count("qos") || !m_param_data["qos"].is_number()) { handle_general_fail(-1, "param [qos] is required or wrong type"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_publish param [qos] is required or wrong type"), DEVICE_PBLISH_ERR); return; } int qos = m_param_data["qos"].get(); if (!m_param_data.count("payload") || !m_param_data["payload"].is_string()) { handle_general_fail(-1, "param [payload] required"); + Slic3r::sentryReportLog(Slic3r::SENTRY_LOG_ERROR, std::string("device_publish param [payload] required"), DEVICE_PBLISH_ERR); return; } std::string payload = m_param_data["payload"].get(); From 0302c21415c5bf94fb0e8be430bec49ff669a73a Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 24 Dec 2025 16:29:33 +0800 Subject: [PATCH 08/12] feature changed the upload path --- .github/workflows/build_all.yml | 2 +- .github/workflows/build_orca.yml | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 640f110c43..2fe102dbe1 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -151,7 +151,7 @@ jobs: if-no-files-found: error - name: Deploy Flatpak to nightly release - if: ${{github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0'}} + if: ${{github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1'}} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index f957640a72..8b0489360a 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -122,7 +122,7 @@ jobs: # Thanks to RaySajuuk, it's working now - name: Sign app and notary - if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') || github.ref == 'refs/heads/2.2.0') && inputs.os == 'macos-14' + if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') || github.ref == 'refs/heads/2.2.1') && inputs.os == 'macos-14' working-directory: ${{ github.workspace }} env: BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} @@ -175,7 +175,7 @@ jobs: fi - name: Create DMG without notary - if: github.ref != 'refs/heads/main' && inputs.os == 'macos-14' && github.ref != 'refs/heads/2.2.0' + if: github.ref != 'refs/heads/main' && inputs.os == 'macos-14' && github.ref != 'refs/heads/2.2.1' working-directory: ${{ github.workspace }} run: | mkdir -p ${{ github.workspace }}/build/universal/Snapmaker_Orca_dmg @@ -217,7 +217,7 @@ jobs: if-no-files-found: warn - name: Deploy Mac release - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'macos-14' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'macos-14' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} @@ -228,7 +228,7 @@ jobs: max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - name: Check if profile validator DMG exists - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'macos-14' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'macos-14' id: check_dmg working-directory: ${{ github.workspace }} run: | @@ -242,7 +242,7 @@ jobs: shell: bash - name: Deploy Mac Snapmaker_Orca_profile_validator DMG release - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'macos-14' && steps.check_dmg.outputs.exists == 'true' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'macos-14' && steps.check_dmg.outputs.exists == 'true' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} @@ -318,7 +318,7 @@ jobs: path: ${{ github.workspace }}/build/src/Release/Snapmaker_Orca_profile_validator.exe - name: Deploy Windows release portable - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'windows-latest' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'windows-latest' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} @@ -329,7 +329,7 @@ jobs: max_releases: 1 - name: Deploy Windows release installer - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'windows-latest' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'windows-latest' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} @@ -340,7 +340,7 @@ jobs: max_releases: 1 - name: Deploy Windows Snapmaker_Orca_profile_validator release - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'windows-latest' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'windows-latest' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} @@ -386,7 +386,7 @@ jobs: chmod +x ./build/Snapmaker_Orca_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage - name: Build orca_custom_preset_tests - if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'ubuntu-24.04' + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'ubuntu-24.04' working-directory: ${{ github.workspace }}/build/src/Release shell: bash run: | @@ -414,7 +414,7 @@ jobs: path: './build/src/Release/Snapmaker_Orca_profile_validator' - name: Deploy Ubuntu release - if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} + if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} env: ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} uses: WebFreak001/deploy-nightly@v3.2.0 @@ -426,7 +426,7 @@ jobs: asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - name: Deploy Ubuntu release - if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'ubuntu-24.04' }} + if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'ubuntu-24.04' }} uses: rickstaa/action-create-tag@v1 with: tag: "nightly-builds" @@ -435,7 +435,7 @@ jobs: message: "nightly-builds" - name: Deploy Ubuntu Snapmaker_Orca_profile_validator release - if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} + if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} env: ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} uses: WebFreak001/deploy-nightly@v3.2.0 @@ -448,7 +448,7 @@ jobs: max_releases: 1 - name: Deploy orca_custom_preset_tests - if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.0') && inputs.os == 'ubuntu-24.04' }} + if: ${{ ! env.ACT && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.2.1') && inputs.os == 'ubuntu-24.04' }} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/Snapmaker/OrcaSlicer/releases/169912305/assets{?name,label} From 4ec2812268bf8915c389678601c894661a33c413 Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 25 Dec 2025 12:10:58 +0800 Subject: [PATCH 09/12] feature add Personal Information Cross-Border Transfer Notice --- resources/web/data/text.js | 35 +++++++++++++---------- resources/web/guide/3/3.js | 46 +++++++++++++++++++++++++++++-- resources/web/guide/3/index.html | 13 +++++---- src/libslic3r/AppConfig.cpp | 7 ----- src/slic3r/GUI/GUI_App.cpp | 14 ++++++++-- src/slic3r/GUI/Preferences.cpp | 5 +++- src/slic3r/GUI/WebGuideDialog.cpp | 4 ++- 7 files changed, 90 insertions(+), 34 deletions(-) diff --git a/resources/web/data/text.js b/resources/web/data/text.js index c9cb4f088f..cea146b4fc 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -5,7 +5,7 @@ var LangText = { t3: "User Agreement", t4: "Disagree", t5: "Agree", - t6: "We kindly request your help to improve everyone's printing.
Come and Join our Customer Experience Improvement Program", + t6: "User Experience Improvement Program", t7: "Join our Customer Experience Improvement Program", t8: "Back", t9: "Next", @@ -49,11 +49,13 @@ var LangText = { t50: "Log out", t52: "Skip", t53: "Join", - t54: "In the 3D Printing community, we learn from each other's successes and failures to adjust our own slicing parameters and settings. Snapmaker Orca follows the same principle and uses machine learning to improve its performance from the successes and failures of the vast number of prints by our users. We are training Snapmaker Orca to be smarter by feeding them the real-world data. If you are willing, this service will access information from your error logs and usage logs, which may include information described in ", - t55: "Privacy Policy", - t56: ". We will not collect any Personal Data by which an individual can be identified directly or indirectly, including without limitation names, addresses, payment information, or phone numbers. By enabling this service, you agree to these terms and the statement about Privacy Policy.", - t57: "", - t58: "", + t54: "Snapmaker Orca will accumulate insights from the print logs (including error logs and usage logs) of a large number of users to enhance printing and software performance. If you consent, we will collect your error logs, usage logs, and other relevant information (details are subject to the description in our ", + t55: "Privacy Policy", + t56: "). After de-identifying such information, we will use it for statistics, analysis, and prediction purposes to improve our products and services, thereby providing you with a better user experience. We will not collect any personally identifiable information (PII)—whether directly or indirectly—including but not limited to names, addresses, payment information, and phone numbers. By enabling this program, you agree to these terms and the statements in our Privacy Policy.
  Certain features of our product utilize services provided by overseas vendors. If you use these features, some of your personal information may be transferred overseas. Please review our ", + t_566: "Personal Information Cross-Border Transfer Notice", + t_567: " carefully, which lists details of the overseas recipients and the measures we take to protect personal information transferred overseas.
  You may modify your participation status at any time in the Preferences settings, where you can opt out of the User Experience Improvement Program.", + t57: " Please read and agree to the User Experience Improvement Program Terms and the ", + t58: "Personal Information Cross-Border Transfer Notice", t59: ".", t60: "Europe", t61: "North America", @@ -107,8 +109,9 @@ var LangText = { t110: "Custom Filaments", t111: "Create New", t112: "Join the Program", - t113: "You may change your choice in preference anytime.", + t113: "", t114: "Device Management", + t115: "Please first check this box to agree to the Personal Information Cross-Border Transfer Notice for the User Experience Improvement Program.", orca1: "Edit Project Info", orca2: "no model information", orca3: "Stealth Mode", @@ -667,7 +670,7 @@ var LangText = { t3: "用户使用协议", t4: "拒绝", t5: "同意", - t6: "帮助提升Snapmaker Orca性能", + t6: "Snapmaker 用户体验改进计划", t7: "允许发送匿名数据", t8: "上一步", t9: "下一步", @@ -711,11 +714,13 @@ var LangText = { t50: "退出登录", t52: "忽略", t53: "同意", - t54: "在3D打印社区,我们从彼此的成功和失败中学习调整自己的切片参数和设置。Snapmaker Orca遵循同样的原则,通过机器学习的方式从大量用户打印的成功和失败中获取经验,从而改善打印性能。我们正在通过向Snapmaker Orca提供真实世界的数据来训练他们变得更聪明。如果您愿意,此服务将访问您的错误日志和使用日志中的信息,其中可能包括", - t55: "隐私政策", - t56: "中描述的信息。我们不会收集任何可以直接或间接识别个人的个人数据,包括但不限于姓名、地址、支付信息或电话号码。启用此服务即表示您同意这些条款和有关隐私政策的声明。", - t57: "", - t58: "", + t54: "Snapmaker Orca 会从大量用户的打印日志(含异常日志、使用日志)中积累经验,提升打印与软件性能。若您同意,我们将获取您的错误日志、使用日志等信息(具体以《", + t55: "隐私政策", + t56: "》描述为准),并在进行去标识化处理后,用于统计、分析和预测用途,以改进我们的产品和服务,为您提供更好的用户体验;我们不会收集任何可直接/间接识别个人的信息(包括但不限于姓名、地址、支付信息、电话号码)。启用本计划即表示您同意本条款及隐私政策声明。
  我们的部分功能使用了境外供应商的服务,如您使用该部分功能,您的部分个人信息可能被传输至境外。请仔细阅读我们的", + t_566: "《个人信息出境告知书》", + t_567: ",其中列举了境外接收方的信息以及我们如何保护被传输至境外的个人信息。
  您可以随时在偏好配置中更改,选择退出用户体验改进计划。", + t57: "请阅读并同意用户体验改进计划的", + t58: "《个人信息出境告知书》", t59: "。", t60: "欧洲", t61: "北美", @@ -769,8 +774,10 @@ var LangText = { t110: "自建材料", t111: "新建", t112: "加入该计划", - t113: "您可以随时更改您的偏好。", + t113: "", t114: "设备管理", + t115: "请先勾选此框,以同意用户体验改进计划的《个人信息出境告知书》", + t116: "", wk1: "快速入门指南", wk2: "本文介绍了Snapmaker Orca的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", wk3: "基于项目的工作流", diff --git a/resources/web/guide/3/3.js b/resources/web/guide/3/3.js index 379cd39441..6b2c92e16b 100644 --- a/resources/web/guide/3/3.js +++ b/resources/web/guide/3/3.js @@ -40,13 +40,33 @@ function GotoBackPage() function GotoNextPage() { + var checkbox = document.getElementById('agreeCheckbox'); + var errorTip = document.getElementById('errorTip'); + if (!checkbox.checked) { + // 未勾选复选框,显示错误提示 + errorTip.style.display = 'block'; + return; + } + + // 已勾选,隐藏错误提示并继续 + errorTip.style.display = 'none'; SendPrivacyChoice("agree"); - - window.location.href="../21/index.html"; } +function OnCheckboxChange() +{ + var checkbox = document.getElementById('agreeCheckbox'); + var errorTip = document.getElementById('errorTip'); + + // 勾选时隐藏错误提示 + if (checkbox.checked) { + errorTip.style.display = 'none'; + } + // 取消勾选时不显示错误提示(只有点击按钮时才检查) +} + function GotoSkipPage() { @@ -75,7 +95,7 @@ function OpenPrivacyPolicy() var privacyUrl = ""; - if(m_Region === "China") { + if(m_Region === "Chinese Mainland") { privacyUrl = "https://www.snapmaker.cn/privacy-policy.html"; } else { privacyUrl = "https://www.snapmaker.com/privacy-policy"; @@ -90,3 +110,23 @@ function OpenPrivacyPolicy() SendWXMessage( JSON.stringify(tSend) ); } + +function OpenCrossBorderNotice() +{ + var noticeUrl = ""; + + // 个人信息出境告知书链接 + if(m_Region === "Chinese Mainland") { + noticeUrl = "https://www.snapmaker.cn/cross-border-notice"; + } else { + noticeUrl = "https://www.snapmaker.com/cross-border-notice"; + } + + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="common_openurl"; + tSend['url']=noticeUrl; + tSend['local']=m_Region + + SendWXMessage( JSON.stringify(tSend) ); +} \ No newline at end of file diff --git a/resources/web/guide/3/index.html b/resources/web/guide/3/index.html index daef8b263b..383a55a3df 100644 --- a/resources/web/guide/3/index.html +++ b/resources/web/guide/3/index.html @@ -20,12 +20,15 @@
Back
diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index a1eaf50ecc..a8d3fa620d 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -89,13 +89,6 @@ bool AppConfig::get_stealth_mode() return true; } - auto isAgree = get("app", "privacy_policy_isagree"); - - if (isAgree.empty()) - { - return true; - } - return get_bool("stealth_mode"); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 98ad45f5e8..b92533e3f5 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3764,9 +3764,6 @@ if (res) { } catch (std::exception &) { // wxMessageBox(e.what(), "", MB_OK); } - auto isAgree = wxGetApp().app_config->get("app", "isagree"); - - set_privacy_policy(isAgree == "true"); } void GUI_App::ShowDownNetPluginDlg() { @@ -7293,10 +7290,14 @@ 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"); + if (!m_app_conf_exists || preset_bundle->printers.only_default_printers()) { BOOST_LOG_TRIVIAL(info) << "run wizard..."; run_wizard(ConfigWizard::RR_DATA_EMPTY); BOOST_LOG_TRIVIAL(info) << "finished run wizard"; + return true; } /*else if (get_app_config()->legacy_datadir()) { // Looks like user has legacy pre-vendorbundle data directory, @@ -7308,6 +7309,13 @@ bool GUI_App::config_wizard_startup() run_wizard(ConfigWizard::RR_DATA_LEGACY); return true; }*/ + + if (isAgree.empty()) + { + run_wizard(ConfigWizard::RR_DATA_EMPTY); // Compatible with older versions + return true; + } + return false; } diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index f8f30cb809..afa96a734e 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -749,7 +749,10 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa app_config->save(); if (param == "privacy_policy_isagree") - set_privacy_policy(checkbox->GetValue()); + { + app_config->set("app", "privacy_policy_isagree", checkbox->GetValue()); + set_privacy_policy(checkbox->GetValue()); + } // if (param == "staff_pick_switch") { // bool pbool = app_config->get("staff_pick_switch") == "true"; // wxGetApp().switch_staff_pick(pbool); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 672bd516af..7784c408d4 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -34,6 +34,7 @@ #include #include "CreatePresetsDialog.hpp" #include +#include "bury_cfg/bury_point.hpp" using namespace nlohmann; @@ -521,7 +522,7 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) std::string url = j["url"]; std::string local = j["local"]; if (!url.empty()) { - wxLaunchDefaultBrowser(url); + wxLaunchDefaultBrowser(url.c_str()); } } else if (strCmd == "network_plugin_install") { @@ -649,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); + set_privacy_policy(PrivacyUse); m_MainPtr->app_config->set("region", m_Region); m_MainPtr->app_config->set_bool("stealth_mode", StealthMode); From c6b878b2b726e5d9ba21332731e9bc4d8dbae474 Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 25 Dec 2025 14:18:29 +0800 Subject: [PATCH 10/12] feature update copy right info --- CMakeLists.txt | 8 ++++++++ resources/web/guide/3/3.js | 9 ++------- src/CMakeLists.txt | 4 ++-- .../platform/msw/Snapmaker_Orca-gcodeviewer.rc.in | 6 +++--- src/dev-utils/platform/msw/Snapmaker_Orca.rc.in | 8 ++++---- src/dev-utils/platform/osx/Info.plist.in | 4 ++-- src/slic3r/GUI/AboutDialog.cpp | 2 +- 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 590cbb2645..df6d220c1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,14 @@ include("version.inc") include(GNUInstallDirs) include(CMakeDependentOption) +# Set SLIC3R_BUILD_ID from Snapmaker_VERSION if not already defined +if(NOT DEFINED SLIC3R_BUILD_ID OR SLIC3R_BUILD_ID STREQUAL "") + set(SLIC3R_BUILD_ID "${Snapmaker_VERSION}") +endif() + +# Create Windows RC compatible version format (comma-separated: MAJOR,MINOR,PATCH,0) +set(SLIC3R_RC_VERSION "${ORCA_VERSION_MAJOR},${ORCA_VERSION_MINOR},${ORCA_VERSION_PATCH},0") + set(SLIC3R_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") file(TO_NATIVE_PATH "${SLIC3R_RESOURCES_DIR}" SLIC3R_RESOURCES_DIR_WIN) diff --git a/resources/web/guide/3/3.js b/resources/web/guide/3/3.js index 6b2c92e16b..dcaaf58d27 100644 --- a/resources/web/guide/3/3.js +++ b/resources/web/guide/3/3.js @@ -44,12 +44,10 @@ function GotoNextPage() var errorTip = document.getElementById('errorTip'); if (!checkbox.checked) { - // 未勾选复选框,显示错误提示 errorTip.style.display = 'block'; return; } - // 已勾选,隐藏错误提示并继续 errorTip.style.display = 'none'; SendPrivacyChoice("agree"); window.location.href="../21/index.html"; @@ -60,11 +58,9 @@ function OnCheckboxChange() var checkbox = document.getElementById('agreeCheckbox'); var errorTip = document.getElementById('errorTip'); - // 勾选时隐藏错误提示 if (checkbox.checked) { errorTip.style.display = 'none'; } - // 取消勾选时不显示错误提示(只有点击按钮时才检查) } @@ -115,11 +111,10 @@ function OpenCrossBorderNotice() { var noticeUrl = ""; - // 个人信息出境告知书链接 if(m_Region === "Chinese Mainland") { - noticeUrl = "https://www.snapmaker.cn/cross-border-notice"; + noticeUrl = "https://snapmaker.cn/personal-info-export"; } else { - noticeUrl = "https://www.snapmaker.com/cross-border-notice"; + noticeUrl = "https://www.snapmaker.com/personal-info-export"; } var tSend={}; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c060c480c7..4df5047638 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -96,7 +96,7 @@ if(ORCA_TOOLS) MACOSX_BUNDLE_BUNDLE_VERSION "${SLIC3R_VERSION}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${SLIC3R_VERSION}" MACOSX_BUNDLE_IDENTIFIER "com.Snapmaker.Snapmaker_Orca.profile-validator" - MACOSX_BUNDLE_COPYRIGHT "© 2024 SoftFever" + MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024-2025 Snapmaker. All rights reserved." MACOSX_BUNDLE_GUI_IDENTIFIER "com.Snapmaker.Snapmaker_Orca.profile-validator" ) else() @@ -294,7 +294,7 @@ else () MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME "Snapmaker Orca" MACOSX_BUNDLE_SHORT_VERSION_STRING ${Snapmaker_VERSION} - MACOSX_BUNDLE_COPYRIGHT "Copyright(C) 2022-2024 Li Jiang All Rights Reserved") + MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024-2025 Snapmaker. All rights reserved.") # Get the bundle directory by going up from the executable to the .app bundle if (CMAKE_CONFIGURATION_TYPES) set(BIN_RESOURCES_DIR "$/../Resources") diff --git a/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in b/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in index 3eb3c762ae..561421417b 100644 --- a/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in +++ b/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in @@ -1,6 +1,6 @@ 1 VERSIONINFO -FILEVERSION @SLIC3R_VERSION@ -PRODUCTVERSION @SLIC3R_VERSION@ +FILEVERSION @SLIC3R_RC_VERSION@ +PRODUCTVERSION @SLIC3R_RC_VERSION@ { BLOCK "StringFileInfo" { @@ -12,7 +12,7 @@ PRODUCTVERSION @SLIC3R_VERSION@ VALUE "ProductName", "@SLIC3R_APP_NAME@ G-code Viewer" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" VALUE "InternalName", "@SLIC3R_APP_NAME@ G-code Viewer" - VALUE "LegalCopyright", "" + VALUE "LegalCopyright", "Copyright © 2024-2025 Snapmaker. All rights reserved." VALUE "OriginalFilename", "bambu-gcodeviewer.exe" } } diff --git a/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in b/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in index 4a321c30b3..fc9e1adda1 100644 --- a/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in +++ b/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in @@ -1,6 +1,6 @@ 1 VERSIONINFO -FILEVERSION @SLIC3R_VERSION@ -PRODUCTVERSION @SLIC3R_VERSION@ +FILEVERSION @SLIC3R_RC_VERSION@ +PRODUCTVERSION @SLIC3R_RC_VERSION@ { BLOCK "StringFileInfo" { @@ -12,8 +12,8 @@ PRODUCTVERSION @SLIC3R_VERSION@ VALUE "ProductName", "@SLIC3R_APP_NAME@" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" VALUE "InternalName", "@SLIC3R_APP_NAME@" - VALUE "LegalCopyright", "" - VALUE "OriginalFilename", "snapmaker-orca.exe" + VALUE "LegalCopyright", "Copyright © 2024-2025 Snapmaker. All rights reserved." + VALUE "OriginalFilename", "Snapmaker_Orca.exe" } } BLOCK "VarFileInfo" diff --git a/src/dev-utils/platform/osx/Info.plist.in b/src/dev-utils/platform/osx/Info.plist.in index 58eda640d1..fac6d45470 100644 --- a/src/dev-utils/platform/osx/Info.plist.in +++ b/src/dev-utils/platform/osx/Info.plist.in @@ -5,7 +5,7 @@ CFBundleExecutable @SLIC3R_APP_KEY@ CFBundleGetInfoString - @SLIC3R_APP_NAME@ Copyright(C) 2021-2023 Lunkuo All Rights Reserved + @SLIC3R_APP_NAME@ Copyright © 2024-2025 Snapmaker. All rights reserved. CFBundleIconFile images/Snapmaker_Orca.icns CFBundleName @@ -13,7 +13,7 @@ CFBundleShortVersionString @SLIC3R_APP_NAME@ @SLIC3R_BUILD_ID@ CFBundleIdentifier - com.softfever3d.orca-slic3r/ + com.snapmaker.snapmaker-orca CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index f2d007c132..45abd4de91 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -333,7 +333,7 @@ AboutDialog::AboutDialog() copyright_hor_sizer->Add(copyright_ver_sizer, 0, wxLEFT, FromDIP(20)); - wxStaticText *html_text = new wxStaticText(this, wxID_ANY, "Copyright (C) 2024 Snapmaker All Rights Reserved", wxDefaultPosition, wxDefaultSize); + wxStaticText *html_text = new wxStaticText(this, wxID_ANY, "Copyright © 2024-2025 Snapmaker. All rights reserved.", wxDefaultPosition, wxDefaultSize); html_text->SetForegroundColour(wxColour(107, 107, 107)); copyright_ver_sizer->Add(html_text, 0, wxALL , 0); From a0fe85744aa2d1e21a2098dad4545c5f2de8c970 Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 25 Dec 2025 14:49:30 +0800 Subject: [PATCH 11/12] feature allow error report to sentry don't be limited by the flags --- src/sentry_wrapper/SentryWrapper.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/sentry_wrapper/SentryWrapper.cpp b/src/sentry_wrapper/SentryWrapper.cpp index 5d63702722..de4dd86c6a 100644 --- a/src/sentry_wrapper/SentryWrapper.cpp +++ b/src/sentry_wrapper/SentryWrapper.cpp @@ -57,11 +57,7 @@ static sentry_value_t on_crash_callback(const sentry_ucontext_t* uctx, sentry_va static sentry_value_t before_send(sentry_value_t event, void* hint, void* data) { - if (!get_privacy_policy()) - { - sentry_value_decref(event); - return sentry_value_new_null(); - } + sentry_value_t level_val = sentry_value_get_by_key(event, SENTRY_KEY_LEVEL); std::string levelName = sentry_value_as_string(level_val); @@ -88,6 +84,12 @@ static sentry_value_t before_send(sentry_value_t event, void* hint, void* data) } } + if (!get_privacy_policy() && levelName == SENTRY_EVENT_TRACE) { + + sentry_value_decref(event); + return sentry_value_new_null(); + } + if (SENTRY_EVENT_FATAL == eventLevel || SENTRY_EVENT_ERROR == eventLevel || SENTRY_EVENT_TRACE == eventLevel) From 796cbfb67fe7de75514cc574e6f4e0f67ecbb9a2 Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 25 Dec 2025 15:11:19 +0800 Subject: [PATCH 12/12] feature update copy right time --- src/CMakeLists.txt | 4 ++-- src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in | 2 +- src/dev-utils/platform/msw/Snapmaker_Orca.rc.in | 2 +- src/dev-utils/platform/osx/Info.plist.in | 2 +- src/slic3r/GUI/AboutDialog.cpp | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4df5047638..4f71a1c266 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -96,7 +96,7 @@ if(ORCA_TOOLS) MACOSX_BUNDLE_BUNDLE_VERSION "${SLIC3R_VERSION}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${SLIC3R_VERSION}" MACOSX_BUNDLE_IDENTIFIER "com.Snapmaker.Snapmaker_Orca.profile-validator" - MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024-2025 Snapmaker. All rights reserved." + MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024-2026 Snapmaker. All rights reserved." MACOSX_BUNDLE_GUI_IDENTIFIER "com.Snapmaker.Snapmaker_Orca.profile-validator" ) else() @@ -294,7 +294,7 @@ else () MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME "Snapmaker Orca" MACOSX_BUNDLE_SHORT_VERSION_STRING ${Snapmaker_VERSION} - MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024-2025 Snapmaker. All rights reserved.") + MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024-2026 Snapmaker. All rights reserved.") # Get the bundle directory by going up from the executable to the .app bundle if (CMAKE_CONFIGURATION_TYPES) set(BIN_RESOURCES_DIR "$/../Resources") diff --git a/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in b/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in index 561421417b..77f127b636 100644 --- a/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in +++ b/src/dev-utils/platform/msw/Snapmaker_Orca-gcodeviewer.rc.in @@ -12,7 +12,7 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@ VALUE "ProductName", "@SLIC3R_APP_NAME@ G-code Viewer" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" VALUE "InternalName", "@SLIC3R_APP_NAME@ G-code Viewer" - VALUE "LegalCopyright", "Copyright © 2024-2025 Snapmaker. All rights reserved." + VALUE "LegalCopyright", "Copyright © 2024-2026 Snapmaker. All rights reserved." VALUE "OriginalFilename", "bambu-gcodeviewer.exe" } } diff --git a/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in b/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in index fc9e1adda1..41e5d7f76e 100644 --- a/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in +++ b/src/dev-utils/platform/msw/Snapmaker_Orca.rc.in @@ -12,7 +12,7 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@ VALUE "ProductName", "@SLIC3R_APP_NAME@" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" VALUE "InternalName", "@SLIC3R_APP_NAME@" - VALUE "LegalCopyright", "Copyright © 2024-2025 Snapmaker. All rights reserved." + VALUE "LegalCopyright", "Copyright © 2024-2026 Snapmaker. All rights reserved." VALUE "OriginalFilename", "Snapmaker_Orca.exe" } } diff --git a/src/dev-utils/platform/osx/Info.plist.in b/src/dev-utils/platform/osx/Info.plist.in index fac6d45470..5cb04bb0f8 100644 --- a/src/dev-utils/platform/osx/Info.plist.in +++ b/src/dev-utils/platform/osx/Info.plist.in @@ -5,7 +5,7 @@ CFBundleExecutable @SLIC3R_APP_KEY@ CFBundleGetInfoString - @SLIC3R_APP_NAME@ Copyright © 2024-2025 Snapmaker. All rights reserved. + @SLIC3R_APP_NAME@ Copyright © 2024-2026 Snapmaker. All rights reserved. CFBundleIconFile images/Snapmaker_Orca.icns CFBundleName diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 45abd4de91..0fe7b40fa9 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -333,7 +333,7 @@ AboutDialog::AboutDialog() copyright_hor_sizer->Add(copyright_ver_sizer, 0, wxLEFT, FromDIP(20)); - wxStaticText *html_text = new wxStaticText(this, wxID_ANY, "Copyright © 2024-2025 Snapmaker. All rights reserved.", wxDefaultPosition, wxDefaultSize); + wxStaticText *html_text = new wxStaticText(this, wxID_ANY, "Copyright © 2024-2026 Snapmaker. All rights reserved.", wxDefaultPosition, wxDefaultSize); html_text->SetForegroundColour(wxColour(107, 107, 107)); copyright_ver_sizer->Add(html_text, 0, wxALL , 0);