Merge remote-tracking branch 'upstream/main' into dev/extruder-toggle-wip

# Conflicts:
#	src/libslic3r/GCode.cpp
This commit is contained in:
Noisyfox
2026-06-24 18:22:32 +08:00
90 changed files with 3528 additions and 6381 deletions

View File

@@ -940,6 +940,33 @@ void GUI_App::post_init()
});
}
// Orca: notify users upgrading from a pre-2.4.0 version that profile syncing
// moved from Bambu Cloud to Orca Cloud.
if (is_editor() && m_last_config_version && m_last_config_version->valid()
&& *m_last_config_version < Semver(2, 4, 0)) {
CallAfter([] {
const wxString wiki_url = "https://www.orcaslicer.com/wiki/user_profiles/user_profiles.html#profiles-missing-after-updating-from-bambu-cloud";
MessageDialog dlg(nullptr,
_L("Since version 2.4.0, OrcaSlicer syncs user profiles through Orca Cloud instead of Bambu Cloud.\n\n"
"To migrate your existing profiles, log in to Orca Cloud and they will be transferred automatically. "
"If any profiles are still missing afterwards, follow the guide in our wiki to restore them.\n\n"
"If you did not use Bambu Cloud to sync profiles, this change does not affect you and you can safely ignore this message."),
_L("Profile syncing change"),
wxOK,
"",
_L("Learn more"),
[wiki_url](const wxString &) { wxLaunchDefaultBrowser(wiki_url); });
// Hack: the "Learn more" link renders the message in a wxHtmlWindow whose
// height is underestimated for multi-paragraph text, leaving a scrollbar.
// The html sits in a proportion-1 sizer chain, so grow the dialog (never
// shrink it below its content width) to give the text enough room.
const wxSize sz = dlg.GetSize();
dlg.SetSize(std::max(sz.x, dlg.FromDIP(280)), std::max(sz.y, dlg.FromDIP(200)));
dlg.CenterOnParent();
dlg.ShowModal();
});
}
if(!m_networking_need_update && m_agent) {
m_agent->set_on_ssdp_msg_fn(
[this](std::string json_str) {
@@ -2772,8 +2799,9 @@ bool GUI_App::on_init_inner()
}
}
if(app_config->get("version") != SLIC3R_VERSION) {
app_config->set("version", SLIC3R_VERSION);
//Orca: write OrcaSlicer version
if(app_config->get("version") != SoftFever_VERSION) {
app_config->set("version", SoftFever_VERSION);
}
// Orca: use wxWeakRef to provent wild pointer.

View File

@@ -1506,7 +1506,7 @@ FlowRateCalibrationDialog::FlowRateCalibrationDialog(wxWindow* parent, wxWindowI
auto dlg_btns = new DialogButtons(this, {"OK"});
auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/calibration/flow-ratio-calib");
auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/flow_ratio_calib");
bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
bottom_sizer->AddStretchSpacer();
bottom_sizer->Add(dlg_btns, 0, wxEXPAND);

View File

@@ -414,11 +414,19 @@ bool CrealityPrint::start_print(wxString &msg, const std::string &filename, cons
};
ws.write(net::buffer(to_string(cmd)));
// K1-family firmware closes the WebSocket right after accepting the
// start command, so a blocking read here surfaces a benign
// "End of file [asio.misc:2]" even though the print already started
// (the command is delivered by write()). Read best-effort, ignore errors.
beast::flat_buffer buffer;
ws.read(buffer);
beast::error_code read_ec;
ws.read(buffer, read_ec);
}
ws.close(websocket::close_code::normal);
// Same reason: the printer may have already closed the connection. A close
// error here is not a failure — the start command was sent above.
beast::error_code close_ec;
ws.close(websocket::close_code::normal, close_ec);
return true;
} catch(std::exception const& e) {
BOOST_LOG_TRIVIAL(error) << "CrealityPrint: Error starting print: " << e.what();