mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-09 10:16:50 +00:00
feature add privacy policy for guide
This commit is contained in:
@@ -62,7 +62,8 @@ function GotoPolicyPage()
|
|||||||
|
|
||||||
SendWXMessage( JSON.stringify(tSend) );
|
SendWXMessage( JSON.stringify(tSend) );
|
||||||
|
|
||||||
window.location.href="../21/index.html";
|
|
||||||
|
window.location.href="../3/index.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="AcceptArea">
|
<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 class="NormalBtn trans" id="AcceptBtn" tid="t9" onclick="GotoFilamentPage()">Next</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
.PolicyArea
|
||||||
{
|
{
|
||||||
background-color: #4A4A51;
|
background-color: #4A4A51;
|
||||||
|
|||||||
@@ -1,31 +1,12 @@
|
|||||||
|
|
||||||
|
var m_Region = '';
|
||||||
|
|
||||||
function OnInit()
|
function OnInit()
|
||||||
{
|
{
|
||||||
TranslatePage();
|
TranslatePage();
|
||||||
|
|
||||||
SendPrivacySelect();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function SendPrivacySelect()
|
|
||||||
{
|
|
||||||
let nVal="refuse";
|
|
||||||
if( $('#ChoosePrivacy').is(':checked') )
|
|
||||||
nVal="agree";
|
|
||||||
|
|
||||||
var tSend={};
|
RequestProfile();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function RequestProfile()
|
function RequestProfile()
|
||||||
@@ -40,41 +21,72 @@ function RequestProfile()
|
|||||||
function HandleStudio( pVal )
|
function HandleStudio( pVal )
|
||||||
{
|
{
|
||||||
let strCmd=pVal['command'];
|
let strCmd=pVal['command'];
|
||||||
//alert(strCmd);
|
|
||||||
|
|
||||||
if(strCmd=='response_userguide_profile')
|
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) );
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,24 +16,21 @@
|
|||||||
</head>
|
</head>
|
||||||
<body onLoad="OnInit()">
|
<body onLoad="OnInit()">
|
||||||
<div id="Title">
|
<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>
|
||||||
<div id="Content">
|
<div id="Content">
|
||||||
<div id="PolicyTxt" class="TextS2 TextArea1 ZScrol">
|
<div id="PolicyTxt" class="TextS2 TextArea1 ZScrol">
|
||||||
<a class="trans" tid="t54">In the 3D Printing community, we learn from each other’s 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 other’s 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.
|
. 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>
|
</a>
|
||||||
|
<p class="trans" tid="t113" style="text-indent:2em;">You may change your choice in preference anytime.</p>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<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>
|
||||||
<div id="AcceptArea">
|
<div id="AcceptArea">
|
||||||
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="window.open('../11/index.html','_self')">Back</div>
|
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="GotoBackPage()">Back</div>
|
||||||
<div class="NormalBtn trans" tid="t9" id="AcceptBtn" onclick="GotoNextPage()">Next</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>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="Content">
|
<div id="Content">
|
||||||
<div id="PolicyTxt">
|
<div id="PolicyTxt">
|
||||||
<a class="trans" tid="t54">In the 3D Printing community, we learn from each other’s 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 other’s 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.
|
. 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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,15 @@
|
|||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
bool get_privacy_policy()
|
||||||
|
{
|
||||||
|
return isAgreeSlice;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_privacy_policy(bool isAgree) {
|
||||||
|
isAgreeSlice = isAgree;
|
||||||
|
}
|
||||||
|
|
||||||
std::string get_timestamp_seconds()
|
std::string get_timestamp_seconds()
|
||||||
{
|
{
|
||||||
auto now = std::chrono::system_clock::now();
|
auto now = std::chrono::system_clock::now();
|
||||||
@@ -26,16 +35,16 @@ long long get_time_timestamp()
|
|||||||
return 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;
|
long long hours = timestamp / 3600000;
|
||||||
uint64_t remaining_ms = 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;
|
remaining_ms = remaining_ms % 60000;
|
||||||
|
|
||||||
uint64_t seconds = remaining_ms / 1000;
|
long long seconds = remaining_ms / 1000;
|
||||||
uint64_t ms = remaining_ms % 1000;
|
long long ms = remaining_ms % 1000;
|
||||||
|
|
||||||
char buffer[32] = {0};
|
char buffer[32] = {0};
|
||||||
std::snprintf(buffer, sizeof(buffer), "%02llu:%02llu:%02llu.%03llu", hours, minutes, seconds, ms);
|
std::snprintf(buffer, sizeof(buffer), "%02llu:%02llu:%02llu.%03llu", hours, minutes, seconds, ms);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define _BURY_POINT_hpp_
|
#define _BURY_POINT_hpp_
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
#define BURY_POINT "bury_point"
|
#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 std::string get_timestamp_seconds();
|
||||||
extern long long get_time_timestamp();
|
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
|
#endif
|
||||||
@@ -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)
|
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);
|
sentry_value_t level_val = sentry_value_get_by_key(event, SENTRY_KEY_LEVEL);
|
||||||
std::string levelName = sentry_value_as_string(level_val);
|
std::string levelName = sentry_value_as_string(level_val);
|
||||||
|
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
#include "PrivacyUpdateDialog.hpp"
|
#include "PrivacyUpdateDialog.hpp"
|
||||||
#include "ModelMall.hpp"
|
#include "ModelMall.hpp"
|
||||||
#include "HintNotification.hpp"
|
#include "HintNotification.hpp"
|
||||||
|
#include "bury_cfg/bury_point.hpp"
|
||||||
//#ifdef WIN32
|
//#ifdef WIN32
|
||||||
//#include "BaseException.h"
|
//#include "BaseException.h"
|
||||||
//#endif
|
//#endif
|
||||||
@@ -3754,6 +3754,9 @@ if (res) {
|
|||||||
} catch (std::exception &) {
|
} catch (std::exception &) {
|
||||||
// wxMessageBox(e.what(), "", MB_OK);
|
// wxMessageBox(e.what(), "", MB_OK);
|
||||||
}
|
}
|
||||||
|
auto isAgree = wxGetApp().app_config->get("snapmaker_privacy_policy", "isagree");
|
||||||
|
|
||||||
|
set_privacy_policy(isAgree == "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUI_App::ShowDownNetPluginDlg() {
|
void GUI_App::ShowDownNetPluginDlg() {
|
||||||
@@ -7059,6 +7062,9 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage
|
|||||||
mainframe->refresh_plugin_tips();
|
mainframe->refresh_plugin_tips();
|
||||||
// BBS: remove SLA related message
|
// BBS: remove SLA related message
|
||||||
}
|
}
|
||||||
|
auto isAgree = wxGetApp().app_config->get("snapmaker_privacy_policy", "isagree");
|
||||||
|
|
||||||
|
set_privacy_policy(isAgree == "true");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7746,7 +7746,7 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
|
|||||||
if (m_slice_timing_active) {
|
if (m_slice_timing_active) {
|
||||||
auto end_time = std::chrono::steady_clock::now();
|
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();
|
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()) {
|
if (evt.cancelled()) {
|
||||||
BOOST_LOG_TRIVIAL(info) << "Slicing cancelled after " << duration_ms << " ms";
|
BOOST_LOG_TRIVIAL(info) << "Slicing cancelled after " << duration_ms << " ms";
|
||||||
m_slice_start_time = {};
|
m_slice_start_time = {};
|
||||||
|
|||||||
@@ -492,6 +492,15 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt)
|
|||||||
this->Close();
|
this->Close();
|
||||||
} else if (strCmd == "save_region") {
|
} else if (strCmd == "save_region") {
|
||||||
m_Region = j["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") {
|
else if (strCmd == "network_plugin_install") {
|
||||||
std::string sAction = j["data"]["action"];
|
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");
|
// m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "1");
|
||||||
// } else
|
// } else
|
||||||
// m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "0");
|
// 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("region", m_Region);
|
||||||
m_MainPtr->app_config->set_bool("stealth_mode", StealthMode);
|
m_MainPtr->app_config->set_bool("stealth_mode", StealthMode);
|
||||||
|
|
||||||
|
|||||||
@@ -588,6 +588,14 @@ void WebPresetDialog::OnScriptMessage(wxWebViewEvent& evt)
|
|||||||
this->Close();
|
this->Close();
|
||||||
} else if (strCmd == "save_region") {
|
} else if (strCmd == "save_region") {
|
||||||
m_Region = j["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") {
|
} else if (strCmd == "network_plugin_install") {
|
||||||
std::string sAction = j["data"]["action"];
|
std::string sAction = j["data"]["action"];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user