Added more resolutions

This commit is contained in:
Leonetienne 2021-03-13 14:58:07 +01:00
parent 2515001b63
commit f8c585a0dd
4 changed files with 87 additions and 17 deletions

View File

@ -577,6 +577,11 @@ std::vector<DownloadEntry> DownloadManager::ParseJsonArrayToEntries(const JasonP
newEntry.queued_timestamp = iter["queued_timestamp"].AsInt; newEntry.queued_timestamp = iter["queued_timestamp"].AsInt;
} }
if ((iter.DoesExist("quality")) && (iter["quality"].GetDataType() == JDType::STRING))
{
newEntry.quality = GetDownloadQualityByName(iter["quality"].AsString);
}
if ((iter.DoesExist("mode")) && (iter["mode"].GetDataType() == JDType::STRING)) if ((iter.DoesExist("mode")) && (iter["mode"].GetDataType() == JDType::STRING))
{ {
std::string cachedStrMode = iter["mode"]; std::string cachedStrMode = iter["mode"];
@ -597,12 +602,18 @@ std::string DownloadManager::DownloadQualityToStringParams(DOWNLOAD_QUALITY qual
{ {
case DOWNLOAD_QUALITY::_BEST: case DOWNLOAD_QUALITY::_BEST:
return "bestvideo[ext=mp4]+bestaudio"; return "bestvideo[ext=mp4]+bestaudio";
case DOWNLOAD_QUALITY::_1440p:
return "bestvideo[ext=mp4][height<=1440]+bestaudio";
case DOWNLOAD_QUALITY::_1080p: case DOWNLOAD_QUALITY::_1080p:
return "bestvideo[ext=mp4][height<=1080]+bestaudio"; return "bestvideo[ext=mp4][height<=1080]+bestaudio";
case DOWNLOAD_QUALITY::_720p: case DOWNLOAD_QUALITY::_720p:
return "bestvideo[ext=mp4][height<=720]+bestaudio"; return "bestvideo[ext=mp4][height<=720]+bestaudio";
case DOWNLOAD_QUALITY::_480p:
return "bestvideo[ext=mp4][height<=480]+bestaudio";
case DOWNLOAD_QUALITY::_360p: case DOWNLOAD_QUALITY::_360p:
return "bestvideo[ext=mp4][height<=360]+bestaudio"; return "bestvideo[ext=mp4][height<=360]+bestaudio";
case DOWNLOAD_QUALITY::_240p:
return "bestvideo[ext=mp4][height<=240]+bestaudio";
case DOWNLOAD_QUALITY::_144p: case DOWNLOAD_QUALITY::_144p:
return "bestvideo[ext=mp4][height<=144]+bestaudio"; return "bestvideo[ext=mp4][height<=144]+bestaudio";
} }
@ -610,6 +621,53 @@ std::string DownloadManager::DownloadQualityToStringParams(DOWNLOAD_QUALITY qual
return std::string(); return std::string();
} }
std::string DownloadManager::DownloadQualityToName(DOWNLOAD_QUALITY quality)
{
switch (quality)
{
case DOWNLOAD_QUALITY::_BEST:
return "Best";
case DOWNLOAD_QUALITY::_1440p:
return "1440p";
case DOWNLOAD_QUALITY::_1080p:
return "1080p";
case DOWNLOAD_QUALITY::_720p:
return "720p";
case DOWNLOAD_QUALITY::_480p:
return "480p";
case DOWNLOAD_QUALITY::_360p:
return "360p";
case DOWNLOAD_QUALITY::_240p:
return "240p";
case DOWNLOAD_QUALITY::_144p:
return "144p";
}
return std::string();
}
DOWNLOAD_QUALITY DownloadManager::GetDownloadQualityByName(const std::string& qualityName)
{
if (qualityName == "best")
return DOWNLOAD_QUALITY::_BEST;
else if (qualityName == "1440p")
return DOWNLOAD_QUALITY::_1440p;
else if (qualityName == "1080p")
return DOWNLOAD_QUALITY::_1080p;
else if (qualityName == "720p")
return DOWNLOAD_QUALITY::_720p;
else if (qualityName == "480p")
return DOWNLOAD_QUALITY::_480p;
else if (qualityName == "360p")
return DOWNLOAD_QUALITY::_360p;
else if (qualityName == "240p")
return DOWNLOAD_QUALITY::_240p;
else if (qualityName == "144p")
return DOWNLOAD_QUALITY::_144p;
return DOWNLOAD_QUALITY::INVALID;
}
void DownloadManager::FetchInformation(std::string url, std::string tubId) void DownloadManager::FetchInformation(std::string url, std::string tubId)
{ {
std::stringstream ss; std::stringstream ss;
@ -731,6 +789,7 @@ Downloader::DownloadEntry::DownloadEntry()
download_url = ""; download_url = "";
status = DOWNLOAD_STATUS::QUEUED; status = DOWNLOAD_STATUS::QUEUED;
mode = DOWNLOAD_MODE::AUDIO; mode = DOWNLOAD_MODE::AUDIO;
quality = DOWNLOAD_QUALITY::INVALID;
download_progress = 0; download_progress = 0;
queued_timestamp = 0; queued_timestamp = 0;
@ -751,6 +810,7 @@ JsonBlock DownloadEntry::GetAsJson()
jb.Set(Ele("downloaded_filename", downloaded_filename)); jb.Set(Ele("downloaded_filename", downloaded_filename));
jb.Set(Ele("download_url", download_url)); jb.Set(Ele("download_url", download_url));
jb.Set(Ele("queued_timestamp", (long long int)queued_timestamp)); jb.Set(Ele("queued_timestamp", (long long int)queued_timestamp));
jb.Set(Ele("quality", DownloadManager::DownloadQualityToName(quality)));
switch (mode) switch (mode)
{ {

View File

@ -26,10 +26,14 @@ namespace Downloader
enum class DOWNLOAD_QUALITY enum class DOWNLOAD_QUALITY
{ {
_BEST, // best quality _BEST, // best quality
_1440p, // 1440p
_1080p, // 1080p _1080p, // 1080p
_720p, // 720p _720p, // 720p
_480p, // 480p
_360p, // 360p _360p, // 360p
_144p // 144p _240p, // 240p
_144p, // 144p
INVALID
}; };
class DownloadEntry class DownloadEntry
@ -111,6 +115,20 @@ namespace Downloader
/// <returns></returns> /// <returns></returns>
static bool RemoveFromCacheByID(std::string id); static bool RemoveFromCacheByID(std::string id);
/// <summary>
/// Will return a name of a download quality. Like, '1080p' or 'best' for example
/// </summary>
/// <param name="quality">The quality to get the name from</param>
/// <returns>The name of the download quality</returns>
static std::string DownloadQualityToName(DOWNLOAD_QUALITY quality);
/// <summary>
/// Will return a download quality object based on a name, like '1080p' or 'best' for example
/// </summary>
/// <param name="qualityName"></param>
/// <returns></returns>
static DOWNLOAD_QUALITY GetDownloadQualityByName(const std::string& qualityName);
private: private:
static void Save(); static void Save();
static void Load(); static void Load();
@ -119,8 +137,8 @@ namespace Downloader
/// <summary> /// <summary>
/// Will return a youtube-dl quality string based on 'quality' /// Will return a youtube-dl quality string based on 'quality'
/// </summary> /// </summary>
/// <param name="quality"></param> /// <param name="quality">The download quality to get the parameter from</param>
/// <returns></returns> /// <returns>The youtube-dl quality parameter</returns>
static std::string DownloadQualityToStringParams(DOWNLOAD_QUALITY quality); static std::string DownloadQualityToStringParams(DOWNLOAD_QUALITY quality);
/// <summary> /// <summary>

View File

@ -96,6 +96,7 @@ bool RestQueryHandler::QueueDownload(const JsonBlock& request, JsonBlock& respon
} }
// Process parameters // Process parameters
// Process download mode
DOWNLOAD_MODE mode; DOWNLOAD_MODE mode;
if (modeParam == "video") mode = DOWNLOAD_MODE::VIDEO; if (modeParam == "video") mode = DOWNLOAD_MODE::VIDEO;
else if (modeParam == "audio") mode = DOWNLOAD_MODE::AUDIO; else if (modeParam == "audio") mode = DOWNLOAD_MODE::AUDIO;
@ -106,20 +107,11 @@ bool RestQueryHandler::QueueDownload(const JsonBlock& request, JsonBlock& respon
return false; return false;
} }
DOWNLOAD_QUALITY quality; // Process download quality
if (qualityParam == "best") DOWNLOAD_QUALITY quality = DownloadManager::GetDownloadQualityByName(qualityParam);
quality = DOWNLOAD_QUALITY::_BEST; if (quality == DOWNLOAD_QUALITY::INVALID) {
else if (qualityParam == "1080p")
quality = DOWNLOAD_QUALITY::_1080p;
else if (qualityParam == "720p")
quality = DOWNLOAD_QUALITY::_720p;
else if (qualityParam == "360p")
quality = DOWNLOAD_QUALITY::_360p;
else if (qualityParam == "144p")
quality = DOWNLOAD_QUALITY::_144p;
else {
responseCode = HTTP_STATUS_CODE::BAD_REQUEST; responseCode = HTTP_STATUS_CODE::BAD_REQUEST;
responseBody.CloneFrom(RestResponseTemplates::GetByCode(HTTP_STATUS_CODE::BAD_REQUEST, "Parameter 'quality' is of wrong value. Choose either 'best', '1080p', '720p', '360p', or '144p'.")); responseBody.CloneFrom(RestResponseTemplates::GetByCode(HTTP_STATUS_CODE::BAD_REQUEST, "Parameter 'quality' is of wrong value. Choose either 'best', '1440p', '1080p', '720p', '480p', '360p', '240p', or '144p'."));
return false; return false;
} }

View File

@ -1,2 +1,2 @@
#pragma once #pragma once
#define TUBIO_SERVER_VERSION (0.538) #define TUBIO_SERVER_VERSION (0.539)