diff --git a/scripts/disable_validation.entitlements b/scripts/disable_validation.entitlements
index 123d12a53e..d2fae18a76 100644
--- a/scripts/disable_validation.entitlements
+++ b/scripts/disable_validation.entitlements
@@ -2,7 +2,30 @@
+
+ com.apple.application-identifier
+ 5NGD3B3V37.snapmaker-orca
+ com.apple.developer.team-identifier
+ 5NGD3B3V37
+
+
com.apple.security.cs.disable-library-validation
+ com.apple.runningboard.assertions.webkit
+
+ com.apple.security.network.client
+
+ com.apple.security.network.server
+
+ com.apple.security.files.user-selected.read-write
+
+ com.apple.security.files.downloads.read-write
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.allow-dyld-environment-variables
+
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 41a9e0a268..75feacd820 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -963,7 +963,7 @@ void GUI_App::post_init()
std::string language = GUI::into_u8(current_language_code());
std::string network_ver = Slic3r::NetworkAgent::get_version();
bool sys_preset = app_config->get("sync_system_preset") == "true";
- //this->preset_updater->sync(http_url, language, network_ver, sys_preset ? preset_bundle : nullptr);
+ this->preset_updater->sync(http_url, language, network_ver, sys_preset ? preset_bundle : nullptr);
this->preset_updater->sync_web_async(true);
this->check_new_version_sf(false, false);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index a43682cdc9..dc458d26a2 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -7782,9 +7782,9 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
}
else if (is_finished && evt.finished())
{
- auto strTime = get_works_time(duration_ms);
- auto slice_time = BP_SLICE_DURATION_TIME + std::string(":") + strTime;
- sentryReportLog(SENTRY_LOG_TRACE, slice_time, BP_SLICE_DURATION);
+ //auto strTime = get_works_time(duration_ms);
+ //auto slice_time = BP_SLICE_DURATION_TIME + std::string(":") + strTime;
+ //sentryReportLog(SENTRY_LOG_TRACE, slice_time, BP_SLICE_DURATION);
m_slice_start_time = {};
m_slice_timing_active = false;
diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp
index 89df735d90..10fb57d653 100644
--- a/src/slic3r/GUI/ReleaseNote.cpp
+++ b/src/slic3r/GUI/ReleaseNote.cpp
@@ -330,6 +330,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
m_button_download->SetSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_download->SetMinSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_download->SetCornerRadius(FromDIP(12));
+ m_button_download->SetCursor(wxCURSOR_HAND);
m_button_download->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
EndModal(wxID_YES);
@@ -342,6 +343,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
m_button_skip_version->SetSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_skip_version->SetMinSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_skip_version->SetCornerRadius(FromDIP(12));
+ m_button_skip_version->SetCursor(wxCURSOR_HAND);
m_button_skip_version->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
wxGetApp().set_skip_version(true);
@@ -372,6 +374,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_cancel->SetCornerRadius(FromDIP(12));
+ m_button_cancel->SetCursor(wxCURSOR_HAND);
m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
EndModal(wxID_NO);
diff --git a/src/slic3r/GUI/SSWCP.cpp b/src/slic3r/GUI/SSWCP.cpp
index ffbfa32114..bba9c19414 100644
--- a/src/slic3r/GUI/SSWCP.cpp
+++ b/src/slic3r/GUI/SSWCP.cpp
@@ -2081,8 +2081,12 @@ void SSWCP_MachineOption_Instance::process()
sw_ServerClientManagerSetUserinfo();
} else if (m_cmd == "sw_DefectDetactionConfig"){
sw_DefectDetactionConfig();
+ } else if (m_cmd == GETCAMERA_TIMELAPSE_INSTANCE) {
+ CmdForwarding();
+ }
+ else if (m_cmd == GET_DEVICEDATA_STORAGESPACE) {
+ CmdForwarding();
}
-
else {
handle_general_fail();
}
@@ -3691,6 +3695,28 @@ void SSWCP_MachineOption_Instance::sw_GetTimelapseInstance()
handle_general_fail();
}
}
+void SSWCP_MachineOption_Instance::CmdForwarding() {
+ try {
+ std::shared_ptr host = nullptr;
+ wxGetApp().get_connect_host(host);
+
+ if (!host) {
+ handle_general_fail(-1, "Connection lost!");
+ return;
+ }
+
+ auto weak_self = std::weak_ptr(shared_from_this());
+ host->async_delete_camera_timelapse(m_param_data, [weak_self](const json& response) {
+ auto self = weak_self.lock();
+ if (self) {
+ SSWCP_Instance::on_mqtt_msg_arrived(self, response);
+ }
+ });
+ } catch (std::exception& e) {
+ handle_general_fail();
+ }
+}
+
void SSWCP_MachineOption_Instance::sw_DeleteCameraTimelapse()
{
@@ -5779,7 +5805,9 @@ std::unordered_set SSWCP::m_machine_option_cmd_list = {
"sw_DeleteCameraTimelapse",
"sw_GetTimelapseInstance",
"sw_ServerClientManagerSetUserinfo",
- "sw_DefectDetactionConfig"
+ "sw_DefectDetactionConfig",
+ GETCAMERA_TIMELAPSE_INSTANCE,
+ GET_DEVICEDATA_STORAGESPACE
};
std::unordered_set SSWCP::m_machine_connect_cmd_list = {
diff --git a/src/slic3r/GUI/SSWCP.hpp b/src/slic3r/GUI/SSWCP.hpp
index a8af7daa7e..f0f9b46c96 100644
--- a/src/slic3r/GUI/SSWCP.hpp
+++ b/src/slic3r/GUI/SSWCP.hpp
@@ -23,7 +23,13 @@ using namespace nlohmann;
namespace asio = boost::asio;
using tcp = asio::ip::tcp;
+
+//WCP Interface definition
#define UPDATE_PRIVACY_STATUS "sw_SubUserUpdatePrivacy"
+#define UPLOAD_CAMERA_TIMELAPSE "sw_UploadCameraTimelapse"
+#define DELETE_CAMERA_TIMELAPSE "sw_DeleteCameraTimelapse"
+#define GETCAMERA_TIMELAPSE_INSTANCE "sw_GetCameraTimelapseInstance"
+#define GET_DEVICEDATA_STORAGESPACE "sw_GetDeviceDataStorageSpace"
namespace Slic3r { namespace GUI {
@@ -422,6 +428,7 @@ private:
void sw_DefectDetactionConfig();
+ void CmdForwarding();
// Download machine file
void sw_DownloadMachineFile();
diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp
index 3f31e0e10a..dc802449d7 100644
--- a/src/slic3r/Utils/Http.cpp
+++ b/src/slic3r/Utils/Http.cpp
@@ -165,6 +165,17 @@ static int log_trace(CURL* handle, curl_infotype type,
return 0;
}
+// Domains that should bypass proxy and connect directly
+// This helps when users have Shadowsocks/Clash/V2Ray proxy enabled
+static const char* NOPROXY_DOMAINS =
+ "snapmaker.cn,"
+ "snapmaker.com,"
+ "*.snapmaker.cn,"
+ "*.snapmaker.com,"
+ "localhost,"
+ "127.0.0.1,"
+ "::1";
+
Http::priv::priv(const std::string &url)
: curl(::curl_easy_init())
, form(nullptr)
@@ -194,6 +205,11 @@ Http::priv::priv(const std::string &url)
::curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
::curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+ // Bypass proxy for Snapmaker domains - this fixes issues when users have
+ // Shadowsocks/Clash/V2Ray or other proxy software enabled
+ // The domains in NOPROXY_DOMAINS will connect directly without going through proxy
+ ::curl_easy_setopt(curl, CURLOPT_NOPROXY, NOPROXY_DOMAINS);
+
// https://everything.curl.dev/http/post/expect100.html
// remove the Expect: header, it will add a second delay to each request,
// if the file is uploaded in packets, it will cause the upload time to be longer