From f8c585a0dd19da15ae81c2e901b67ee84f7e323f Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Sat, 13 Mar 2021 14:58:07 +0100 Subject: [PATCH] Added more resolutions --- Tubio/DownloadManager.cpp | 60 ++++++++++++++++++++++++++++++++++++++ Tubio/DownloadManager.h | 24 +++++++++++++-- Tubio/RestQueryHandler.cpp | 18 ++++-------- Tubio/Version.h | 2 +- 4 files changed, 87 insertions(+), 17 deletions(-) diff --git a/Tubio/DownloadManager.cpp b/Tubio/DownloadManager.cpp index 1362b2b..d5b087c 100644 --- a/Tubio/DownloadManager.cpp +++ b/Tubio/DownloadManager.cpp @@ -577,6 +577,11 @@ std::vector DownloadManager::ParseJsonArrayToEntries(const JasonP 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)) { std::string cachedStrMode = iter["mode"]; @@ -597,12 +602,18 @@ std::string DownloadManager::DownloadQualityToStringParams(DOWNLOAD_QUALITY qual { case DOWNLOAD_QUALITY::_BEST: return "bestvideo[ext=mp4]+bestaudio"; + case DOWNLOAD_QUALITY::_1440p: + return "bestvideo[ext=mp4][height<=1440]+bestaudio"; case DOWNLOAD_QUALITY::_1080p: return "bestvideo[ext=mp4][height<=1080]+bestaudio"; case DOWNLOAD_QUALITY::_720p: return "bestvideo[ext=mp4][height<=720]+bestaudio"; + case DOWNLOAD_QUALITY::_480p: + return "bestvideo[ext=mp4][height<=480]+bestaudio"; case DOWNLOAD_QUALITY::_360p: return "bestvideo[ext=mp4][height<=360]+bestaudio"; + case DOWNLOAD_QUALITY::_240p: + return "bestvideo[ext=mp4][height<=240]+bestaudio"; case DOWNLOAD_QUALITY::_144p: return "bestvideo[ext=mp4][height<=144]+bestaudio"; } @@ -610,6 +621,53 @@ std::string DownloadManager::DownloadQualityToStringParams(DOWNLOAD_QUALITY qual 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) { std::stringstream ss; @@ -731,6 +789,7 @@ Downloader::DownloadEntry::DownloadEntry() download_url = ""; status = DOWNLOAD_STATUS::QUEUED; mode = DOWNLOAD_MODE::AUDIO; + quality = DOWNLOAD_QUALITY::INVALID; download_progress = 0; queued_timestamp = 0; @@ -751,6 +810,7 @@ JsonBlock DownloadEntry::GetAsJson() jb.Set(Ele("downloaded_filename", downloaded_filename)); jb.Set(Ele("download_url", download_url)); jb.Set(Ele("queued_timestamp", (long long int)queued_timestamp)); + jb.Set(Ele("quality", DownloadManager::DownloadQualityToName(quality))); switch (mode) { diff --git a/Tubio/DownloadManager.h b/Tubio/DownloadManager.h index bccbd09..9f1b033 100644 --- a/Tubio/DownloadManager.h +++ b/Tubio/DownloadManager.h @@ -26,10 +26,14 @@ namespace Downloader enum class DOWNLOAD_QUALITY { _BEST, // best quality + _1440p, // 1440p _1080p, // 1080p _720p, // 720p + _480p, // 480p _360p, // 360p - _144p // 144p + _240p, // 240p + _144p, // 144p + INVALID }; class DownloadEntry @@ -111,6 +115,20 @@ namespace Downloader /// static bool RemoveFromCacheByID(std::string id); + /// + /// Will return a name of a download quality. Like, '1080p' or 'best' for example + /// + /// The quality to get the name from + /// The name of the download quality + static std::string DownloadQualityToName(DOWNLOAD_QUALITY quality); + + /// + /// Will return a download quality object based on a name, like '1080p' or 'best' for example + /// + /// + /// + static DOWNLOAD_QUALITY GetDownloadQualityByName(const std::string& qualityName); + private: static void Save(); static void Load(); @@ -119,8 +137,8 @@ namespace Downloader /// /// Will return a youtube-dl quality string based on 'quality' /// - /// - /// + /// The download quality to get the parameter from + /// The youtube-dl quality parameter static std::string DownloadQualityToStringParams(DOWNLOAD_QUALITY quality); /// diff --git a/Tubio/RestQueryHandler.cpp b/Tubio/RestQueryHandler.cpp index 59b846a..8b2d3e4 100644 --- a/Tubio/RestQueryHandler.cpp +++ b/Tubio/RestQueryHandler.cpp @@ -96,6 +96,7 @@ bool RestQueryHandler::QueueDownload(const JsonBlock& request, JsonBlock& respon } // Process parameters + // Process download mode DOWNLOAD_MODE mode; if (modeParam == "video") mode = DOWNLOAD_MODE::VIDEO; else if (modeParam == "audio") mode = DOWNLOAD_MODE::AUDIO; @@ -106,20 +107,11 @@ bool RestQueryHandler::QueueDownload(const JsonBlock& request, JsonBlock& respon return false; } - DOWNLOAD_QUALITY quality; - if (qualityParam == "best") - quality = DOWNLOAD_QUALITY::_BEST; - 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 { + // Process download quality + DOWNLOAD_QUALITY quality = DownloadManager::GetDownloadQualityByName(qualityParam); + if (quality == DOWNLOAD_QUALITY::INVALID) { 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; } diff --git a/Tubio/Version.h b/Tubio/Version.h index 2c28e98..d3ad6f0 100644 --- a/Tubio/Version.h +++ b/Tubio/Version.h @@ -1,2 +1,2 @@ #pragma once -#define TUBIO_SERVER_VERSION (0.538) +#define TUBIO_SERVER_VERSION (0.539)