diff --git a/docs/partials/enumsHeader.md b/docs/partials/enumsHeader.md new file mode 100644 index 00000000..d6595b68 --- /dev/null +++ b/docs/partials/enumsHeader.md @@ -0,0 +1,2 @@ +# Enums +These are enumeration declarations, which are referenced throughout obs-websocket's protocol. diff --git a/src/requesthandler/RequestHandler_Sources.cpp b/src/requesthandler/RequestHandler_Sources.cpp new file mode 100644 index 00000000..8bab3cf0 --- /dev/null +++ b/src/requesthandler/RequestHandler_Sources.cpp @@ -0,0 +1,23 @@ +#include "RequestHandler.h" + +#include "../plugin-macros.generated.h" + +RequestResult RequestHandler::GetSourceActive(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + if (!request.ValidateString("sourceName", statusCode, comment)) { + return RequestResult::Error(statusCode, comment); + } + + std::string sourceName = request.RequestData["sourceName"]; + + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.c_str()); + if (!source) + return RequestResult::Error(RequestStatus::SourceNotFound); + + json responseData; + responseData["videoActive"] = obs_source_active(source); + responseData["videoShowing"] = obs_source_showing(source); + return RequestResult::Success(responseData); +} diff --git a/src/utils/Platform.cpp b/src/utils/Platform.cpp index 285e621c..e775dfb4 100644 --- a/src/utils/Platform.cpp +++ b/src/utils/Platform.cpp @@ -78,12 +78,25 @@ bool Utils::Platform::GetCommandLineFlagSet(QString arg) return parser.isSet(cmdlineOption); } +struct SystemTrayNotification { + QSystemTrayIcon::MessageIcon icon; + QString title; + QString body; +}; + void Utils::Platform::SendTrayNotification(QSystemTrayIcon::MessageIcon icon, QString title, QString body) { if (!QSystemTrayIcon::isSystemTrayAvailable() || !QSystemTrayIcon::supportsMessages()) return; - void *systemTrayPtr = obs_frontend_get_system_tray(); - auto systemTray = reinterpret_cast(systemTrayPtr); - systemTray->showMessage(title, body, icon); + SystemTrayNotification *notification = new SystemTrayNotification{icon, title, body}; + + obs_queue_task(OBS_TASK_UI, [](void* param) { + void *systemTrayPtr = obs_frontend_get_system_tray(); + auto systemTray = reinterpret_cast(systemTrayPtr); + + auto notification = reinterpret_cast(param); + systemTray->showMessage(notification->title, notification->body, notification->icon); + delete notification; + }, (void*)notification, false); }