From 3fba237c9a1567113eeeb41bb7cca9cb273981d6 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Mon, 21 Sep 2026 11:48:16 +0800 Subject: [PATCH] fix: shift camera signaling channel to network agent --- src/slic3r/GUI/MediaPlayCtrl.cpp | 2 +- src/slic3r/Utils/ICameraSignalingChannel.hpp | 1 - src/slic3r/Utils/ICloudServiceAgent.hpp | 13 ++++++++++++- src/slic3r/Utils/IPrinterAgent.hpp | 9 --------- src/slic3r/Utils/NetworkAgent.cpp | 17 +++++++++-------- src/slic3r/Utils/NetworkAgent.hpp | 2 +- src/slic3r/Utils/OrcaCloudServiceAgent.hpp | 2 ++ 7 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 3ec91bb635..c854683368 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -389,7 +389,7 @@ void MediaPlayCtrl::Play() if (is_webrtc) { BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::Play webrtc: last_state=" << m_last_state << " failed_retry=" << m_failed_retry << " shown=" << IsShownOnScreen(); - auto channel = agent ? agent->create_camera_signaling_channel(m_machine) : nullptr; + auto channel = agent ? agent->create_camera_signaling_channel(m_machine, wxGetApp().get_printer_cloud_provider()) : nullptr; if (!channel) { Stop(_L("Sign in to OrcaCloud to view the camera.")); return; diff --git a/src/slic3r/Utils/ICameraSignalingChannel.hpp b/src/slic3r/Utils/ICameraSignalingChannel.hpp index 70df298843..c7971729b6 100644 --- a/src/slic3r/Utils/ICameraSignalingChannel.hpp +++ b/src/slic3r/Utils/ICameraSignalingChannel.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include #include #include diff --git a/src/slic3r/Utils/ICloudServiceAgent.hpp b/src/slic3r/Utils/ICloudServiceAgent.hpp index 7d326eb4c6..6457b3fda6 100644 --- a/src/slic3r/Utils/ICloudServiceAgent.hpp +++ b/src/slic3r/Utils/ICloudServiceAgent.hpp @@ -1,11 +1,11 @@ #ifndef __I_CLOUD_SERVICE_AGENT_HPP__ #define __I_CLOUD_SERVICE_AGENT_HPP__ +#include "ICameraSignalingChannel.hpp" #include "bambu_networking.hpp" #include "CloudProvider.hpp" #include "../../libslic3r/ProjectTask.hpp" #include -#include #include #include #include @@ -328,6 +328,17 @@ public: */ virtual int get_camera_url(std::string dev_id, std::function callback) = 0; + /** + * Create a camera signaling channel object for P2P camera streaming over WebRTC. + * + */ + virtual std::unique_ptr + create_camera_signaling_channel(const std::string& dev_id) + { + (void) dev_id; + return nullptr; + } + /** * Fetch staff-picked designs from model mall. */ diff --git a/src/slic3r/Utils/IPrinterAgent.hpp b/src/slic3r/Utils/IPrinterAgent.hpp index 6e73da90a2..6915e27559 100644 --- a/src/slic3r/Utils/IPrinterAgent.hpp +++ b/src/slic3r/Utils/IPrinterAgent.hpp @@ -445,15 +445,6 @@ public: * Only meaningful when get_camera_stream_mode() returns an HTTP, HTTPS, or RTSP mode. */ virtual std::string get_camera_url() const { return {}; } - - // Optional native camera signaling. Plugin agents retain the default - // nullptr until a plugin-facing WebRTC contract is defined. - virtual std::unique_ptr - create_camera_signaling_channel(const std::string& dev_id) - { - (void) dev_id; - return nullptr; - } }; } // namespace Slic3r diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index b214a1bc60..0aef8afddd 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -535,6 +535,15 @@ int NetworkAgent::get_camera_url(std::string dev_id, std::function +NetworkAgent::create_camera_signaling_channel(const std::string& dev_id, const std::string& provider) +{ + const auto cloud_agent = get_cloud_agent(provider); + if (cloud_agent) + return cloud_agent->create_camera_signaling_channel(dev_id); + return nullptr; +} + int NetworkAgent::get_design_staffpick(int offset, int limit, std::function callback, const std::string& provider) { const auto cloud_agent = get_cloud_agent(provider); @@ -1073,14 +1082,6 @@ std::string NetworkAgent::get_local_camera_stream_url() const return {}; } -std::unique_ptr -NetworkAgent::create_camera_signaling_channel(const std::string& dev_id) -{ - if (m_printer_agent) - return m_printer_agent->create_camera_signaling_channel(dev_id); - return nullptr; -} - int NetworkAgent::request_bind_ticket(std::string* ticket) { if (m_printer_agent) diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 12fd33a29e..48029d666d 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -116,6 +116,7 @@ public: int query_bind_status(std::vector query_list, unsigned int* http_code, std::string* http_body, const std::string& provider = ORCA_CLOUD_PROVIDER); int modify_printer_name(std::string dev_id, std::string dev_name, const std::string& provider = ORCA_CLOUD_PROVIDER); int get_camera_url(std::string dev_id, std::function callback, const std::string& provider = ORCA_CLOUD_PROVIDER); + std::unique_ptr create_camera_signaling_channel(const std::string& dev_id, const std::string& provider = ORCA_CLOUD_PROVIDER); int get_design_staffpick(int offset, int limit, std::function callback, const std::string& provider = ORCA_CLOUD_PROVIDER); int start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out, const std::string& provider = ORCA_CLOUD_PROVIDER); int get_model_publish_url(std::string* url, const std::string& provider = ORCA_CLOUD_PROVIDER); @@ -186,7 +187,6 @@ public: bool fetch_filament_info(std::string dev_id, FilamentSyncMode sync_mode = FilamentSyncMode::pull); CameraStreamMode get_camera_stream_mode() const; std::string get_local_camera_stream_url() const; - std::unique_ptr create_camera_signaling_channel(const std::string& dev_id); std::string to_orca_filament_id(const std::string& printer_filament_id) const; std::string from_orca_filament_id(const std::string& orca_filament_id) const; int request_bind_ticket(std::string* ticket); diff --git a/src/slic3r/Utils/OrcaCloudServiceAgent.hpp b/src/slic3r/Utils/OrcaCloudServiceAgent.hpp index 3ae86ec27c..565772cf96 100644 --- a/src/slic3r/Utils/OrcaCloudServiceAgent.hpp +++ b/src/slic3r/Utils/OrcaCloudServiceAgent.hpp @@ -1,6 +1,7 @@ #ifndef __ORCA_CLOUD_SERVICE_AGENT_HPP__ #define __ORCA_CLOUD_SERVICE_AGENT_HPP__ +#include "ICameraSignalingChannel.hpp" #include "ICloudServiceAgent.hpp" #include #include @@ -241,6 +242,7 @@ public: // ICloudServiceAgent Interface Implementation - Model Mall & Publishing // ======================================================================== int get_camera_url(std::string dev_id, std::function callback) override; + // std::unique_ptr create_camera_signaling_channel(const std::string& dev_id) override; int get_design_staffpick(int offset, int limit, std::function callback) override; int start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out) override; int get_model_publish_url(std::string* url) override;