* 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 e54e7a61c0
commit c04be9ab37
113 changed files with 8691 additions and 3467 deletions

View File

@@ -1356,6 +1356,9 @@ void PreferencesDialog::create_items()
auto item_show_splash_scr = create_item_checkbox(_L("Show splash screen"), _L("Show the splash screen during startup."), "show_splash_screen");
g_sizer->Add(item_show_splash_scr);
auto item_shared_profiles = create_item_checkbox(_L("Show shared profiles notification"), _L("Show a notification with a link to browse shared profiles when the selected printer is changed."), "show_shared_profiles_notification");
g_sizer->Add(item_shared_profiles);
#ifdef __linux__
auto item_window_button_pos = create_item_checkbox(_L("Use window buttons on left side"), "", "window_buttons_on_left", _L("(Requires restart)"));
g_sizer->Add(item_window_button_pos);
@@ -1534,6 +1537,45 @@ void PreferencesDialog::create_items()
});
g_sizer->Add(item_network_test);
//// ONLINE > Cloud Providers
g_sizer->Add(create_item_title(_L("Cloud Providers")), 1, wxEXPAND);
{
auto sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN));
auto text = new wxStaticText(m_parent, wxID_ANY, _L("Enable Bambu Cloud"),
wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE);
text->SetForegroundColour(DESIGN_GRAY900_COLOR);
text->SetFont(::Label::Body_14);
text->SetToolTip(_L("Allow logging into Bambu Cloud alongside Orca Cloud. When enabled, a Bambu login section appears on the homepage."));
text->Wrap(DESIGN_TITLE_SIZE.x);
auto cb = new ::CheckBox(m_parent);
cb->SetValue(app_config->has_cloud_provider(BBL_CLOUD_PROVIDER));
cb->SetToolTip(text->GetToolTipText());
cb->Bind(wxEVT_TOGGLEBUTTON, [this, cb](wxCommandEvent &e) {
e.Skip(); // let CheckBox::update() refresh the bitmap
if (cb->GetValue()) {
app_config->add_cloud_provider(BBL_CLOUD_PROVIDER);
} else {
app_config->remove_cloud_provider(BBL_CLOUD_PROVIDER);
}
app_config->save();
// Update homepage visibility immediately
auto *mainframe = wxGetApp().mainframe;
if (mainframe && mainframe->m_webview)
mainframe->m_webview->SendCloudProvidersInfo();
});
sizer->Add(text, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3));
sizer->Add(cb, 0, wxALIGN_CENTER | wxRIGHT | wxLEFT, FromDIP(5));
g_sizer->Add(sizer);
}
//// ONLINE > Update & sync
g_sizer->Add(create_item_title(_L("Update & sync")), 1, wxEXPAND);