mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-08 00:01:09 +00:00
## Summary
Follow-up to the feature/OrcaSonar review. Scopes the new behavior to the OrcaSonar agent, fixes several AMS-sync and lifecycle bugs, and makes the MQTT tests run in CI. Non-OrcaSonar agents keep their existing behavior. ## Changes Discovery - Gate the background SSDP scan to a configured OrcaSonar machine instead of running for every non-BBL profile; drive discovery on demand from the machine-select popup and back off idle rounds from 5s to 60s. - Add NSLocalNetworkUsageDescription and NSBonjourServices to both macOS Info.plist templates. AMS sync - Resolve id-less printer-set trays by material type in get_ams_cobox_infos and the sidebar badge loop, matching sync_ams_list, so combo arrays and badges stay aligned. - Keep a printer-set tray that resolved by type out of the "unknown or incompatible filaments" dialog. AMS device UI - Gate the "Empty" tray classification, and the editable temperature fields, to the OrcaSonar agent; Bambu keeps "?" and read-only presets. - Validate AMS material temps on confirm: reject out-of-range values and min > max before the command is sent. Storage tab - Bind the show/hide handler on the panel's ancestors (StoragePanel and MonitorPanel) and unbind on destruction, so the Bambu file system stops when the tab is left. Transport - Load /etc/ssl/cert.pem on macOS in add_platform_root_certificates, after set_default_verify_paths. - Release lifecycle_mutex before start()'s connect wait so stop() can cancel the attempt and signal completion instead of stalling the UI thread. Localization - Add OrcaFilesPanel.cpp to list.txt and regenerate the catalogs. ## Tests - Un-hide the loopback MockBroker integration tests (ephemeral port, no network) so ctest registers and runs them. - Mock broker tracks SUBSCRIBE/UNSUBSCRIBE and delivers push_report only to a subscribed topic; the reconnect test asserts the re-SUBSCRIBE. - Add bbl empty-tray cases, an AMS combo-alignment case, and unknowns assertions to the AMS sync tests.
This commit is contained in:
@@ -220,32 +220,40 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent)
|
||||
SetSelecting(false);
|
||||
});
|
||||
|
||||
auto onShowHide = [this](auto &e) {
|
||||
e.Skip();
|
||||
if (auto w = dynamic_cast<wxWindow *>(e.GetEventObject()); !w || w->IsBeingDeleted())
|
||||
return;
|
||||
CallAfter([this] {
|
||||
auto fs = m_image_grid ? m_image_grid->GetFileSystem() : nullptr;
|
||||
if (fs) IsShownOnScreen() ? fs->Start() : fs->Stop();
|
||||
});
|
||||
};
|
||||
Bind(wxEVT_SHOW, onShowHide);
|
||||
// Watch the page host's show/hide. Walk up past any wrapper containers (e.g. a
|
||||
// StoragePanel) so the target stays the same regardless of nesting depth.
|
||||
wxWindow* host = parent;
|
||||
while (host && !host->IsTopLevel() && host->GetParent() && !host->GetParent()->IsTopLevel())
|
||||
host = host->GetParent();
|
||||
if (host && host != this)
|
||||
host->Bind(wxEVT_SHOW, onShowHide);
|
||||
Bind(wxEVT_SHOW, &MediaFilePanel::on_show_hide, this);
|
||||
// A Device sub-tab switch hides the page container (StoragePanel); a main tab
|
||||
// switch hides MonitorPanel inside LazyPage. Neither event reaches the other,
|
||||
// so watch every ancestor below the top-level frame.
|
||||
for (wxWindow* w = GetParent(); w && !w->IsTopLevel(); w = w->GetParent()) {
|
||||
w->Bind(wxEVT_SHOW, &MediaFilePanel::on_show_hide, this);
|
||||
m_show_hosts.push_back(w);
|
||||
}
|
||||
|
||||
m_lan_user = "bblp";
|
||||
}
|
||||
|
||||
MediaFilePanel::~MediaFilePanel()
|
||||
{
|
||||
Unbind(wxEVT_SHOW, &MediaFilePanel::on_show_hide, this);
|
||||
for (wxWindow* w : m_show_hosts)
|
||||
if (w && !w->IsBeingDeleted())
|
||||
w->Unbind(wxEVT_SHOW, &MediaFilePanel::on_show_hide, this);
|
||||
m_show_hosts.clear();
|
||||
|
||||
UpdateByObj(nullptr);
|
||||
}
|
||||
|
||||
void MediaFilePanel::on_show_hide(wxShowEvent& e)
|
||||
{
|
||||
e.Skip();
|
||||
if (auto w = dynamic_cast<wxWindow*>(e.GetEventObject()); !w || w->IsBeingDeleted())
|
||||
return;
|
||||
CallAfter([this] {
|
||||
auto fs = m_image_grid ? m_image_grid->GetFileSystem() : nullptr;
|
||||
if (fs) IsShownOnScreen() ? fs->Start() : fs->Stop();
|
||||
});
|
||||
}
|
||||
|
||||
void MediaFilePanel::UpdateByObj(MachineObject* obj)
|
||||
{
|
||||
bool sdcard_state_changed = false;
|
||||
|
||||
Reference in New Issue
Block a user