diff --git a/Design/Database/database_model.mwb b/Design/Database/database_model.mwb index 03ffdc9..e36a68a 100644 Binary files a/Design/Database/database_model.mwb and b/Design/Database/database_model.mwb differ diff --git a/Design/Database/database_model.mwb.bak b/Design/Database/database_model.mwb.bak index ea968e3..03ffdc9 100644 Binary files a/Design/Database/database_model.mwb.bak and b/Design/Database/database_model.mwb.bak differ diff --git a/Design/Database/generated_sql_file.sql b/Design/Database/generated_sql_file.sql index e65336e..7ced06a 100644 --- a/Design/Database/generated_sql_file.sql +++ b/Design/Database/generated_sql_file.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- lun 22 jul 2019 14:28:48 CEST +-- jue 25 jul 2019 13:50:06 CEST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -18,82 +18,6 @@ CREATE SCHEMA IF NOT EXISTS `youtubemd` DEFAULT CHARACTER SET utf8mb4 ; SHOW WARNINGS; USE `youtubemd` ; --- ----------------------------------------------------- --- Table `youtubemd`.`User` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `youtubemd`.`User` ( - `id` INT(64) NOT NULL DEFAULT 0, - `name` VARCHAR(45) NULL DEFAULT 'User', - `surname` VARCHAR(45) NULL, - `username` VARCHAR(45) NULL, - `lastSeen` DATETIME NOT NULL, - `firstUsage` DATETIME NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB -CHECKSUM = 1 -PACK_KEYS = 1; - -SHOW WARNINGS; -CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`User` (`id` ASC) VISIBLE; - -SHOW WARNINGS; -CREATE UNIQUE INDEX `username_UNIQUE` ON `youtubemd`.`User` (`username` ASC) VISIBLE; - -SHOW WARNINGS; - --- ----------------------------------------------------- --- Table `youtubemd`.`Preferences` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `youtubemd`.`Preferences` ( - `language` VARCHAR(3) NOT NULL DEFAULT 'en', - `audioQuality` ENUM('320k', '256k', '128k') NOT NULL DEFAULT '128k', - `audioSampling` ENUM('44000', '48000') NOT NULL DEFAULT '44000', - `sendSongLinks` TINYINT NOT NULL DEFAULT 0, - `User_id` INT(64) NOT NULL, - PRIMARY KEY (`User_id`), - CONSTRAINT `fk_Preferences_User` - FOREIGN KEY (`User_id`) - REFERENCES `youtubemd`.`User` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB -CHECKSUM = 1; - -SHOW WARNINGS; - --- ----------------------------------------------------- --- Table `youtubemd`.`Metadata` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `youtubemd`.`Metadata` ( - `idMetadata` INT NOT NULL AUTO_INCREMENT, - `title` VARCHAR(100) NOT NULL, - `artist` VARCHAR(60) NOT NULL, - `cover` BLOB NOT NULL, - `duration` INT NULL, - `customMetadata` TINYINT NOT NULL DEFAULT 0, - PRIMARY KEY (`idMetadata`)) -ENGINE = InnoDB -AUTO_INCREMENT = 0 -CHECKSUM = 1; - -SHOW WARNINGS; - --- ----------------------------------------------------- --- Table `youtubemd`.`VideoInformation` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `youtubemd`.`VideoInformation` ( - `id` VARCHAR(11) NOT NULL, - `title` VARCHAR(100) NOT NULL, - `channel` VARCHAR(60) NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB -CHECKSUM = 1; - -SHOW WARNINGS; -CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`VideoInformation` (`id` ASC) VISIBLE; - -SHOW WARNINGS; - -- ----------------------------------------------------- -- Table `youtubemd`.`DownloadInformation` -- ----------------------------------------------------- @@ -128,6 +52,23 @@ CREATE INDEX `fk_DownloadInformation_VideoInformation1_idx` ON `youtubemd`.`Down SHOW WARNINGS; +-- ----------------------------------------------------- +-- Table `youtubemd`.`DownloadStatistics` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `youtubemd`.`DownloadStatistics` ( + `timesRequested` INT NOT NULL DEFAULT 0, + `DownloadInformation_file_id` VARCHAR(50) NOT NULL, + PRIMARY KEY (`DownloadInformation_file_id`), + CONSTRAINT `fk_DownloadStatistics_DownloadInformation1` + FOREIGN KEY (`DownloadInformation_file_id`) + REFERENCES `youtubemd`.`DownloadInformation` (`file_id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB +CHECKSUM = 1; + +SHOW WARNINGS; + -- ----------------------------------------------------- -- Table `youtubemd`.`History` -- ----------------------------------------------------- @@ -154,35 +95,18 @@ CREATE INDEX `fk_History_DownloadInformation1_idx` ON `youtubemd`.`History` (`Do SHOW WARNINGS; -- ----------------------------------------------------- --- Table `youtubemd`.`VideoStatistics` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `youtubemd`.`VideoStatistics` ( - `timesRequested` INT NOT NULL DEFAULT 0, - `VideoInformation_id` VARCHAR(11) NOT NULL, - PRIMARY KEY (`VideoInformation_id`), - CONSTRAINT `fk_VideoStatistics_VideoInformation1` - FOREIGN KEY (`VideoInformation_id`) - REFERENCES `youtubemd`.`VideoInformation` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB -CHECKSUM = 1; - -SHOW WARNINGS; - --- ----------------------------------------------------- --- Table `youtubemd`.`DownloadStatistics` +-- Table `youtubemd`.`Metadata` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `youtubemd`.`DownloadStatistics` ( - `timesRequested` INT NOT NULL DEFAULT 0, - `DownloadInformation_file_id` VARCHAR(50) NOT NULL, - PRIMARY KEY (`DownloadInformation_file_id`), - CONSTRAINT `fk_DownloadStatistics_DownloadInformation1` - FOREIGN KEY (`DownloadInformation_file_id`) - REFERENCES `youtubemd`.`DownloadInformation` (`file_id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) +CREATE TABLE IF NOT EXISTS `youtubemd`.`Metadata` ( + `idMetadata` INT NOT NULL AUTO_INCREMENT, + `title` VARCHAR(100) NOT NULL, + `artist` VARCHAR(60) NOT NULL, + `cover` BLOB NOT NULL, + `duration` INT NULL, + `customMetadata` TINYINT NOT NULL DEFAULT 0, + PRIMARY KEY (`idMetadata`)) ENGINE = InnoDB +AUTO_INCREMENT = 0 CHECKSUM = 1; SHOW WARNINGS; @@ -246,6 +170,83 @@ CHECKSUM = 1; SHOW WARNINGS; +-- ----------------------------------------------------- +-- Table `youtubemd`.`Preferences` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `youtubemd`.`Preferences` ( + `language` VARCHAR(3) NOT NULL DEFAULT 'en', + `audioQuality` ENUM('320k', '256k', '128k') NOT NULL DEFAULT '128k', + `audioSampling` ENUM('44000', '48000') NOT NULL DEFAULT '44000', + `sendSongLinks` TINYINT NOT NULL DEFAULT 0, + `askForMetadata` TINYINT NOT NULL DEFAULT 1, + `User_id` INT(64) NOT NULL, + PRIMARY KEY (`User_id`), + CONSTRAINT `fk_Preferences_User` + FOREIGN KEY (`User_id`) + REFERENCES `youtubemd`.`User` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB +CHECKSUM = 1; + +SHOW WARNINGS; + +-- ----------------------------------------------------- +-- Table `youtubemd`.`User` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `youtubemd`.`User` ( + `id` INT(64) NOT NULL DEFAULT 0, + `name` VARCHAR(45) NULL DEFAULT 'User', + `surname` VARCHAR(45) NULL, + `username` VARCHAR(45) NULL, + `lastSeen` DATETIME NOT NULL, + `firstUsage` DATETIME NOT NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB +CHECKSUM = 1 +PACK_KEYS = 1; + +SHOW WARNINGS; +CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`User` (`id` ASC) VISIBLE; + +SHOW WARNINGS; +CREATE UNIQUE INDEX `username_UNIQUE` ON `youtubemd`.`User` (`username` ASC) VISIBLE; + +SHOW WARNINGS; + +-- ----------------------------------------------------- +-- Table `youtubemd`.`VideoInformation` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `youtubemd`.`VideoInformation` ( + `id` VARCHAR(11) NOT NULL, + `title` VARCHAR(100) NOT NULL, + `channel` VARCHAR(60) NOT NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB +CHECKSUM = 1; + +SHOW WARNINGS; +CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`VideoInformation` (`id` ASC) VISIBLE; + +SHOW WARNINGS; + +-- ----------------------------------------------------- +-- Table `youtubemd`.`VideoStatistics` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `youtubemd`.`VideoStatistics` ( + `timesRequested` INT NOT NULL DEFAULT 0, + `VideoInformation_id` VARCHAR(11) NOT NULL, + PRIMARY KEY (`VideoInformation_id`), + CONSTRAINT `fk_VideoStatistics_VideoInformation1` + FOREIGN KEY (`VideoInformation_id`) + REFERENCES `youtubemd`.`VideoInformation` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB +CHECKSUM = 1; + +SHOW WARNINGS; + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/Design/Database/img_database_model.png b/Design/Database/img_database_model.png index 6046766..8d061ce 100644 Binary files a/Design/Database/img_database_model.png and b/Design/Database/img_database_model.png differ diff --git a/Design/Database/pdf_database_model.pdf b/Design/Database/pdf_database_model.pdf index 4cdb445..7275783 100644 Binary files a/Design/Database/pdf_database_model.pdf and b/Design/Database/pdf_database_model.pdf differ diff --git a/Design/Database/vect_database_model.svg b/Design/Database/vect_database_model.svg index fe40b7a..d0785cd 100644 --- a/Design/Database/vect_database_model.svg +++ b/Design/Database/vect_database_model.svg @@ -30,187 +30,190 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -270,13 +273,13 @@ - - - - - + + + + + - + @@ -290,265 +293,134 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + + - + - + - - - - - - - + + + + + + + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - - - + + + + + + + + @@ -562,168 +434,324 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - - + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - + + + + - - + + - - + + - - - - - - + + + + + + - + - + - - - + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - + - + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + @@ -733,85 +761,85 @@ - + - + - - + + - - - - + + + + - - - - + + + + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - + + + + + + + + + + + @@ -825,45 +853,45 @@ - - - - - - - + + + + + + + - + - + - - - + + + - + - + - - + + - + - + - + - + @@ -872,89 +900,89 @@ - - - + + + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - + + + + - + - + - - - + + + - - - + + + - + - - + + - - - + + + @@ -963,13 +991,13 @@ - - - - - - - + + + + + + + @@ -983,116 +1011,116 @@ - - - - - - - + + + + + + + - + - + - + - + - - - - + + + + - - - - + + + + - + - - - + + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - + + + + - - + + - - + + - - - - - - + + + + + + - + - + - - - + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - + - + @@ -1100,10 +1128,10 @@ - - + + - + @@ -1112,38 +1140,38 @@ - - - + + + - + - - + + - - - - - + + + + + - + - - - - - + + + + + - - - - - - + + + + + + @@ -1157,186 +1185,186 @@ - - - - - - - + + + + + + + - - - + + + - - + + - + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - - + + + + + + - - + + - + - + - + - - - + + + - + - + - - + + - - - - + + + + - - - - + + + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + + + + - + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -1352,34 +1380,34 @@ - + - + - + - - - + + + - + - + - - - - - - - - - - - + + + + + + + + + + + @@ -1396,15 +1424,15 @@ - + - + - - + + @@ -1414,79 +1442,79 @@ - + - + - - + + - + - - - - - - - + + + + + + + - + - - + + - + - - + + - - - + + + - + - - + + - - - - - + + + + + - + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -1502,90 +1530,90 @@ - + - + - + - + - + - - - - - - - + + + + + + + - + - - + + - + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - - - + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + @@ -1599,85 +1627,85 @@ - - - - - - - + + + + + + + - + - + - + - - - + + + - + - - - - - - - + + + + + + + - + - - + + - + - - + + - - - + + + - + - - + + - - + + - - + + - - - - - - - - - - - + + + + + + + + + + + @@ -1691,9 +1719,9 @@ - - - + + + @@ -1741,265 +1769,134 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + + - + - + - - - - - - - + + + + + + + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - - - + + + + + + + + @@ -2013,240 +1910,396 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - - + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - + + + + - - + + - - + + - - - - - - + + + + + + - + - + - - - + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - + - + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - - - + + + + - - - - + + + + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - + + + + + + + + + + + @@ -2260,45 +2313,45 @@ - - - - - - - + + + + + + + - + - + - - - + + + - + - + - - + + - + - + - + - + @@ -2307,89 +2360,89 @@ - - - + + + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - + + + + - + - + - - - + + + - - - + + + - + - - + + - - - + + + @@ -2398,13 +2451,13 @@ - - - - - - - + + + + + + + @@ -2418,116 +2471,116 @@ - - - - - - - + + + + + + + - + - + - + - + - - - - + + + + - - - - + + + + - + - - - + + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - + + + + - - + + - - + + - - - - - - + + + + + + - + - + - - - + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - + - + @@ -2535,10 +2588,10 @@ - - + + - + @@ -2547,38 +2600,38 @@ - - - + + + - + - - + + - - - - - + + + + + - + - - - - - + + + + + - - - - - - + + + + + + @@ -2592,186 +2645,186 @@ - - - - - - - + + + + + + + - - - + + + - - + + - + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - - + + + + + + - - + + - + - + - + - - - + + + - + - + - - + + - - - - + + + + - - - - + + + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + + + + - + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -2787,34 +2840,34 @@ - + - + - + - - - + + + - + - + - - - - - - - - - - - + + + + + + + + + + + @@ -2830,79 +2883,79 @@ - + - + - - + + - + - - - - - - - + + + + + + + - + - - + + - + - - + + - - - + + + - + - - + + - - - - - + + + + + - + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -2918,90 +2971,90 @@ - + - + - + - + - + - - - - - - - + + + + + + + - + - - + + - + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - - - + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + @@ -3015,85 +3068,85 @@ - - - - - - - + + + + + + + - + - + - + - - - + + + - + - - - - - - - + + + + + + + - + - - + + - + - - + + - - - + + + - + - - + + - - + + - - + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/YouTubeMDBot/constants/__init__.py b/YouTubeMDBot/constants/__init__.py index b8d3e20..1402386 100644 --- a/YouTubeMDBot/constants/__init__.py +++ b/YouTubeMDBot/constants/__init__.py @@ -13,5 +13,4 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from ..constants.app_constants import ydl_options -from ..constants.app_constants import STREAM_OFFSET +from ..constants.app_constants import ydl_cli_options diff --git a/YouTubeMDBot/constants/app_constants.py b/YouTubeMDBot/constants/app_constants.py index f738ade..e1a7cb1 100644 --- a/YouTubeMDBot/constants/app_constants.py +++ b/YouTubeMDBot/constants/app_constants.py @@ -13,9 +13,5 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -ydl_options: dict = { - "format": "bestaudio[ext=m4a]", - "outtmpl": "-", - "logger": "" -} -STREAM_OFFSET: int = 0 +ydl_cli_options = ["youtube-dl", "--format", "bestaudio[ext=m4a]", "--quiet", "--output", + "-"] diff --git a/YouTubeMDBot/decorators/decorators.py b/YouTubeMDBot/decorators/decorators.py index 5c305b4..b378e01 100644 --- a/YouTubeMDBot/decorators/decorators.py +++ b/YouTubeMDBot/decorators/decorators.py @@ -16,10 +16,9 @@ from functools import wraps from .. import PROGRAM_ARGS -from .. import LoggingHandler -logging = LoggingHandler() +# logging = LoggingHandler() def send_action(action): diff --git a/YouTubeMDBot/downloader/youtube_downloader.py b/YouTubeMDBot/downloader/youtube_downloader.py index b956952..8736255 100644 --- a/YouTubeMDBot/downloader/youtube_downloader.py +++ b/YouTubeMDBot/downloader/youtube_downloader.py @@ -13,27 +13,31 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import logging -import youtube_dl - -from contextlib import redirect_stdout as save_to from io import BytesIO +from typing import Tuple -from ..constants.app_constants import ydl_options -from ..constants.app_constants import STREAM_OFFSET +from ..constants.app_constants import ydl_cli_options class YouTubeDownloader(object): - def __init__(self, url: str, - logger: logging = logging.getLogger("empty-logger")): + def __init__(self, url: str): self.__url: str = url - self.__options: dict = ydl_options - self.__options["logger"] = logger + self.__options: list = ydl_cli_options.copy() + self.__options.append(self.__url) + + def download(self) -> Tuple[BytesIO, bytes]: + import subprocess - def download(self, io: BytesIO = BytesIO()) -> BytesIO: - with save_to(io): - with youtube_dl.YoutubeDL(self.__options) as yt_downloader: - yt_downloader.download([self.__url]) + proc = subprocess.Popen(self.__options, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = proc.communicate() + retcode = proc.returncode + if retcode == 0: + return BytesIO(stdout), stdout + else: + raise RuntimeError("youtube-dl downloader exception - more info: " + + str(stderr)) - io.seek(STREAM_OFFSET) - return io + def get_url(self) -> str: + return self.__url diff --git a/YouTubeMDBot/tests/__main__.py b/YouTubeMDBot/tests/__main__.py new file mode 100644 index 0000000..5cb134d --- /dev/null +++ b/YouTubeMDBot/tests/__main__.py @@ -0,0 +1,4 @@ +from .downloader import DownloadTest + +if __name__ == '__main__': + DownloadTest.test_multithread_download() diff --git a/YouTubeMDBot/tests/downloader.py b/YouTubeMDBot/tests/downloader.py new file mode 100644 index 0000000..3402283 --- /dev/null +++ b/YouTubeMDBot/tests/downloader.py @@ -0,0 +1,32 @@ +import threading +import unittest + +from YouTubeMDBot.downloader import YouTubeDownloader + + +class DownloadTest(unittest.TestCase): + def test_multithread_download(self): + yt1 = YouTubeDownloader(url="https://www.youtube.com/watch?v=Inm-N5rLUSI") + yt2 = YouTubeDownloader(url="https://www.youtube.com/watch?v=-_ZwpOdXXcA") + yt3 = YouTubeDownloader(url="https://www.youtube.com/watch?v=WOGWZD5iT10") + yt4 = YouTubeDownloader(url="https://www.youtube.com/watch?v=9HfoNUjw5u8") + t1 = threading.Thread(target=self.write_to_file, args=(yt1, "v1.m4a",)) + t2 = threading.Thread(target=self.write_to_file, args=(yt2, "v2.m4a",)) + t3 = threading.Thread(target=self.write_to_file, args=(yt3, "v3.m4a",)) + t4 = threading.Thread(target=self.write_to_file, args=(yt4, "v4.m4a",)) + + t1.start() + t2.start() + t3.start() + t4.start() + + @staticmethod + def write_to_file(yt: YouTubeDownloader, name: str): + _, data = yt.download() + print(name + " downloaded") + with open(name, "wb") as f: + f.write(data) + + +if __name__ == '__main__': + unittest.main()