From 3989ea0780c5384288e3fe071db9073687133b26 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Tue, 2 Feb 2021 06:16:49 -0800 Subject: [PATCH] Requests: Add RefreshBrowserSource --- src/WSRequestHandler.cpp | 1 + src/WSRequestHandler.h | 1 + src/WSRequestHandler_Sources.cpp | 35 ++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 5c502727..0d800c56 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -120,6 +120,7 @@ const QHash WSRequestHandler::messageMap{ { "SetAudioMonitorType", &WSRequestHandler::SetAudioMonitorType }, { "GetSourceDefaultSettings", &WSRequestHandler::GetSourceDefaultSettings }, { "TakeSourceScreenshot", &WSRequestHandler::TakeSourceScreenshot }, + { "RefreshBrowserSource", &WSRequestHandler::RefreshBrowserSource }, { "GetSourceFilters", &WSRequestHandler::GetSourceFilters }, { "GetSourceFilterInfo", &WSRequestHandler::GetSourceFilterInfo }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 16a64742..d0a8ba25 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -137,6 +137,7 @@ class WSRequestHandler { RpcResponse SetAudioMonitorType(const RpcRequest&); RpcResponse GetSourceDefaultSettings(const RpcRequest&); RpcResponse TakeSourceScreenshot(const RpcRequest&); + RpcResponse RefreshBrowserSource(const RpcRequest&); RpcResponse GetSourceFilters(const RpcRequest&); RpcResponse GetSourceFilterInfo(const RpcRequest&); diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 23a31bed..f4035b6a 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -1894,3 +1894,38 @@ RpcResponse WSRequestHandler::TakeSourceScreenshot(const RpcRequest& request) { obs_data_set_string(response, "sourceName", obs_source_get_name(source)); return request.success(response); } + +/** +* Refreshes the specified browser source. +* +* @param {String} `sourceName` Source name. +* +* @api requests +* @name RefreshBrowserSource +* @category sources +* @since 4.9.0 +*/ +RpcResponse WSRequestHandler::RefreshBrowserSource(const RpcRequest& request) +{ + if (!request.hasField("sourceName")) { + return request.failed("missing request parameters"); + } + + QString sourceName = obs_data_get_string(request.parameters(), "sourceName"); + + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + return request.failed("specified source doesn't exist"); + } + + if (strcmp(obs_source_get_id(source), "browser_source") != 0) { + return request.failed("specified source is not a browser"); + } + + obs_properties_t *sourceProperties = obs_source_properties(source); + obs_property_t *property = obs_properties_get(sourceProperties, "refreshnocache"); + obs_property_button_clicked(property, source); // This returns a boolean but we ignore it because the browser plugin always returns `false`. + obs_properties_destroy(sourceProperties); + + return request.success(); +}