Requests: Add more requests

This commit is contained in:
tt2468 2021-08-27 02:33:33 -07:00
parent fc08828773
commit 16697fb65e
4 changed files with 80 additions and 0 deletions

View File

@ -18,8 +18,11 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
{"SetPersistentData", &RequestHandler::SetPersistentData},
{"GetSceneCollectionList", &RequestHandler::GetSceneCollectionList},
{"SetCurrentSceneCollection", &RequestHandler::SetCurrentSceneCollection},
{"CreateSceneCollection", &RequestHandler::CreateSceneCollection},
{"GetProfileList", &RequestHandler::GetProfileList},
{"SetCurrentProfile", &RequestHandler::SetCurrentProfile},
{"CreateProfile", &RequestHandler::CreateProfile},
{"RemoveProfile", &RequestHandler::RemoveProfile},
{"GetProfileParameter", &RequestHandler::GetProfileParameter},
{"SetProfileParameter", &RequestHandler::SetProfileParameter},
{"GetVideoSettings", &RequestHandler::GetVideoSettings},

View File

@ -33,8 +33,11 @@ class RequestHandler {
RequestResult SetPersistentData(const Request&);
RequestResult GetSceneCollectionList(const Request&);
RequestResult SetCurrentSceneCollection(const Request&);
RequestResult CreateSceneCollection(const Request&);
RequestResult GetProfileList(const Request&);
RequestResult SetCurrentProfile(const Request&);
RequestResult CreateProfile(const Request&);
RequestResult RemoveProfile(const Request&);
RequestResult GetProfileParameter(const Request&);
RequestResult SetProfileParameter(const Request&);
RequestResult GetVideoSettings(const Request&);

View File

@ -1,3 +1,4 @@
#include <QMainWindow>
#include <util/config-file.h>
#include "RequestHandler.h"
@ -91,6 +92,28 @@ RequestResult RequestHandler::SetCurrentSceneCollection(const Request& request)
return RequestResult::Success();
}
RequestResult RequestHandler::CreateSceneCollection(const Request& request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
if (!request.ValidateString("sceneCollectionName", statusCode, comment))
return RequestResult::Error(statusCode, comment);
std::string sceneCollectionName = request.RequestData["sceneCollectionName"];
auto sceneCollections = Utils::Obs::ListHelper::GetSceneCollectionList();
if (std::find(sceneCollections.begin(), sceneCollections.end(), sceneCollectionName) != sceneCollections.end())
return RequestResult::Error(RequestStatus::SceneCollectionAlreadyExists);
QMainWindow* mainWindow = reinterpret_cast<QMainWindow*>(obs_frontend_get_main_window());
bool success = false;
QMetaObject::invokeMethod(mainWindow, "AddSceneCollection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, success), Q_ARG(bool, true), Q_ARG(QString, QString::fromStdString(sceneCollectionName)));
if (!success)
return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to create the scene collection for an unknown reason");
return RequestResult::Success();
}
RequestResult RequestHandler::GetProfileList(const Request& request)
{
json responseData;
@ -123,6 +146,47 @@ RequestResult RequestHandler::SetCurrentProfile(const Request& request)
return RequestResult::Success();
}
RequestResult RequestHandler::CreateProfile(const Request& request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
if (!request.ValidateString("profileName", statusCode, comment))
return RequestResult::Error(statusCode, comment);
std::string profileName = request.RequestData["profileName"];
auto profiles = Utils::Obs::ListHelper::GetProfileList();
if (std::find(profiles.begin(), profiles.end(), profileName) != profiles.end())
return RequestResult::Error(RequestStatus::ProfileAlreadyExists);
QMainWindow* mainWindow = reinterpret_cast<QMainWindow*>(obs_frontend_get_main_window());
QMetaObject::invokeMethod(mainWindow, "NewProfile", Qt::BlockingQueuedConnection, Q_ARG(QString, QString::fromStdString(profileName)));
return RequestResult::Success();
}
RequestResult RequestHandler::RemoveProfile(const Request& request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
if (!request.ValidateString("profileName", statusCode, comment))
return RequestResult::Error(statusCode, comment);
std::string profileName = request.RequestData["profileName"];
auto profiles = Utils::Obs::ListHelper::GetProfileList();
if (std::find(profiles.begin(), profiles.end(), profileName) == profiles.end())
return RequestResult::Error(RequestStatus::ProfileNotFound);
if (profiles.size() < 2)
return RequestResult::Error(RequestStatus::NotEnoughProfiles);
QMainWindow* mainWindow = reinterpret_cast<QMainWindow*>(obs_frontend_get_main_window());
QMetaObject::invokeMethod(mainWindow, "DeleteProfile", Qt::BlockingQueuedConnection, Q_ARG(QString, QString::fromStdString(profileName)));
return RequestResult::Success();
}
RequestResult RequestHandler::GetProfileParameter(const Request& request)
{
RequestStatus::RequestStatus statusCode;

View File

@ -103,6 +103,16 @@ namespace RequestStatus {
KeyNotFound = 619,
// The specified data realm (OBS_WEBSOCKET_DATA_REALM_*) was not found
DataRealmNotFound = 620,
// The scene collection already exists
SceneCollectionAlreadyExists = 621,
// There are not enough scene collections to perform the action
NotEnoughSceneCollections = 622,
// The profile already exists
ProfileAlreadyExists = 623,
// There are not enough profiles to perform the action
NotEnoughProfiles = 624,
// There are not enough scenes to perform the action
NotEnoughScenes = 625,
// Processing the request failed unexpectedly
RequestProcessingFailed = 700,