From 4f32b144419556b19b2edeaefd09ec4101aa3f0d Mon Sep 17 00:00:00 2001 From: Yaronzz Date: Wed, 6 Sep 2023 09:31:50 +0800 Subject: [PATCH] 1. Add quality 'MAX' 2. Try to parse 'dash+xml' --- TIDALDL-PY/tidal_dl/__init__.py | 14 ++--- TIDALDL-PY/tidal_dl/download.py | 2 +- TIDALDL-PY/tidal_dl/enums.py | 1 + TIDALDL-PY/tidal_dl/events.py | 2 +- TIDALDL-PY/tidal_dl/lang/arabic.py | 2 +- TIDALDL-PY/tidal_dl/lang/chinese.py | 2 +- TIDALDL-PY/tidal_dl/lang/croatian.py | 2 +- TIDALDL-PY/tidal_dl/lang/czech.py | 2 +- TIDALDL-PY/tidal_dl/lang/danish.py | 2 +- TIDALDL-PY/tidal_dl/lang/dutch.py | 2 +- TIDALDL-PY/tidal_dl/lang/english.py | 2 +- TIDALDL-PY/tidal_dl/lang/filipino.py | 2 +- TIDALDL-PY/tidal_dl/lang/french.py | 2 +- TIDALDL-PY/tidal_dl/lang/german.py | 2 +- TIDALDL-PY/tidal_dl/lang/hungarian.py | 2 +- TIDALDL-PY/tidal_dl/lang/italian.py | 2 +- TIDALDL-PY/tidal_dl/lang/japanese.py | 2 +- TIDALDL-PY/tidal_dl/lang/korean.py | 2 +- TIDALDL-PY/tidal_dl/lang/norwegian.py | 2 +- TIDALDL-PY/tidal_dl/lang/polish.py | 2 +- TIDALDL-PY/tidal_dl/lang/portuguese.py | 2 +- TIDALDL-PY/tidal_dl/lang/russian.py | 2 +- TIDALDL-PY/tidal_dl/lang/spanish.py | 2 +- TIDALDL-PY/tidal_dl/lang/turkish.py | 2 +- TIDALDL-PY/tidal_dl/lang/ukrainian.py | 2 +- TIDALDL-PY/tidal_dl/lang/vietnamese.py | 2 +- TIDALDL-PY/tidal_dl/model.py | 1 + TIDALDL-PY/tidal_dl/paths.py | 4 +- TIDALDL-PY/tidal_dl/tidal.py | 73 +++++++++++++++++++++++++- 29 files changed, 108 insertions(+), 33 deletions(-) diff --git a/TIDALDL-PY/tidal_dl/__init__.py b/TIDALDL-PY/tidal_dl/__init__.py index 75bd3e5..4959091 100644 --- a/TIDALDL-PY/tidal_dl/__init__.py +++ b/TIDALDL-PY/tidal_dl/__init__.py @@ -119,7 +119,7 @@ def test(): if not loginByConfig(): loginByWeb() - SETTINGS.audioQuality = AudioQuality.Normal + SETTINGS.audioQuality = AudioQuality.Master SETTINGS.videoFileFormat = VideoQuality.P240 SETTINGS.checkExist = False SETTINGS.includeEP = True @@ -135,19 +135,21 @@ def test(): SETTINGS.playlistFolderFormat = R"Playlist/{PlaylistName} [{PlaylistUUID}]" SETTINGS.trackFileFormat = R"{TrackNumber} - {ArtistName} - {TrackTitle}{ExplicitFlag}" SETTINGS.videoFileFormat = R"{VideoNumber} - {ArtistName} - {VideoTitle}{ExplicitFlag}" - SETTINGS.multiThread = True + SETTINGS.multiThread = False + SETTINGS.apiKeyIndex = 4 + SETTINGS.checkExist = False Printf.settings() # test example # https://tidal.com/browse/track/70973230 # track 70973230 77798028 212657 - # start('70973230') + start('242700165') # album 58138532 77803199 21993753 79151897 56288918 # start('58138532') # playlist 98235845-13e8-43b4-94e2-d9f8e603cee7 - start('98235845-13e8-43b4-94e2-d9f8e603cee7') - # video 155608351 188932980 - # start("155608351") + # start('98235845-13e8-43b4-94e2-d9f8e603cee7') + # video 155608351 188932980 https://tidal.com/browse/track/55130637 + # start("155608351")https://tidal.com/browse/track/199683732 if __name__ == '__main__': diff --git a/TIDALDL-PY/tidal_dl/download.py b/TIDALDL-PY/tidal_dl/download.py index 0f4ef8a..37b00c3 100644 --- a/TIDALDL-PY/tidal_dl/download.py +++ b/TIDALDL-PY/tidal_dl/download.py @@ -159,7 +159,7 @@ def downloadTrack(track: Track, album=None, playlist=None, userProgress=None, pa # download logging.info("[DL Track] name=" + aigpy.path.getFileName(path) + "\nurl=" + stream.url) - tool = aigpy.download.DownloadTool(path + '.part', [stream.url]) + tool = aigpy.download.DownloadTool(path + '.part', stream.urls) tool.setUserProgress(userProgress) tool.setPartSize(partSize) check, err = tool.start(SETTINGS.showProgress and not SETTINGS.multiThread) diff --git a/TIDALDL-PY/tidal_dl/enums.py b/TIDALDL-PY/tidal_dl/enums.py index 35e47b1..581c7f7 100644 --- a/TIDALDL-PY/tidal_dl/enums.py +++ b/TIDALDL-PY/tidal_dl/enums.py @@ -16,6 +16,7 @@ class AudioQuality(Enum): High = 1 HiFi = 2 Master = 3 + Max = 4 class VideoQuality(Enum): diff --git a/TIDALDL-PY/tidal_dl/events.py b/TIDALDL-PY/tidal_dl/events.py index d0d4051..9fd521d 100644 --- a/TIDALDL-PY/tidal_dl/events.py +++ b/TIDALDL-PY/tidal_dl/events.py @@ -163,7 +163,7 @@ def changeQualitySettings(): SETTINGS.audioQuality = AudioQuality( int(Printf.enterLimit(LANG.select.CHANGE_AUDIO_QUALITY, LANG.select.MSG_INPUT_ERR, - ['0', '1', '2', '3']))) + ['0', '1', '2', '3', '4']))) SETTINGS.videoQuality = VideoQuality( int(Printf.enterLimit(LANG.select.CHANGE_VIDEO_QUALITY, LANG.select.MSG_INPUT_ERR, diff --git a/TIDALDL-PY/tidal_dl/lang/arabic.py b/TIDALDL-PY/tidal_dl/lang/arabic.py index 47332dd..9f128c0 100644 --- a/TIDALDL-PY/tidal_dl/lang/arabic.py +++ b/TIDALDL-PY/tidal_dl/lang/arabic.py @@ -68,7 +68,7 @@ class LangArabic(object): CHANGE_START_SETTINGS = "بدء الاعدادات('0'-Return,'1'-Yes):" CHANGE_DOWNLOAD_PATH = "مجلد التنزيل('0' not modify):" - CHANGE_AUDIO_QUALITY = "دقة الصوت('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "دقة الصوت('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "دقة الفديو(1080, 720, 480, 360):" CHANGE_ONLYM4A = "تحويل M4a الى mp4('0'-No,'1'-Yes):" CHANGE_ADD_EXPLICIT_TAG = "اضافة توقيع الفنان('0'-No,'1'-Yes):" diff --git a/TIDALDL-PY/tidal_dl/lang/chinese.py b/TIDALDL-PY/tidal_dl/lang/chinese.py index 036f547..050f6c0 100644 --- a/TIDALDL-PY/tidal_dl/lang/chinese.py +++ b/TIDALDL-PY/tidal_dl/lang/chinese.py @@ -68,7 +68,7 @@ class LangChinese(object): CHANGE_START_SETTINGS = "开始设置('0'-返回,'1'-是):" CHANGE_DOWNLOAD_PATH = "下载路径('0' 不修改):" - CHANGE_AUDIO_QUALITY = "音频质量('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "音频质量('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "视频质量(1080, 720, 480, 360):" CHANGE_ONLYM4A = "将Mp4格式的音频转为M4a('0'-不,'1'-是):" CHANGE_ADD_EXPLICIT_TAG = "歌名后添加脏话标签('0'-不,'1'-是):" diff --git a/TIDALDL-PY/tidal_dl/lang/croatian.py b/TIDALDL-PY/tidal_dl/lang/croatian.py index 11544bf..7207f03 100644 --- a/TIDALDL-PY/tidal_dl/lang/croatian.py +++ b/TIDALDL-PY/tidal_dl/lang/croatian.py @@ -68,7 +68,7 @@ class LangCroatian(object): CHANGE_START_SETTINGS = "Pokreni postavke (0'-Izlaz,'1'-Da):" CHANGE_DOWNLOAD_PATH = "Putanja preuzimanja('0' ne mijenjaj):" - CHANGE_AUDIO_QUALITY = "Kvaliteta zvuka('0'-Normalna,'1'-Visoka,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Kvaliteta zvuka('0'-Normalna,'1'-Visoka,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Kvaliteta videozapisa(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Pretvori mp4 u m4a('0'-Ne,'1'-Da):" CHANGE_ADD_EXPLICIT_TAG = "Dodaj eksplicitni znak u imeni datoteke('0'-Ne,'1'-Da):" diff --git a/TIDALDL-PY/tidal_dl/lang/czech.py b/TIDALDL-PY/tidal_dl/lang/czech.py index 654b9a4..85fec63 100644 --- a/TIDALDL-PY/tidal_dl/lang/czech.py +++ b/TIDALDL-PY/tidal_dl/lang/czech.py @@ -68,7 +68,7 @@ class LangCzech(object): CHANGE_START_SETTINGS = "Spustit nastavení ('0'-Zpět,'1'-Ano):" CHANGE_DOWNLOAD_PATH = "Umístění stažených souborů ('0' beze změny):" - CHANGE_AUDIO_QUALITY = "Kvalita hudby ('0'-Normální,'1'-Vysoká,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Kvalita hudby ('0'-Normální,'1'-Vysoká,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Kvalita videa (1080, 720, 480, 360):" CHANGE_ONLYM4A = "Konvertovat mp4 na m4a ('0'-Ne,'1'-Ano):" CHANGE_ADD_EXPLICIT_TAG = "Přidat označení explicity k souborům ('0'-Ne,'1'-Ano):" diff --git a/TIDALDL-PY/tidal_dl/lang/danish.py b/TIDALDL-PY/tidal_dl/lang/danish.py index cf14003..19fc9f7 100644 --- a/TIDALDL-PY/tidal_dl/lang/danish.py +++ b/TIDALDL-PY/tidal_dl/lang/danish.py @@ -68,7 +68,7 @@ class LangDanish(object): CHANGE_START_SETTINGS = "Start indstillinger('0'-Tilbage,'1'-Ja):" CHANGE_DOWNLOAD_PATH = "Download stil('0' ændrer ikke):" - CHANGE_AUDIO_QUALITY = "Lydkvalitet('0'-Normal,'1'-Høj,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Lydkvalitet('0'-Normal,'1'-Høj,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Videokvalitet(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Konverter mp4 til m4a('0'-Nej,'1'-Ja):" CHANGE_ADD_EXPLICIT_TAG = "Tilføj eksplicit tag til filnavne('0'-Nej,'1'-Ja):" diff --git a/TIDALDL-PY/tidal_dl/lang/dutch.py b/TIDALDL-PY/tidal_dl/lang/dutch.py index 07f1997..f564ac8 100644 --- a/TIDALDL-PY/tidal_dl/lang/dutch.py +++ b/TIDALDL-PY/tidal_dl/lang/dutch.py @@ -68,7 +68,7 @@ class LangDutch(object): CHANGE_START_SETTINGS = "Start instellingen('0'-Terugkeren,'1'-Ja):" CHANGE_DOWNLOAD_PATH = "Downloadpad('0'-niet wijzigen):" - CHANGE_AUDIO_QUALITY = "Audiokwaliteit('0'-Normaal,'1'-Hoog,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Audiokwaliteit('0'-Normaal,'1'-Hoog,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Videokwaliteit (1080, 720, 480, 360):" CHANGE_ONLYM4A = "Converteer mp4 naar m4a('0'-Nee,'1'-Ja):" CHANGE_ADD_EXPLICIT_TAG = "Expliciete tag toevoegen aan bestandsnamen('0'-Nee,'1'-Ja):" diff --git a/TIDALDL-PY/tidal_dl/lang/english.py b/TIDALDL-PY/tidal_dl/lang/english.py index 4d098c5..243c8c0 100644 --- a/TIDALDL-PY/tidal_dl/lang/english.py +++ b/TIDALDL-PY/tidal_dl/lang/english.py @@ -68,7 +68,7 @@ class LangEnglish(object): CHANGE_START_SETTINGS = "Start settings('0'-Return,'1'-Yes):" CHANGE_DOWNLOAD_PATH = "Download path('0'-not modify):" - CHANGE_AUDIO_QUALITY = "Audio quality('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Audio quality('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Video quality(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Convert mp4 to m4a('0'-No,'1'-Yes):" CHANGE_ADD_EXPLICIT_TAG = "Add explicit tag to file names('0'-No,'1'-Yes):" diff --git a/TIDALDL-PY/tidal_dl/lang/filipino.py b/TIDALDL-PY/tidal_dl/lang/filipino.py index ac78331..4df4fbd 100644 --- a/TIDALDL-PY/tidal_dl/lang/filipino.py +++ b/TIDALDL-PY/tidal_dl/lang/filipino.py @@ -68,7 +68,7 @@ class LangFilipino(object): CHANGE_START_SETTINGS = "Simulan ang settings('0'-Bumalik,'1'-Oo):" CHANGE_DOWNLOAD_PATH = "Paroroonan ng Download('0' walang babaguhin):" - CHANGE_AUDIO_QUALITY = "Kalidad ng Audio('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Kalidad ng Audio('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Kalidad ng Audio Video(1080, 720, 480, 360):" CHANGE_ONLYM4A = "I-convert ang mp4 bilang m4a('0'-Hindi,'1'-Oo):" CHANGE_ADD_EXPLICIT_TAG = "Lagyan ng explicit tag sa pangalan ng files('0'-Hindi,'1'-Oo):" diff --git a/TIDALDL-PY/tidal_dl/lang/french.py b/TIDALDL-PY/tidal_dl/lang/french.py index f144050..552e6e2 100644 --- a/TIDALDL-PY/tidal_dl/lang/french.py +++ b/TIDALDL-PY/tidal_dl/lang/french.py @@ -68,7 +68,7 @@ class LangFrench(object): CHANGE_START_SETTINGS = "Commencer les réglages ('0'-Retour,'1'-Oui):" CHANGE_DOWNLOAD_PATH = "Emplacement des téléchargements('0' ne pas modifier):" - CHANGE_AUDIO_QUALITY = "Qualité audio('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Qualité audio('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Qualité Video(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Convertir mp4 en m4a('0'-Non,'1'-Oui):" CHANGE_ADD_EXPLICIT_TAG = "Ajout du tag Explicit - Fichier('0'-Non,'1'-Oui):" diff --git a/TIDALDL-PY/tidal_dl/lang/german.py b/TIDALDL-PY/tidal_dl/lang/german.py index 5c94e16..9a3e23c 100644 --- a/TIDALDL-PY/tidal_dl/lang/german.py +++ b/TIDALDL-PY/tidal_dl/lang/german.py @@ -68,7 +68,7 @@ class LangGerman(object): CHANGE_START_SETTINGS = "Einstellungen starten ('0'-Zurück, '1'-Ja):" CHANGE_DOWNLOAD_PATH = "Downloadpfad ('0' nicht ändern):" - CHANGE_AUDIO_QUALITY = "Tonqualität ('0'-Normal, '1'-Hoch, '2'-HiFi, '3'-Master):" + CHANGE_AUDIO_QUALITY = "Tonqualität ('0'-Normal, '1'-Hoch, '2'-HiFi, '3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Videoqualität (1080, 720, 480, 360):" CHANGE_ONLYM4A = "mp4 in m4a konvertieren ('0'-Nein, '1'-Ja):" CHANGE_ADD_EXPLICIT_TAG = "Explicit Tag zum Dateiname hinzufügen ('0'-Nein, '1'-Ja):" diff --git a/TIDALDL-PY/tidal_dl/lang/hungarian.py b/TIDALDL-PY/tidal_dl/lang/hungarian.py index 78d8d75..84ff994 100644 --- a/TIDALDL-PY/tidal_dl/lang/hungarian.py +++ b/TIDALDL-PY/tidal_dl/lang/hungarian.py @@ -68,7 +68,7 @@ class LangHungarian(object): CHANGE_START_SETTINGS = "Beállítások indítása('0'- Vissza, '1'-Igen):" CHANGE_DOWNLOAD_PATH = "Letöltési útvonal('0' nincs módosítás):" - CHANGE_AUDIO_QUALITY = "Audió minőség('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Audió minőség('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Videó minőség(1080, 720, 480, 360):" CHANGE_ONLYM4A = "mp4 átalakítása m4a-ra('0'-Nem,'1'-Igen):" CHANGE_ADD_EXPLICIT_TAG = "Explicit tag hozzáadása a fájlnevekhez('0'-Nem,'1'-Igen):" diff --git a/TIDALDL-PY/tidal_dl/lang/italian.py b/TIDALDL-PY/tidal_dl/lang/italian.py index 84eaf8d..c2968b1 100644 --- a/TIDALDL-PY/tidal_dl/lang/italian.py +++ b/TIDALDL-PY/tidal_dl/lang/italian.py @@ -68,7 +68,7 @@ class LangItalian(object): CHANGE_START_SETTINGS = "Impostazioni all'avvio ('0'-Ritorna,'1'-Sì):" CHANGE_DOWNLOAD_PATH = "Percorso Download ('0' non modificare):" - CHANGE_AUDIO_QUALITY = "Qualità Audio ('0'-Normale, '1'-Alta, '2'-HiFi, '3'-Master):" + CHANGE_AUDIO_QUALITY = "Qualità Audio ('0'-Normale, '1'-Alta, '2'-HiFi, '3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Qualità Video (1080, 720, 480, 360):" CHANGE_ONLYM4A = "Convertire mp4 in m4a ('0'-No,'1'-):" CHANGE_ADD_EXPLICIT_TAG = "Aggiungi tag 'Contenuto Esplicito' ai nomi dei file ('0'-No,'1'-Sì):" diff --git a/TIDALDL-PY/tidal_dl/lang/japanese.py b/TIDALDL-PY/tidal_dl/lang/japanese.py index a468f0e..0b40201 100644 --- a/TIDALDL-PY/tidal_dl/lang/japanese.py +++ b/TIDALDL-PY/tidal_dl/lang/japanese.py @@ -68,7 +68,7 @@ class LangJapanese(object): CHANGE_START_SETTINGS = "設定を開始('0'-戻る,'1'-はい):" CHANGE_DOWNLOAD_PATH = "ダウンロードパス('0'-変更しない):" - CHANGE_AUDIO_QUALITY = "オーディオ品質('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "オーディオ品質('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "ビデオ品質(1080, 720, 480, 360):" CHANGE_ONLYM4A = "mp4をm4aに変換する('0'-いいえ,'1'-はい):" CHANGE_ADD_EXPLICIT_TAG = "Add explicit tag to file names('0'-いいえ,'1'-はい):" diff --git a/TIDALDL-PY/tidal_dl/lang/korean.py b/TIDALDL-PY/tidal_dl/lang/korean.py index c58a02b..d34ec97 100644 --- a/TIDALDL-PY/tidal_dl/lang/korean.py +++ b/TIDALDL-PY/tidal_dl/lang/korean.py @@ -68,7 +68,7 @@ class LangKorean(object): CHANGE_START_SETTINGS = "설정 시작('0'-뒤로가기,'1'-예):" CHANGE_DOWNLOAD_PATH = "다운로드 경로('0'-변경 안 함):" - CHANGE_AUDIO_QUALITY = "음질('0'-보통,'1'-높음,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "음질('0'-보통,'1'-높음,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "영상 화질(1080, 720, 480, 360):" CHANGE_ONLYM4A = "mp4를 m4a로 변환('0'-아니요,'1'-예):" CHANGE_ADD_EXPLICIT_TAG = "파일 이름에 explicit 태그 추가('0'-아니요,'1'-예):" diff --git a/TIDALDL-PY/tidal_dl/lang/norwegian.py b/TIDALDL-PY/tidal_dl/lang/norwegian.py index ff83bf6..3b505e2 100644 --- a/TIDALDL-PY/tidal_dl/lang/norwegian.py +++ b/TIDALDL-PY/tidal_dl/lang/norwegian.py @@ -68,7 +68,7 @@ class LangNorwegian(object): CHANGE_START_SETTINGS = "Start innstillinger('0'-Tilbake,'1'-Ja):" CHANGE_DOWNLOAD_PATH = "Nedlastingssti('0'-ikke endre):" - CHANGE_AUDIO_QUALITY = "Lydkvalitet('0'-Normal,'1'-Høy,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Lydkvalitet('0'-Normal,'1'-Høy,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Videokvalitet(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Konverter MP4 til M4A('0'-Nei,'1'-Ja):" CHANGE_ADD_EXPLICIT_TAG = "Legg til eksplisitt tag i filnavn('0'-Nei,'1'-Ja):" diff --git a/TIDALDL-PY/tidal_dl/lang/polish.py b/TIDALDL-PY/tidal_dl/lang/polish.py index 3a6736e..a34d406 100644 --- a/TIDALDL-PY/tidal_dl/lang/polish.py +++ b/TIDALDL-PY/tidal_dl/lang/polish.py @@ -68,7 +68,7 @@ class LangPolish(object): CHANGE_START_SETTINGS = "Uruchomić ustawienia('0'-Powrót,'1'-Tak):" CHANGE_DOWNLOAD_PATH = "Ścieżka pobierania('0'-bez zmian):" - CHANGE_AUDIO_QUALITY = "Jakość audio('0'-Normalna,'1'-Wysoka,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Jakość audio('0'-Normalna,'1'-Wysoka,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Jakość wideo(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Konwertuj mp4 do m4a('0'-Nie,'1'-Tak):" CHANGE_ADD_EXPLICIT_TAG = "Dodaj tag jednoznaczne do nazwy pliku('0'-Nie,'1'-Tak):" diff --git a/TIDALDL-PY/tidal_dl/lang/portuguese.py b/TIDALDL-PY/tidal_dl/lang/portuguese.py index 12078ef..d3c4df2 100644 --- a/TIDALDL-PY/tidal_dl/lang/portuguese.py +++ b/TIDALDL-PY/tidal_dl/lang/portuguese.py @@ -68,7 +68,7 @@ class LangPortuguese(object): CHANGE_START_SETTINGS = "Configurações Iniciais('0'-Retornar,'1'-Sim):" CHANGE_DOWNLOAD_PATH = "Caminho do download('0' Não Modificar):" - CHANGE_AUDIO_QUALITY = "Qualidade De Áudio('0'-Normal,'1'-Alta,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Qualidade De Áudio('0'-Normal,'1'-Alta,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Qualidade Do Vídeo(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Converter mp4 para m4a('0'-Não,'1'-Sim):" CHANGE_ADD_EXPLICIT_TAG = "Adicionar Etiqueta Explícito para os nomes dos arquivos('0'-Não,'1'-Sim):" diff --git a/TIDALDL-PY/tidal_dl/lang/russian.py b/TIDALDL-PY/tidal_dl/lang/russian.py index 9d9f78e..46e0d95 100644 --- a/TIDALDL-PY/tidal_dl/lang/russian.py +++ b/TIDALDL-PY/tidal_dl/lang/russian.py @@ -68,7 +68,7 @@ class LangRussian(object): CHANGE_START_SETTINGS = "Начальная настройка('0'-Отмена,'1'-Да):" CHANGE_DOWNLOAD_PATH = "Место сохранения('0'-Отмена):" - CHANGE_AUDIO_QUALITY = "Качество аудио('0'-Стандарт,'1'-Высокое,'2'-HiFi,'3'-MQA):" + CHANGE_AUDIO_QUALITY = "Качество аудио('0'-Стандарт,'1'-Высокое,'2'-HiFi,'3'-MQA,'4'-Max):" CHANGE_VIDEO_QUALITY = "Качество видео(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Сохранять mp4 как m4a('0'-Нет,'1'-Да):" CHANGE_ADD_EXPLICIT_TAG = "Добавить тег 'Нецензурно' ('0'-Нет,'1'-Да):" diff --git a/TIDALDL-PY/tidal_dl/lang/spanish.py b/TIDALDL-PY/tidal_dl/lang/spanish.py index 93e3f82..2c4b159 100644 --- a/TIDALDL-PY/tidal_dl/lang/spanish.py +++ b/TIDALDL-PY/tidal_dl/lang/spanish.py @@ -68,7 +68,7 @@ class LangSpanish(object): CHANGE_START_SETTINGS = "¿Iniciar ajustes? ('0'-Volver,'1'-Sí):" CHANGE_DOWNLOAD_PATH = "Ruta de descarga ('0' No modificar):" - CHANGE_AUDIO_QUALITY = "Calidad de audio ('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Calidad de audio ('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Calidad de video (1080, 720, 480, 360):" CHANGE_ONLYM4A = "¿Convertir mp4 a m4a? ('0'-No,'1'-Sí):" CHANGE_ADD_EXPLICIT_TAG = "¿Agregar etiqueta de contenido explícito a los nombres de archivo? ('0'-No,'1'-Sí):" diff --git a/TIDALDL-PY/tidal_dl/lang/turkish.py b/TIDALDL-PY/tidal_dl/lang/turkish.py index 955b088..81d6fc4 100644 --- a/TIDALDL-PY/tidal_dl/lang/turkish.py +++ b/TIDALDL-PY/tidal_dl/lang/turkish.py @@ -68,7 +68,7 @@ class LangTurkish(object): CHANGE_START_SETTINGS = ">>> Ayarları düzenlemek istediğine emin misin ? ('0'-Geri Dön,'1'-Evet): " CHANGE_DOWNLOAD_PATH = ">>> İndirme Konumu ('0' aynı kalsın): " - CHANGE_AUDIO_QUALITY = ">>> Ses Kalitesi ('0'-Normal,'1'-Yüksek,'2'-HiFi,'3'-[M]aster): " + CHANGE_AUDIO_QUALITY = ">>> Ses Kalitesi ('0'-Normal,'1'-Yüksek,'2'-HiFi,'3'-[M]aster,'4'-Max): " CHANGE_VIDEO_QUALITY = ">>> Video Kalitesi (1080, 720, 480, 360): " CHANGE_ONLYM4A = ">>> .mp4 uzantılı dosyalar .m4a'ya çevrilsin mi?('0'-Hayır,'1'-Evet): " CHANGE_ADD_EXPLICIT_TAG = ">>> 'Explicit' yani 'küfürlü' etiketi eklensin mi?('0'-Hayır,'1'-Evet): " diff --git a/TIDALDL-PY/tidal_dl/lang/ukrainian.py b/TIDALDL-PY/tidal_dl/lang/ukrainian.py index 668c830..efc2c63 100644 --- a/TIDALDL-PY/tidal_dl/lang/ukrainian.py +++ b/TIDALDL-PY/tidal_dl/lang/ukrainian.py @@ -68,7 +68,7 @@ class LangUkrainian(object): CHANGE_START_SETTINGS = "Запуск налаштувань('0'-Повернутися,'1'-Так):" CHANGE_DOWNLOAD_PATH = "Шлях завантаження('0'-не змінювати):" - CHANGE_AUDIO_QUALITY = "Якість аудіо('0'-Звичайна,'1'-Висока,'2'-HiFi,'3'-MQA):" + CHANGE_AUDIO_QUALITY = "Якість аудіо('0'-Звичайна,'1'-Висока,'2'-HiFi,'3'-MQA,'4'-Max):" CHANGE_VIDEO_QUALITY = "Якість відео(1080,720,480,360):" CHANGE_ONLYM4A = "Перетворювати mp4 на m4a('0'-Ні,'1'-Так):" CHANGE_ADD_EXPLICIT_TAG = "Додавати тег 'Нецензурно'('0'-Ні,'1'-Так):" diff --git a/TIDALDL-PY/tidal_dl/lang/vietnamese.py b/TIDALDL-PY/tidal_dl/lang/vietnamese.py index 39acf6a..b5fd3ba 100644 --- a/TIDALDL-PY/tidal_dl/lang/vietnamese.py +++ b/TIDALDL-PY/tidal_dl/lang/vietnamese.py @@ -68,7 +68,7 @@ class LangVietnamese(object): CHANGE_START_SETTINGS = "Bắt đầu thiết lập('0'-Về,'1'-Có):" CHANGE_DOWNLOAD_PATH = "Đường dẫn tải về('0' không đổi):" - CHANGE_AUDIO_QUALITY = "Chất lượng âm thanh('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):" + CHANGE_AUDIO_QUALITY = "Chất lượng âm thanh('0'-Normal,'1'-High,'2'-HiFi,'3'-Master,'4'-Max):" CHANGE_VIDEO_QUALITY = "Chất lượng video(1080, 720, 480, 360):" CHANGE_ONLYM4A = "Đổi mp4 sang m4a('0'-Không,'1'-Có):" CHANGE_ADD_EXPLICIT_TAG = "Thêm tag explicit vào tên tệp('0'-Không,'1'-Có):" diff --git a/TIDALDL-PY/tidal_dl/model.py b/TIDALDL-PY/tidal_dl/model.py index 5885ed7..f034f4f 100644 --- a/TIDALDL-PY/tidal_dl/model.py +++ b/TIDALDL-PY/tidal_dl/model.py @@ -15,6 +15,7 @@ class StreamUrl(aigpy.model.ModelBase): super().__init__() self.trackid = None self.url = None + self.urls = None self.codec = None self.encryptionKey = None self.soundQuality = None diff --git a/TIDALDL-PY/tidal_dl/paths.py b/TIDALDL-PY/tidal_dl/paths.py index 24c7f06..38f2c36 100644 --- a/TIDALDL-PY/tidal_dl/paths.py +++ b/TIDALDL-PY/tidal_dl/paths.py @@ -39,6 +39,8 @@ def __getExtension__(stream: StreamUrl): if '.mp4' in stream.url: if 'ac4' in stream.codec or 'mha1' in stream.codec: return '.mp4' + elif 'flac' in stream.codec: + return '.flac' return '.m4a' return '.m4a' @@ -49,7 +51,7 @@ def getAlbumPath(album): # album folder pre: [ME] flag = TIDAL_API.getFlag(album, Type.Album, True, "") - if SETTINGS.audioQuality != AudioQuality.Master: + if SETTINGS.audioQuality != AudioQuality.Master and SETTINGS.audioQuality != AudioQuality.Max: flag = flag.replace("M", "") if flag != "": flag = "[" + flag + "] " diff --git a/TIDALDL-PY/tidal_dl/tidal.py b/TIDALDL-PY/tidal_dl/tidal.py index cf99a75..915872f 100644 --- a/TIDALDL-PY/tidal_dl/tidal.py +++ b/TIDALDL-PY/tidal_dl/tidal.py @@ -10,10 +10,12 @@ ''' import json import random +import re import time import aigpy import base64 import requests +from xml.etree import ElementTree from tidal_dl.model import * from tidal_dl.enums import * @@ -286,6 +288,60 @@ class TidalAPI(object): albums += list(aigpy.model.dictToModel(item, Album()) for item in data) return albums + # from https://github.com/Dniel97/orpheusdl-tidal/blob/master/interface.py#L582 + def parse_mpd(self, xml: bytes) -> list: + # Removes default namespace definition, don't do that! + xml = re.sub(r'xmlns="[^"]+"', '', xml, count=1) + root = ElementTree.fromstring(xml) + + # List of AudioTracks + tracks = [] + + for period in root.findall('Period'): + for adaptation_set in period.findall('AdaptationSet'): + for rep in adaptation_set.findall('Representation'): + # Check if representation is audio + content_type = adaptation_set.get('contentType') + if content_type != 'audio': + raise ValueError('Only supports audio MPDs!') + + # Codec checks + codec = rep.get('codecs').upper() + if codec.startswith('MP4A'): + codec = 'AAC' + + # Segment template + seg_template = rep.find('SegmentTemplate') + # Add init file to track_urls + track_urls = [seg_template.get('initialization')] + start_number = int(seg_template.get('startNumber') or 1) + + # https://dashif-documents.azurewebsites.net/Guidelines-TimingModel/master/Guidelines-TimingModel.html#addressing-explicit + # Also see example 9 + seg_timeline = seg_template.find('SegmentTimeline') + if seg_timeline is not None: + seg_time_list = [] + cur_time = 0 + + for s in seg_timeline.findall('S'): + # Media segments start time + if s.get('t'): + cur_time = int(s.get('t')) + + # Segment reference + for i in range((int(s.get('r') or 0) + 1)): + seg_time_list.append(cur_time) + # Add duration to current time + cur_time += int(s.get('d')) + + # Create list with $Number$ indices + seg_num_list = list(range(start_number, len(seg_time_list) + start_number)) + # Replace $Number$ with all the seg_num_list indices + track_urls += [seg_template.get('media').replace('$Number$', str(n)) for n in seg_num_list] + + tracks.append(track_urls) + return tracks + def getStreamUrl(self, id, quality: AudioQuality): squality = "HI_RES" if quality == AudioQuality.Normal: @@ -294,6 +350,8 @@ class TidalAPI(object): squality = "HIGH" elif quality == AudioQuality.HiFi: squality = "LOSSLESS" + elif quality == AudioQuality.Max: + squality = "HI_RES_LOSSLESS" paras = {"audioquality": squality, "playbackmode": "STREAM", "assetpresentation": "FULL"} data = self.__get__(f'tracks/{str(id)}/playbackinfopostpaywall', paras) @@ -307,9 +365,20 @@ class TidalAPI(object): ret.codec = manifest['codecs'] ret.encryptionKey = manifest['keyId'] if 'keyId' in manifest else "" ret.url = manifest['urls'][0] + ret.urls = [ret.url] return ret - # else: - # manifest = json.loads(base64.b64decode(resp.manifest).decode('utf-8')) + elif "dash+xml" in resp.manifestMimeType: + xmldata = base64.b64decode(resp.manifest).decode('utf-8') + ret = StreamUrl() + ret.trackid = resp.trackid + ret.soundQuality = resp.audioQuality + ret.codec = aigpy.string.getSub(xmldata, 'codecs="', '"') + ret.encryptionKey = ""#manifest['keyId'] if 'keyId' in manifest else "" + ret.urls = self.parse_mpd(xmldata)[0] + if len(ret.urls) > 0: + ret.url = ret.urls[0] + return ret + raise Exception("Can't get the streamUrl, type is " + resp.manifestMimeType) def getVideoStreamUrl(self, id, quality: VideoQuality):