feature add privacy policy for guide

This commit is contained in:
alves
2025-12-17 18:24:23 +08:00
parent 5ed729e27c
commit 941c924329
13 changed files with 150 additions and 76 deletions
+2 -1
View File
@@ -62,7 +62,8 @@ function GotoPolicyPage()
SendWXMessage( JSON.stringify(tSend) );
window.location.href="../21/index.html";
window.location.href="../3/index.html";
}
+1 -1
View File
@@ -104,7 +104,7 @@
</div>
<div id="AcceptArea">
<div class="GrayBtn trans" id="PreBtn" tid="t8" onclick="window.open('../1/index.html','_self')">Back</div>
<div class="GrayBtn trans" id="PreBtn" tid="t8" onclick="window.open('../3/index.html','_self')">Back</div>
<div class="NormalBtn trans" id="AcceptBtn" tid="t9" onclick="GotoFilamentPage()">Next</div>
</div>
+22
View File
@@ -1,3 +1,25 @@
#Title {
height: auto;
min-height: 60px;
padding: 12px 25px;
box-sizing: border-box;
}
#Title div {
font-size: 16px;
line-height: 24px;
word-wrap: break-word;
white-space: normal;
text-align: center;
}
#Content {
flex: 1;
height: auto;
}
.PolicyArea
{
background-color: #4A4A51;
+65 -53
View File
@@ -1,31 +1,12 @@
var m_Region = '';
function OnInit()
{
TranslatePage();
SendPrivacySelect();
}
function SendPrivacySelect()
{
let nVal="refuse";
if( $('#ChoosePrivacy').is(':checked') )
nVal="agree";
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="user_private_choice";
tSend['data']={};
tSend['data']['action']=nVal;
SendWXMessage( JSON.stringify(tSend) );
}
function GotoNextPage()
{
RequestProfile();
RequestProfile();
}
function RequestProfile()
@@ -40,41 +21,72 @@ function RequestProfile()
function HandleStudio( pVal )
{
let strCmd=pVal['command'];
//alert(strCmd);
if(strCmd=='response_userguide_profile')
{
HandleModelInfo(pVal['response']);
if(pVal['response'] && pVal['response']['region']) {
m_Region = pVal['response']['region'];
}
}
}
function HandleModelInfo( pVal )
{
let Modellist=pVal["model"];
let nModel=Modellist.length;
if(nModel==1)
{
// let pModel=Modellist[0];
//
// var tSend={};
// tSend['sequence_id']=Math.round(new Date() / 1000);
// tSend['command']="save_userguide_models";
// tSend['data']={};
//
// let ModelName=pModel['model'];
//
// tSend['data'][ModelName]={};
// tSend['data'][ModelName]['model']=pModel['model'];
// tSend['data'][ModelName]['nozzle_diameter']=pModel['nozzle_diameter'];
// tSend['data'][ModelName]['vendor']=pModel['vendor'];
//
// SendWXMessage( JSON.stringify(tSend) );
window.location.href="../22/index.html";
return;
}
window.location.href="../21/index.html";
}
function GotoBackPage()
{
window.location.href="../11/index.html";
}
function GotoNextPage()
{
SendPrivacyChoice("agree");
window.location.href="../21/index.html";
}
function GotoSkipPage()
{
SendPrivacyChoice("refuse");
window.location.href="../21/index.html";
}
function SendPrivacyChoice(action)
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="user_private_choice";
tSend['data']={};
tSend['data']['action']=action; // "agree" 或 "refuse"
SendWXMessage( JSON.stringify(tSend) );
}
function OpenPrivacyPolicy()
{
var privacyUrl = "";
if(m_Region === "China") {
privacyUrl = "https://www.snapmaker.cn/privacy-policy.html";
} else {
privacyUrl = "https://www.snapmaker.com/privacy-policy";
}
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="common_openurl";
tSend['url']=privacyUrl;
tSend['local']=m_Region
SendWXMessage( JSON.stringify(tSend) );
}
+6 -9
View File
@@ -16,24 +16,21 @@
</head>
<body onLoad="OnInit()">
<div id="Title">
<div class="trans" tid="t6">We kindly request your help to improve<br/> everyone's printing</div>
<div class="trans" tid="t6">We kindly request your help to improve everyone's printing.<br/>Come and Join our Customer Experience Improvement Program</div>
</div>
<div id="Content">
<div id="PolicyTxt" class="TextS2 TextArea1 ZScrol">
<a class="trans" tid="t54">In the 3D Printing community, we learn from each others successes and failures to adjust our own slicing parameters and settings. Orca Slicer 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 Orca Slicer 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 </a><a class="HyperLink trans" tid="t55" href="https://bambulab.com/policies/privacy" target="_blank">Privacy Policy</a><a class="trans" tid="t56">
<a class="trans" tid="t54">In the 3D Printing community, we learn from each others successes and failures to adjust our own slicing parameters and settings. Bambu Studio 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 Bambu Studio 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 </a><a class="HyperLink trans" tid="t55" onClick="OpenPrivacyPolicy()">Privacy Policy</a><a class="trans" tid="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.
</a>
<p class="trans" tid="t113" style="text-indent:2em;">You may change your choice in preference anytime.</p>
</div>
<br/>
<label> <!-- ORCA use label tag to allow checkbox to toggle when user clicked to text -->
<input id="ChoosePrivacy" type="checkbox" onClick="SendPrivacySelect()" onChange="SendPrivacySelect()" />
<span class="trans TextS1" tid="t7">Allow sending anonymous data</span>
</label>
</div>
<div id="AcceptArea">
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="window.open('../11/index.html','_self')">Back</div>
<div class="NormalBtn trans" tid="t9" id="AcceptBtn" onclick="GotoNextPage()">Next</div>
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="GotoBackPage()">Back</div>
<div class="GrayBtn trans" tid="t52" id="SkipBtn" onclick="GotoSkipPage()">Skip</div>
<div class="NormalBtn trans" tid="t112" id="AcceptBtn" onclick="GotoNextPage()">Join the Program</div>
</div>
</body>
</html>
+1 -1
View File
@@ -19,7 +19,7 @@
</div>
<div id="Content">
<div id="PolicyTxt">
<a class="trans" tid="t54">In the 3D Printing community, we learn from each others successes and failures to adjust our own slicing parameters and settings. Orca Slicer 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 Orca Slicer 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 </a><a class="HyperLink trans" tid="t55" href="https://bambulab.com/policies/privacy" target="_blank">Privacy Policy</a><a class="trans" tid="t56">
<a class="trans" tid="t54">In the 3D Printing community, we learn from each others successes and failures to adjust our own slicing parameters and settings. Orca Slicer 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 Orca Slicer 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 </a><a class="HyperLink trans" tid="t55" href="https://www.snapmaker.com/privacy-policy" target="_blank">Privacy Policy</a><a class="trans" tid="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.
</a>
</div>
+15 -6
View File
@@ -4,6 +4,15 @@
#include <iomanip>
#include <sstream>
bool get_privacy_policy()
{
return isAgreeSlice;
}
void set_privacy_policy(bool isAgree) {
isAgreeSlice = isAgree;
}
std::string get_timestamp_seconds()
{
auto now = std::chrono::system_clock::now();
@@ -26,16 +35,16 @@ long long get_time_timestamp()
return timestamp;
}
std::string get_works_time(const uint64_t& timestamp)
std::string get_works_time(const long long& timestamp)
{
uint64_t hours = timestamp / 3600000;
uint64_t remaining_ms = timestamp % 3600000;
long long hours = timestamp / 3600000;
long long remaining_ms = timestamp % 3600000;
uint64_t minutes = remaining_ms / 60000;
long long minutes = remaining_ms / 60000;
remaining_ms = remaining_ms % 60000;
uint64_t seconds = remaining_ms / 1000;
uint64_t ms = remaining_ms % 1000;
long long seconds = remaining_ms / 1000;
long long ms = remaining_ms % 1000;
char buffer[32] = {0};
std::snprintf(buffer, sizeof(buffer), "%02llu:%02llu:%02llu.%03llu", hours, minutes, seconds, ms);
+6 -2
View File
@@ -2,6 +2,7 @@
#define _BURY_POINT_hpp_
#include <string>
#include <iostream>
#include <atomic>
#define BURY_POINT "bury_point"
@@ -37,9 +38,12 @@
static bool isAgreeSlice = false;
static std::atomic<bool> isAgreeSlice = true;
bool get_privacy_policy();
void set_privacy_policy(bool isAgree);
extern std::string get_timestamp_seconds();
extern long long get_time_timestamp();
extern std::string get_works_time(const uint64_t& timestamp);
extern std::string get_works_time(const long long& timestamp);
#endif
+6
View File
@@ -57,6 +57,12 @@ 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);
+7 -1
View File
@@ -120,7 +120,7 @@
#include "PrivacyUpdateDialog.hpp"
#include "ModelMall.hpp"
#include "HintNotification.hpp"
#include "bury_cfg/bury_point.hpp"
//#ifdef WIN32
//#include "BaseException.h"
//#endif
@@ -3754,6 +3754,9 @@ if (res) {
} catch (std::exception &) {
// wxMessageBox(e.what(), "", MB_OK);
}
auto isAgree = wxGetApp().app_config->get("snapmaker_privacy_policy", "isagree");
set_privacy_policy(isAgree == "true");
}
void GUI_App::ShowDownNetPluginDlg() {
@@ -7059,6 +7062,9 @@ 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");
set_privacy_policy(isAgree == "true");
return res;
}
+1 -1
View File
@@ -7746,7 +7746,7 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
if (m_slice_timing_active) {
auto end_time = std::chrono::steady_clock::now();
auto duration_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - m_slice_start_time).count();
uint64_t timess = duration_ms;
auto timess = duration_ms;
if (evt.cancelled()) {
BOOST_LOG_TRIVIAL(info) << "Slicing cancelled after " << duration_ms << " ms";
m_slice_start_time = {};
+10 -1
View File
@@ -492,6 +492,15 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt)
this->Close();
} else if (strCmd == "save_region") {
m_Region = j["region"];
m_ProfileJson["region"] = m_Region;
}
else if (strCmd == "common_openurl") {
std::string url = j["url"];
std::string local = j["local"];
if (!url.empty()) {
wxLaunchDefaultBrowser(url);
}
}
else if (strCmd == "network_plugin_install") {
std::string sAction = j["data"]["action"];
@@ -617,7 +626,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("region", m_Region);
m_MainPtr->app_config->set_bool("stealth_mode", StealthMode);
+8
View File
@@ -588,6 +588,14 @@ void WebPresetDialog::OnScriptMessage(wxWebViewEvent& evt)
this->Close();
} else if (strCmd == "save_region") {
m_Region = j["region"];
m_ProfileJson["region"] = m_Region;
}
else if (strCmd == "common_openurl") {
std::string url = j["url"];
if (!url.empty()) {
wxLaunchDefaultBrowser(url);
}
} else if (strCmd == "network_plugin_install") {
std::string sAction = j["data"]["action"];