diff --git a/src/requesthandler/RequestHandler.cpp b/src/requesthandler/RequestHandler.cpp index 8e2fcfc3..f5ef5152 100644 --- a/src/requesthandler/RequestHandler.cpp +++ b/src/requesthandler/RequestHandler.cpp @@ -20,6 +20,8 @@ const std::map RequestHandler::_handlerMap {"SetCurrentProfile", &RequestHandler::SetCurrentProfile}, {"GetProfileParameter", &RequestHandler::GetProfileParameter}, {"SetProfileParameter", &RequestHandler::SetProfileParameter}, + {"GetProfilePersistentData", &RequestHandler::GetProfilePersistentData}, + {"SetProfilePersistentData", &RequestHandler::SetProfilePersistentData}, {"GetVideoSettings", &RequestHandler::GetVideoSettings}, {"SetVideoSettings", &RequestHandler::SetVideoSettings}, {"GetStreamServiceSettings", &RequestHandler::GetStreamServiceSettings}, diff --git a/src/requesthandler/RequestHandler.h b/src/requesthandler/RequestHandler.h index 46cd542a..8507ce70 100644 --- a/src/requesthandler/RequestHandler.h +++ b/src/requesthandler/RequestHandler.h @@ -35,6 +35,8 @@ class RequestHandler { RequestResult SetCurrentProfile(const Request&); RequestResult GetProfileParameter(const Request&); RequestResult SetProfileParameter(const Request&); + RequestResult GetProfilePersistentData(const Request&); + RequestResult SetProfilePersistentData(const Request&); RequestResult GetVideoSettings(const Request&); RequestResult SetVideoSettings(const Request&); RequestResult GetStreamServiceSettings(const Request&); diff --git a/src/requesthandler/RequestHandler_Config.cpp b/src/requesthandler/RequestHandler_Config.cpp index b5476302..1cb9d788 100644 --- a/src/requesthandler/RequestHandler_Config.cpp +++ b/src/requesthandler/RequestHandler_Config.cpp @@ -124,6 +124,50 @@ RequestResult RequestHandler::SetProfileParameter(const Request& request) return RequestResult::Success(); } +RequestResult RequestHandler::GetProfilePersistentData(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + if (!request.ValidateString("slotName", statusCode, comment)) + return RequestResult::Error(statusCode, comment); + + std::string slotName = request.RequestData["slotName"]; + + std::string persistentDataPath = Utils::Obs::StringHelper::GetCurrentProfilePath(); + persistentDataPath += "/obsWebSocketPersistentData.json"; + + json responseData; + json persistentData; + if (!(Utils::Json::GetJsonFileContent(persistentDataPath, persistentData) && persistentData.contains(slotName))) + responseData["slotData"] = nullptr; + else + responseData["slotData"] = persistentData[slotName]; + + return RequestResult::Success(responseData); +} + +RequestResult RequestHandler::SetProfilePersistentData(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + if (!(request.ValidateString("slotName", statusCode, comment) && request.ValidateBasic("slotName", statusCode, comment))) + return RequestResult::Error(statusCode, comment); + + std::string slotName = request.RequestData["slotName"]; + json slotData = request.RequestData["slotData"]; + + std::string persistentDataPath = Utils::Obs::StringHelper::GetCurrentProfilePath(); + persistentDataPath += "/obsWebSocketPersistentData.json"; + + json persistentData = json::object(); + Utils::Json::GetJsonFileContent(persistentDataPath, persistentData); + persistentData[slotName] = slotData; + if (!Utils::Json::SetJsonFileContent(persistentDataPath, persistentData)) + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Unable to write persistent data. No permissions?"); + + return RequestResult::Success(); +} + RequestResult RequestHandler::GetVideoSettings(const Request& request) { struct obs_video_info ovi;