* Add OrcaCloud sync platform and preset bundle sharing system

  Introduce OrcaCloud, a cloud sync platform for user presets, alongside
  a preset bundle system that enables sharing printer/filament/process
  profiles as local exportable bundles or subscribed cloud bundles.

  OrcaCloud platform:
  - Auth to Orca Cloud
  - Encrypted token storage (file-based or system keychain)
  - User preset sync with
  - Profile migration from default/bambu folders on first login
  - Homepage integration with entrance to cloud.orcaslicer.com

  Preset bundles:
  - Local bundle import/export with bundle_structure.json metadata
  - Subscribed cloud bundles with version-based update checking
  - Thread-safe concurrent bundle access with read-write mutex
  - Canonical bundle preset naming (_local/<id>/... and _subscribed/<id>/...)
  - Bundle presets are read-only; grouped under subheaders in combo boxes
  - PresetBundleDialog with auto-sync toggle, refresh, update notifications
  - Hyperlinked bundle names to cloud bundle pages

  Co-authored-by: Sabriel Koh <sabrielkcr@gmail.com>
  Co-authored-by: Derrick <derrick992110@gmail.com>
  Co-authored-by: Mykola Nahirnyi <mnahirnyi@amcbridge.com>
  Co-authored-by: Ian Chua <iancrb00@gmail.com>
  Co-authored-by: Draginraptor <draginraptor@gmail.com>
  Co-authored-by: ExPikaPaka <112851715+ExPikaPaka@users.noreply.github.com>
  Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
  Co-authored-by: Ocraftyone <Ocraftyone@users.noreply.github.com>
  Co-authored-by: yw4z <ywsyildiz@gmail.com>
  Co-authored-by: peterm-m <101202951+peterm-m@users.noreply.github.com>

* Fixed an issue on Windows it failed to login Orca Cloud with Google account
This commit is contained in:
SoftFever
2026-05-01 18:01:29 +08:00
committed by GitHub
parent 6d8488c513
commit c86ca771de
113 changed files with 8691 additions and 3467 deletions

View File

@@ -417,8 +417,13 @@ void WebViewPanel::OnClose(wxCloseEvent& evt)
void WebViewPanel::OnFreshLoginStatus(wxTimerEvent &event)
{
auto mainframe = Slic3r::GUI::wxGetApp().mainframe;
if (mainframe && mainframe->m_webview == this)
Slic3r::GUI::wxGetApp().get_login_info();
if (mainframe && mainframe->m_webview == this) {
Slic3r::GUI::wxGetApp().get_login_info(ORCA_CLOUD_PROVIDER);
auto* app_config = Slic3r::GUI::wxGetApp().app_config;
if (app_config && app_config->has_cloud_provider(BBL_CLOUD_PROVIDER)) {
Slic3r::GUI::wxGetApp().get_login_info(BBL_CLOUD_PROVIDER);
}
}
}
void WebViewPanel::SetLoginPanelVisibility(bool bshow)
@@ -509,6 +514,27 @@ void WebViewPanel::ShowNetpluginTip()
RunScript(strJS);
}
void WebViewPanel::SendCloudProvidersInfo()
{
auto* app_config = wxGetApp().app_config;
if (!app_config)
return;
auto providers = app_config->get_cloud_providers();
json j;
j["command"] = "cloud_providers_info";
json data;
json provider_array = json::array();
for (const auto& p : providers) {
provider_array.push_back(p);
}
data["providers"] = provider_array;
j["data"] = data;
wxString strJS = wxString::Format("window.postMessage(%s)", j.dump());
RunScript(strJS);
}
void WebViewPanel::get_design_staffpick(int offset, int limit, std::function<void(std::string)> callback)
{
// auto host = wxGetApp().get_http_url(wxGetApp().app_config->get_country_code(), "v1/design-service/design/staffpick");
@@ -613,6 +639,7 @@ void WebViewPanel::OnDocumentLoaded(wxWebViewEvent& evt)
wxLogMessage("%s", "Document loaded; url='" + evt.GetURL() + "'");
}
UpdateState();
SendCloudProvidersInfo();
}
void WebViewPanel::OnTitleChanged(wxWebViewEvent &evt)