From 70d1a22974de39d41791602c270472baafbd317c Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Mon, 31 Mar 2025 14:18:05 +0800 Subject: [PATCH] FIX: use different web app data directory for different process of bambu studio jira: [STUDIO-11027] Change-Id: Idbf115507e24369b7d044c83f9da8313042c49e3 (cherry picked from commit 3fe0d6218cccd4acf13b04f0c7babab07c30f085) --- src/slic3r/GUI/Widgets/WebView.cpp | 36 ++++++++++++++++++++++++++++++ src/slic3r/GUI/Widgets/WebView.hpp | 3 +++ 2 files changed, 39 insertions(+) diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 66552ecea..c11eb00fd 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -183,6 +183,41 @@ public: wxWebView *m_webView; }; +#define BAMBU_LOCK_FILE_NAME "bambu_lockfile" +wxString WebView::BuildEdgeUserDataPath() +{ +#ifdef __WIN32__ + static wxString data_dir; + if (!data_dir.empty()) { return data_dir; } + + data_dir = wxStandardPaths::Get().GetUserLocalDataDir(); + data_dir.append("\\WebView2Cache\\"); + + // find a path + for (int bambu_id = 0; bambu_id < std::numeric_limits::max(); bambu_id++) { + wxString bambu_dir = data_dir + wxString::Format("%d", bambu_id); + if (!wxDir::Exists(bambu_dir) && !wxDir::Make(bambu_dir, 511, wxPATH_MKDIR_FULL)) { break; } /*maybe don't have access rights to create dir, break*/ + + wxString bambu_lock_file = bambu_dir + "\\" BAMBU_LOCK_FILE_NAME; + + static wxFile lockFile; + if (lockFile.Exists(bambu_lock_file)) { DeleteFileW(bambu_lock_file.wc_str()); }/*try delete previous file so that we could lock it by wxFile::write_excl*/ + + if (lockFile.Open(bambu_lock_file, wxFile::write_excl)) { + data_dir = bambu_dir; + break; + } + + if (!lockFile.Exists(bambu_lock_file)) { break; } /*maybe don't have access rights to create file, break*/ + } + + return data_dir; + +#else + return wxEmptyString; +#endif +} + wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) { #if wxUSE_WEBVIEW_EDGE @@ -205,6 +240,7 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) #ifdef __WIN32__ wxWebView* webView = new WebViewEdge; + webView->SetUserDataPathOption(BuildEdgeUserDataPath()); #elif defined(__WXOSX__) wxWebView *webView = new WebViewWebKit; #else diff --git a/src/slic3r/GUI/Widgets/WebView.hpp b/src/slic3r/GUI/Widgets/WebView.hpp index ca76fadb8..c1ceff591 100644 --- a/src/slic3r/GUI/Widgets/WebView.hpp +++ b/src/slic3r/GUI/Widgets/WebView.hpp @@ -13,6 +13,9 @@ public: static bool RunScript(wxWebView * webView, wxString const & msg); static void RecreateAll(); + + /*Find a user data path*/ + static wxString BuildEdgeUserDataPath(); }; #endif // !slic3r_GUI_WebView_hpp_