Added rest query to upate youtube-dl

This commit is contained in:
Leon Etienne (ubuntu wsl) 2020-09-29 23:58:09 +02:00
parent 8f3ba858c5
commit db707b794b
7 changed files with 122 additions and 2 deletions

View File

@ -14,6 +14,7 @@ void RestQueryHandler::PreInit()
bool RestQueryHandler::ProcessQuery(const std::string clientAdress, const Json& request, JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode) bool RestQueryHandler::ProcessQuery(const std::string clientAdress, const Json& request, JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode)
{ {
// Print the client ip address alongide every log
log->SetAdditionalInformation(std::string("@") + clientAdress); log->SetAdditionalInformation(std::string("@") + clientAdress);
if (!ValidateField("request", JDType::STRING, request, responseBody)) if (!ValidateField("request", JDType::STRING, request, responseBody))
@ -39,6 +40,7 @@ bool RestQueryHandler::ProcessQuery(const std::string clientAdress, const Json&
else if (requestName == "get_os_name") return GetOSName(requestBody, responseBody, responseCode); else if (requestName == "get_os_name") return GetOSName(requestBody, responseBody, responseCode);
else if (requestName == "fetch_session_logs") return FetchSessionLogs(requestBody, responseBody, responseCode); else if (requestName == "fetch_session_logs") return FetchSessionLogs(requestBody, responseBody, responseCode);
else if (requestName == "fetch_alltime_logs") return FetchAlltimeLogs(requestBody, responseBody, responseCode); else if (requestName == "fetch_alltime_logs") return FetchAlltimeLogs(requestBody, responseBody, responseCode);
else if (requestName == "update_dep_youtubedl") return UpdateYoutubeDL(requestBody, responseBody, responseCode);
@ -112,7 +114,12 @@ bool RestQueryHandler::FetchSessionCache(const JsonBlock& request, JsonBlock& re
JsonBlock dummy; JsonBlock dummy;
if (ValidateField("max_age", JDType::INT, request, dummy)) if (ValidateField("max_age", JDType::INT, request, dummy))
{ {
max_age = request["max_age"].AsInt; // Only respect the given max_age, if the age does not exceed tubio boot-time!
// This way we can ensure that only entries of this SESSION will appear!
if (request["max_age"].AsInt >= 0)
{
max_age = min(request["max_age"].AsInt, max_age);
}
} }
if (ValidateField("max_num", JDType::INT, request, dummy)) if (ValidateField("max_num", JDType::INT, request, dummy))
{ {
@ -357,7 +364,43 @@ bool RestQueryHandler::ClearLogs(const JsonBlock& request, JsonBlock& responseBo
return true; return true;
} }
bool RestQueryHandler::UpdateYoutubeDL(const JsonBlock& request, JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode)
{
log->cout << "Updating youtube-dl...";
log->Flush();
std::string result = Updater::UpdateYoutubeDL();
if (result == "OK")
{
log->cout << " => OK!";
log->Flush();
responseCode = OK;
responseBody.CloneFrom(RestResponseTemplates::GetByCode(OK));
responseBody.Set("message") = "Updated youtube-dl.exe successfully!";
}
else if (result == "not implemented")
{
log->cout << " => NOT_IMPLEMENTED!";
log->Flush();
log->Flush();
responseCode = NOT_IMPLEMENTED;
responseBody.CloneFrom(RestResponseTemplates::GetByCode(NOT_IMPLEMENTED));
responseBody.Set("message") = "On linux you have to update youtube-dl yourself since it is a system-wide package handled by various package managers!";
}
else // Some other error
{
log->cout << " => urlmon error: " << result;
log->Flush();
responseCode = INTERNAL_SERVER_ERROR;
responseBody.CloneFrom(RestResponseTemplates::GetByCode(INTERNAL_SERVER_ERROR));
responseBody.Set("message") = "Unable do update youtube-dl.exe! See urlmon " + result;
}
return true;
}

View File

@ -5,6 +5,7 @@
#include "Logger.h" #include "Logger.h"
#include "DownloadManager.h" #include "DownloadManager.h"
#include "ConsoleManager.h" #include "ConsoleManager.h"
#include "Updater.h"
namespace Rest namespace Rest
{ {
@ -31,6 +32,7 @@ namespace Rest
static bool FetchAlltimeLogs(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode); static bool FetchAlltimeLogs(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
static bool FetchSessionLogs(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode); static bool FetchSessionLogs(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
static bool GetDiskUsage(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode); static bool GetDiskUsage(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
static bool UpdateYoutubeDL(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
static bool ValidateField(const std::string name, const JasonPP::JDType type, const JasonPP::Json& checkThat, JasonPP::JsonBlock& putErrorResponseHere); static bool ValidateField(const std::string name, const JasonPP::JDType type, const JasonPP::Json& checkThat, JasonPP::JsonBlock& putErrorResponseHere);

View File

@ -93,6 +93,7 @@
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -110,6 +111,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -123,6 +125,7 @@
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -140,6 +143,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>urlmon.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
@ -155,6 +159,7 @@
<ClCompile Include="RestQueryHandler.cpp" /> <ClCompile Include="RestQueryHandler.cpp" />
<ClCompile Include="RestResponseTemplates.cpp" /> <ClCompile Include="RestResponseTemplates.cpp" />
<ClCompile Include="HttpServer.cpp" /> <ClCompile Include="HttpServer.cpp" />
<ClCompile Include="Updater.cpp" />
<ClCompile Include="XGConfig.cpp" /> <ClCompile Include="XGConfig.cpp" />
<ClCompile Include="XGControl.cpp" /> <ClCompile Include="XGControl.cpp" />
</ItemGroup> </ItemGroup>
@ -171,6 +176,7 @@
<ClInclude Include="RestQueryHandler.h" /> <ClInclude Include="RestQueryHandler.h" />
<ClInclude Include="RestResponseTemplates.h" /> <ClInclude Include="RestResponseTemplates.h" />
<ClInclude Include="HttpServer.h" /> <ClInclude Include="HttpServer.h" />
<ClInclude Include="Updater.h" />
<ClInclude Include="XGConfig.h" /> <ClInclude Include="XGConfig.h" />
<ClInclude Include="XGControl.h" /> <ClInclude Include="XGControl.h" />
</ItemGroup> </ItemGroup>

View File

@ -60,6 +60,9 @@
<ClCompile Include="external_dependencies\leonetienne\JasonPP\JasonPP.cpp"> <ClCompile Include="external_dependencies\leonetienne\JasonPP\JasonPP.cpp">
<Filter>_external_dependencies</Filter> <Filter>_external_dependencies</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Updater.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Logger.h"> <ClInclude Include="Logger.h">
@ -104,5 +107,8 @@
<ClInclude Include="external_dependencies\leonetienne\JasonPP\JasonPP.hpp"> <ClInclude Include="external_dependencies\leonetienne\JasonPP\JasonPP.hpp">
<Filter>_external_dependencies</Filter> <Filter>_external_dependencies</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Updater.h">
<Filter>Headerdateien</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

19
Tubio/Updater.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "Updater.h"
std::string Updater::UpdateYoutubeDL()
{
#ifdef _WIN
HRESULT res = URLDownloadToFileA(NULL, "https://yt-dl.org/downloads/latest/youtube-dl.exe", "youtube-dl.exe", 0, NULL);
if (SUCCEEDED(res))
{
return "OK";
}
else
{
return "error code: 0x" + (JasonPP::Internal::Helpers::Base10_2_X(res, "0123456789abcdef"));
}
#else
#endif
return "not implemented";
}

17
Tubio/Updater.h Normal file
View File

@ -0,0 +1,17 @@
#pragma once
#ifdef _WIN
#include <string>
#include <urlmon.h>
#include <Windows.h>
#include "external_dependencies/leonetienne/JasonPP/JasonPP.hpp" // We need Internal::Helpers
#endif
class Updater
{
public:
/// <summary>
/// Will update youtube-dl.exe on windows only!! Returns error message. On linux, you have to update it yourself, since it is a package of its own!
/// </summary>
/// <returns></returns>
static std::string UpdateYoutubeDL();
};

View File

@ -93,7 +93,7 @@
"header": [], "header": [],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\r\n \"request\": \"fetch_session_cache\",\r\n \"max_age\": -1,\r\n \"max_num\": -1\r\n}", "raw": "{\r\n \"request\": \"fetch_session_cache\",\r\n \"max-num\": -1\r\n}\r\n",
"options": { "options": {
"raw": { "raw": {
"language": "json" "language": "json"
@ -391,6 +391,33 @@
} }
}, },
"response": [] "response": []
},
{
"name": "UpdateYotubeDL_Dependency",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"request\": \"update_dep_youtubedl\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:6969/api",
"host": [
"localhost"
],
"port": "6969",
"path": [
"api"
]
}
},
"response": []
} }
], ],
"protocolProfileBehavior": {} "protocolProfileBehavior": {}