mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-16 21:42:43 +00:00
fix: camera auto-play on startup
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
#include "DeviceManager.hpp"
|
#include "DeviceManager.hpp"
|
||||||
#include "DeviceCore/DevConfigUtil.h"
|
#include "DeviceCore/DevConfigUtil.h"
|
||||||
#include "slic3r/Utils/NetworkAgent.hpp"
|
#include "slic3r/Utils/NetworkAgent.hpp"
|
||||||
|
#include "slic3r/Utils/NetworkAgentFactory.hpp"
|
||||||
#include "libslic3r/Thread.hpp"
|
#include "libslic3r/Thread.hpp"
|
||||||
#include "libslic3r/AppConfig.hpp"
|
#include "libslic3r/AppConfig.hpp"
|
||||||
#include "I18N.hpp"
|
#include "I18N.hpp"
|
||||||
@@ -195,8 +196,6 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
|
|||||||
m_agent_camera_url = url;
|
m_agent_camera_url = url;
|
||||||
m_url = from_u8(url);
|
m_url = from_u8(url);
|
||||||
if (!changed) {
|
if (!changed) {
|
||||||
if (m_last_state == MEDIASTATE_IDLE && IsEnabled() && !m_web_user_stopped)
|
|
||||||
Play();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// A genuine machine/URL switch: not a failure, so drop any pending
|
// A genuine machine/URL switch: not a failure, so drop any pending
|
||||||
@@ -207,8 +206,6 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
|
|||||||
m_next_retry = wxDateTime();
|
m_next_retry = wxDateTime();
|
||||||
if (m_last_state != MEDIASTATE_IDLE)
|
if (m_last_state != MEDIASTATE_IDLE)
|
||||||
Stop(" ");
|
Stop(" ");
|
||||||
if (IsEnabled())
|
|
||||||
Play();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case CameraStreamMode::webrtc: {
|
case CameraStreamMode::webrtc: {
|
||||||
@@ -222,15 +219,11 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
|
|||||||
m_url.clear();
|
m_url.clear();
|
||||||
m_agent_camera_url.clear();
|
m_agent_camera_url.clear();
|
||||||
if (!changed) {
|
if (!changed) {
|
||||||
if (m_last_state == MEDIASTATE_IDLE && IsEnabled() && !m_web_user_stopped)
|
|
||||||
Play();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_web_user_stopped = false;
|
m_web_user_stopped = false;
|
||||||
if (m_last_state != MEDIASTATE_IDLE)
|
if (m_last_state != MEDIASTATE_IDLE)
|
||||||
Stop(" ");
|
Stop(" ");
|
||||||
if (IsEnabled())
|
|
||||||
Play();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -266,8 +259,6 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
|
|||||||
}
|
}
|
||||||
Enable(obj && obj->is_info_ready() && obj->m_push_count > 0);
|
Enable(obj && obj->is_info_ready() && obj->m_push_count > 0);
|
||||||
if (machine == m_machine) {
|
if (machine == m_machine) {
|
||||||
if (m_last_state == MEDIASTATE_IDLE && IsEnabled())
|
|
||||||
Play();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_machine = machine;
|
m_machine = machine;
|
||||||
@@ -410,7 +401,12 @@ void MediaPlayCtrl::Play()
|
|||||||
m_webrtc_epoch = m_webrtc_ctrl->epoch();
|
m_webrtc_epoch = m_webrtc_ctrl->epoch();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default:
|
default: // assumed to be CameraStreamMode::none
|
||||||
|
NetworkAgent* agent = wxGetApp().getAgent();
|
||||||
|
if (agent && agent->get_printer_agent()->get_agent_info().id != BBL_PRINTER_AGENT_ID) {
|
||||||
|
Stop(_L("Camera not available"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -586,12 +582,9 @@ void MediaPlayCtrl::Stop(wxString const &msg, wxString const &msg2)
|
|||||||
SetStatus(msg);
|
SetStatus(msg);
|
||||||
else
|
else
|
||||||
SetStatus(_L("Video Stopped."), false);
|
SetStatus(_L("Video Stopped."), false);
|
||||||
// SetMachineObject re-drives Play() on every device refresh (~1s).
|
// Keep retries bounded for an explicit or retry-driven playback attempt.
|
||||||
// This branch returns before the legacy back-off below, so on a real
|
// m_failed_retry is cleared on success (onStateChanged) and on a deliberate
|
||||||
// failure it has to arm m_next_retry itself or the stream restarts
|
// machine switch (SetMachineObject); manual playback via TogglePlay resets it.
|
||||||
// once a second forever. Escalate 5s..30s; m_failed_retry is cleared
|
|
||||||
// on success (onStateChanged) and on a deliberate switch
|
|
||||||
// (SetMachineObject), and a manual play via TogglePlay resets both.
|
|
||||||
if (m_failed_code != 0) {
|
if (m_failed_code != 0) {
|
||||||
const bool auto_retry = wxGetApp().app_config->get("liveview", "auto_retry") != "false";
|
const bool auto_retry = wxGetApp().app_config->get("liveview", "auto_retry") != "false";
|
||||||
++m_failed_retry;
|
++m_failed_retry;
|
||||||
@@ -935,9 +928,8 @@ void MediaPlayCtrl::on_show_hide(wxShowEvent &evt)
|
|||||||
evt.Skip();
|
evt.Skip();
|
||||||
if (m_isBeingDeleted) return;
|
if (m_isBeingDeleted) return;
|
||||||
m_failed_retry = 0;
|
m_failed_retry = 0;
|
||||||
if (m_next_retry.IsValid()) // Try open 2 seconds later, to avoid quick play/stop
|
if (!IsShownOnScreen())
|
||||||
m_next_retry = wxDateTime::Now() + wxTimeSpan::Seconds(2);
|
Stop();
|
||||||
IsShownOnScreen() ? Play() : Stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MediaPlayCtrl::media_proc()
|
void MediaPlayCtrl::media_proc()
|
||||||
|
|||||||
Reference in New Issue
Block a user