#include "WebAPI.h" #include "Recorder/Recorder.h" #include "Recorder/DigooRecorder.h" #include "Recorder/FoscamRecorder.h" #include "Recorder/VStarCamRecorder.h" #include "Recorder/WatchBotRecorder.h" #include "Recorder/ZModoRecorder.h" #include #include namespace CameraRecorder { namespace API { // API Description // Status Query // Goal: Provide status information based on POST data // Use: DomoticaSite status update // URL: http:///API////// WebAPI::WebAPI() { } WebAPI::~WebAPI() { } std::string WebAPI::ProcessQuery(ctpl::thread_pool* pThreadPool, Http::HttpClient* pHttpClient, const std::string& path, const std::string& ffmpeg, const std::string& uri, const std::vector& postData) { std::string output; std::vector uriTokens = StringAlgorithm::split(uri, '/'); if (uriTokens.size() < 7) return std::string(); std::string action = uriTokens[1]; std::string brand = uriTokens[2]; Recorder::Settings settings; settings.Path = path; settings.IpAddress = uriTokens[3]; settings.Port = uriTokens[4]; settings.Username = uriTokens[5]; settings.Password = uriTokens[6]; int numberOfImages = 5; if (uriTokens.size() > 7) numberOfImages = stoi(uriTokens[7]); if (StringAlgorithm::iequals("Digoo", brand)) { auto recorder = Recorder::DigooRecorder(pHttpClient, settings); if (StringAlgorithm::iequals("Snapshot", action)) output = recorder.Snapshot(pThreadPool); else if (StringAlgorithm::iequals("MultiSnapshot", action)) output = recorder.MultiSnapshot(pThreadPool, numberOfImages); else if (StringAlgorithm::iequals("Video", action)) output = recorder.Video(pThreadPool, ffmpeg); } else if (StringAlgorithm::iequals("Foscam", brand)) { auto recorder = Recorder::FoscamRecorder(pHttpClient, settings); if (StringAlgorithm::iequals("Snapshot", action)) output = recorder.Snapshot(pThreadPool); else if (StringAlgorithm::iequals("MultiSnapshot", action)) output = recorder.MultiSnapshot(pThreadPool, numberOfImages); else if (StringAlgorithm::iequals("Video", action)) output = recorder.Video(pThreadPool, ffmpeg); } else if (StringAlgorithm::iequals("VStarCam", brand)) { auto recorder = Recorder::VStarCamRecorder(pHttpClient, settings); if (StringAlgorithm::iequals("Snapshot", action)) output = recorder.Snapshot(pThreadPool); else if (StringAlgorithm::iequals("MultiSnapshot", action)) output = recorder.MultiSnapshot(pThreadPool, numberOfImages); else if (StringAlgorithm::iequals("Video", action)) output = recorder.Video(pThreadPool, ffmpeg); } else if (StringAlgorithm::iequals("WatchBot", brand)) { auto recorder = Recorder::WatchBotRecorder(pHttpClient, settings); if (StringAlgorithm::iequals("Snapshot", action)) output = recorder.Snapshot(pThreadPool); else if (StringAlgorithm::iequals("MultiSnapshot", action)) output = recorder.MultiSnapshot(pThreadPool, numberOfImages); else if (StringAlgorithm::iequals("Video", action)) output = recorder.Video(pThreadPool, ffmpeg); } else if (StringAlgorithm::iequals("ZModo", brand)) { auto recorder = Recorder::ZModoRecorder(pHttpClient, settings); if (StringAlgorithm::iequals("Snapshot", action)) output = recorder.Snapshot(pThreadPool); else if (StringAlgorithm::iequals("MultiSnapshot", action)) output = recorder.MultiSnapshot(pThreadPool, numberOfImages); else if (StringAlgorithm::iequals("Video", action)) output = recorder.Video(pThreadPool, ffmpeg); } return output; } } // namespace API } // namespace CameraRecorder