Compare commits

...

80 Commits

Author SHA1 Message Date
Yaronzz b56f83f938 Create debug.log 2023-09-06 10:58:54 +08:00
Yaronzz 754444c214 Update build.yml 2023-09-06 10:49:40 +08:00
Yaronzz 104a43100b Update build.yml 2023-09-06 10:44:34 +08:00
Yaronzz 62d83b5975 update readme 2023-09-06 10:25:38 +08:00
Yaronzz 251af9e745 Merge branch 'master' of https://github.com/yaronzz/Tidal-Media-Downloader into master 2023-09-06 09:34:13 +08:00
Yaronzz 0751c37b35 update 2023-09-06 09:34:01 +08:00
Yaronzz 4f32b14441 1. Add quality 'MAX'
2. Try to parse 'dash+xml'
2023-09-06 09:31:50 +08:00
Yaronzz 97928ef207 Merge pull request #1075 from yaronzz/dependabot/pip/TIDALDL-PY/requests-2.31.0
Bump requests from 2.27.1 to 2.31.0 in /TIDALDL-PY
2023-07-13 08:41:48 +08:00
Yaronzz 9edd5967f0 Merge pull request #1078 from adibue/doc-link-fix
Fix links to documentation
2023-07-13 08:41:23 +08:00
Adrian Bühler 8449b85d81 Fix links to documentation 2023-06-14 15:57:28 +02:00
dependabot[bot] 2f4ad82421 Bump requests from 2.27.1 to 2.31.0 in /TIDALDL-PY
Bumps [requests](https://github.com/psf/requests) from 2.27.1 to 2.31.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.27.1...v2.31.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-23 03:22:30 +00:00
Yaronzz 513be57c3d fix getTrackPath bug 2022-12-21 09:16:22 +08:00
Yaronzz 3eb11252c2 Merge pull request #1006 from roberts91/made-video-download-optional
Made video download optional
2022-12-21 08:54:51 +08:00
Yaronzz b972f7cda8 Merge branch 'master' into made-video-download-optional 2022-12-21 08:51:23 +08:00
Yaronzz b1b643109c Merge pull request #1019 from DJSweder/patch-1
Update czech.py
2022-11-14 09:28:34 +08:00
Yaronzz c15ad63542 Merge pull request #1017 from Click1701/master
Update german.py
2022-11-14 09:27:29 +08:00
DJSweder 09321db35e Update czech.py
Some minor changes
2022-11-13 16:52:45 +01:00
Click1701 132e516250 Update german.py
Translated yet untranslated parts and other slight changes
2022-11-08 17:20:17 +01:00
Yaronzz a771c598ae upload new version 2022-10-31 14:08:07 +08:00
Yaronzz db76e84123 Merge pull request #1003 from Zibbp/master
fix(cover): return if no cover found
2022-10-31 13:37:45 +08:00
Yaronzz 7eb4419177 Merge pull request #1002 from bladeoner/stale
Update stale.yml
2022-10-31 13:36:28 +08:00
Yaronzz df3c405667 Merge pull request #1001 from grzekru/delay_setting
Add delay setting
2022-10-31 13:36:10 +08:00
Yaronzz 951fd102ad Merge pull request #999 from bladeoner/workflow
Update Github Workflow
2022-10-31 13:33:55 +08:00
Robert Sæther 252076f6dd Added missing translations 2022-10-31 04:27:30 +01:00
Robert Sæther 11828a0e8e Made video download optional when downloading playlists, albums or mixes 2022-10-31 02:30:57 +01:00
Isaac 93f363f405 fix(cover): return if no cover found 2022-10-28 10:02:27 -05:00
bladeoner 12a96d8a46 Update stale.yml 2022-10-26 08:21:25 +02:00
Grzegorz Krukar 238b2da4b3 Add delay setting 2022-10-25 23:51:16 +02:00
bladeoner 76313d68c9 Update Github Workflow 2022-10-21 13:36:42 +02:00
Yaronzz 4e8751ceb1 upload new version 2022-10-12 10:28:26 +08:00
Yaronzz 2dfcbad8f0 Merge pull request #995 from roberts91/added-playlist-format-option
Added option to control playlist folder format, added norwegian translations, translation file cleanup (all files now have same structure)
2022-10-12 10:17:57 +08:00
Robert Sæther 07d18ce2d6 Language file clean-up (all files has same structure), added norwegian translations 2022-10-10 15:36:29 +02:00
Robert Sæther 7fdd307176 Minor translation cleanup 2022-10-10 14:53:07 +02:00
Robert Sæther 11805382cc Removed duplicate translation 2022-10-10 14:18:07 +02:00
Robert Sæther 044a847e78 Added option to control playlist folder format 2022-10-10 01:22:47 +02:00
Yaronzz 6e49253e99 Merge pull request #992 from dansleboby/fix-issue-970-986
Fix issue #970 and #986
2022-09-27 10:44:18 +08:00
Gilbert Paquin 0c83717469 Only take streamReady track
This is when a track is still in the playlist and no longer on tidal, you can't play the song anymore through tidal

Fix Issue #970
2022-09-23 16:37:04 -04:00
Gilbert Paquin 7f1afb27f1 Random delay and long wait if for any reason the random delay too short
Fix issue #986
2022-09-23 16:35:55 -04:00
Yaronzz 18efb49213 Merge pull request #983 from omensight/master
Fix error when cover is not present
2022-09-13 09:42:46 +08:00
Mijael Viricochea Parra a275275cb6 Revert "Build file added for Windows"
This reverts commit 7e5b6d22c4.
2022-09-12 21:32:48 -04:00
Mijael Viricochea Parra 7e5b6d22c4 Build file added for Windows 2022-09-09 21:31:01 -04:00
Mijael Viricochea 96742046ba Fix error when cover is not present 2022-09-08 16:30:41 -04:00
Yaronzz 3199dcedc6 upload new version 2022-08-29 10:30:03 +08:00
Yaronzz 2cf59b3195 Fix #931 2022-08-29 10:25:50 +08:00
Yaronzz be84a3631a Merge pull request #974 from yohann69/patch-1
Update french.py
2022-08-23 09:16:24 +08:00
Yaronzz 9ce35af72f Merge pull request #967 from bladeoner/language
Update Hungarian language
2022-08-23 09:16:00 +08:00
Yohann 9d904a0fea Update french.py 2022-08-11 18:40:28 +02:00
bladeoner 5e05afd775 Update Hungarian language 2022-08-01 23:29:18 +02:00
Yaronzz dece506d58 Merge pull request #962 from DJSweder/patch-2
Update czech.py
2022-07-28 23:24:38 +08:00
DJSweder c2cc170988 Update czech.py
Correction of author's information.
2022-07-26 14:11:33 +02:00
DJSweder 3cab9ea295 Update czech.py
Corrections and completion translation into Czech language.
2022-07-26 10:18:10 +02:00
Yaronzz 5cf094d227 Merge pull request #946 from acherifi/add_artists_search_and_favorites
Add capability to perform an artist search and download all albums
2022-07-26 10:05:10 +08:00
Yaronzz 2e1e15ed3f Merge pull request #959 from KitDaCatsun/patch-2
Made errors in __post__ throw after 3 attempts
2022-07-26 10:02:57 +08:00
KitDaCatsun 7434470216 Made errors in __post__ throw after 3 attempts
`range(3)` gives `0, 1, 2` so `index >= 3` would never be reached. Assuming intended behavior was to throw if an error occurs on the third try and ignore errors on the first and second
2022-07-25 10:17:04 +01:00
Yaronzz 2ce2a310ae Merge pull request #958 from KitDaCatsun/patch-1
Removed unused assignment
2022-07-25 17:14:31 +08:00
KitDaCatsun dfc7af7796 Removed unused assignment
header set to {} then immediately given new value
2022-07-25 09:06:17 +01:00
Ali CHERIFI 63bf063dd3 Fix except block 2022-07-14 22:51:38 +02:00
Ali CHERIFI 3e8a3436b4 Add capability to perform an artist search and download all albums 2022-07-14 22:43:12 +02:00
Yaronzz e08e5efc88 upload new version 2022-07-14 09:54:54 +08:00
Yaronzz 7f3758e18c Fix bug of #945 2022-07-14 09:52:45 +08:00
Yaronzz 3e2d74a37f update readme 2022-07-08 11:15:13 +08:00
Yaronzz 69ccd65025 update readme 2022-07-08 11:11:49 +08:00
Yaronzz 81b82e6c29 update gui 2022-07-08 10:54:05 +08:00
Yaronzz 346befda6d update gui 2022-07-08 09:59:48 +08:00
Yaronzz 450102bfea Merge pull request #940 from Frikilinux/lang-es
Translate new options and fix typos
2022-07-08 08:34:11 +08:00
Frikilinux a966b3d93d Translate new options and fix typos 2022-07-07 19:01:27 -03:00
Yaronzz 55df515256 upload new version #936 2022-07-06 14:57:30 +08:00
Yaronzz 242747719a Mulithread download 2022-07-06 14:43:59 +08:00
Yaronzz e3c5886a02 upload v2022.6.30.1 2022-06-30 09:06:27 +08:00
Yaronzz 33c49b83db fix #934 2022-06-30 08:57:04 +08:00
Yaronzz ed13b9b92d check qt_material #933 2022-06-30 08:45:13 +08:00
Yaronzz e45f649e46 update readme 2022-06-27 17:38:10 +08:00
Yaronzz 0172301769 check api key 2022-06-27 11:16:00 +08:00
Yaronzz a7aa38e563 fix bug of #930 2022-06-24 18:30:53 +08:00
Yaronzz fd97a2b966 upload new version 2022-06-24 10:19:41 +08:00
Yaronzz e1ee47b93c update 2022-06-23 14:07:26 +08:00
Yaronzz 61b9dd3af8 update 2022-06-23 13:43:47 +08:00
Yaronzz 628a42b058 add require module 2022-06-23 13:38:40 +08:00
Yaronzz 2c392f0e22 upload new version 2022-06-23 11:55:19 +08:00
Yaronzz dc57d4d01d Merge pull request #927 from yaronzz/refactor
Refactor
2022-06-23 11:42:21 +08:00
49 changed files with 2292 additions and 787 deletions
+1 -1
View File
@@ -18,7 +18,7 @@
# pull-requests: write
# steps:
# - uses: actions/stale@v5
# - uses: actions/stale@v6
# with:
# repo-token: ${{ secrets.GITHUB_TOKEN }}
# stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity.'
+4 -2
View File
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -22,6 +22,8 @@ jobs:
pip3 install wheel
pip3 install pyinstaller
pip3 install PyQt5
pip3 install cython
python3 -m pip install --upgrade pip setuptools wheel
pip3 install -r requirements.txt --upgrade
working-directory: TIDALDL-PY
@@ -67,7 +69,7 @@ jobs:
# working-directory: TIDALDL-PY/dist
- name: Upload artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: tidal-dl-${{ runner.os }}
path: |
+2 -1
View File
@@ -34,7 +34,8 @@
"-o",
"e:\\test",
"-q",
"0"
"0",
"-g"
]
},
{
+42 -26
View File
@@ -1,6 +1,10 @@
<br>
<a href="https://github.com/yaronzz/Tidal-Media-Downloader-PRO">[GUI-REPOSITORY]</a>
<br>
![Tidal-Media-Downloader](https://socialify.git.ci/yaronzz/Tidal-Media-Downloader/image?description=1&font=Rokkitt&forks=1&issues=1&language=1&name=1&owner=1&pattern=Circuit%20Board&stargazers=1&theme=Dark)
<div align="center">
<h1>Tidal-Media-Downloader</h1>
<a href="https://github.com/yaronzz/Tidal-Media-Downloader/blob/master/LICENSE">
@@ -26,34 +30,47 @@
«Tidal-Media-Downloader» is an application that lets you download videos and tracks from Tidal. It supports two version: tidal-dl and tidal-gui. (This repository only contains tidal-dl, and the release isn't the newest gui version.)
<br>
<a href="https://github.com/yaronzz/Tidal-Media-Downloader-PRO/releases">Download</a> |
<a href="https://yaronzz.com/post/tidal_dl_installation/">Documentation</a> |
<a href="https://yaronzz.com/post/tidal_dl_installation_chn/">中文文档</a> |
<a href="https://doc.yaronzz.com/post/tidal_dl_installation/">Documentation</a> |
<a href="https://doc.yaronzz.com/post/tidal_dl_installation_chn/">中文文档</a> |
<br>
</p>
## 📺 Installation
## 📺 Installation
| Name | platform | Install |
| ----------------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| tidal-dl (cli) | Windows \ Linux \ Macos \ Android | ``pip3 install tidal-dl --upgrade``<br />[Detailed Description](https://yaronzz.com/post/tidal_dl_installation/#Install) |
| tidal-gui | Windows | [GUI Repository](https://github.com/yaronzz/Tidal-Media-Downloader-PRO) |
| tidal-gui(**Cross-platform**) | Windows \ Linux \ Macos | ``pip3 install tidal-gui --upgrade`` |
```shell
pip3 install tidal-dl --upgrade
```
| USE | FUNCTION |
| ----------------------------------------------------- | -------------------------- |
| tidal-dl | Show interactive interface |
| tidal-dl -h | Show help-message |
| tidal-dl -l "https://tidal.com/browse/track/70973230" | Download link |
| tidal-dl -g | Show simple-gui |
If you are using windows system, you can use [tidal-pro](https://github.com/yaronzz/Tidal-Media-Downloader-PRO)
### Nightly Builds
| Download nightly builds from continuous integration: | [Build Status][Actions] |
| ---------------------------------------------------- | ----------------------- |
|Download nightly builds from continuous integration: | [![Build Status][Build]][Actions]
|-------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
[Actions]: https://github.com/yaronzz/Tidal-Media-Downloader/actions
[Build]: https://github.com/yaronzz/Tidal-Media-Downloader/workflows/Tidal%20Media%20Downloader/badge.svg
## 🤖 Features
- Download album \ track \ video \ playlist \ artist-albums
- Add metadata to songs
- Selectable video resolution and track quality
## 💽 User Interface
<img src="https://i.loli.net/2020/08/19/gqW6zHI1SrKlomC.png" alt="image" style="zoom: 50%;" />
![image-20220708105823257](https://s2.loli.net/2022/07/08/vV6HsxugwoDyGr8.png)
![image-20200806013705425](https://i.loli.net/2020/08/06/sPLowIlCGyOdpVN.png)
## Settings - Possible Tags
@@ -86,7 +103,7 @@
| {ArtistName} | The Beatles |
| {ArtistsName} | The Beatles |
| {TrackTitle} | I Saw Her Standing There (Remastered 2009) |
| {ExplicitFlag} | (*Explicit*) |
| {ExplicitFlag} | (*Explicit*) |
| {AlbumYear} | 1963 |
| {AlbumTitle} | Please Please Me (Remastered) |
| {AudioQuality} | LOSSLESS |
@@ -96,26 +113,26 @@
### Video
| Tag | Example Value |
| -------------- | ------------------ |
| {VideoNumber} | 00 |
| {ArtistName} | DMX |
| {ArtistsName} | DMX, Westside Gunn |
| {VideoTitle} | Hood Blues |
| {ExplicitFlag} | (*Explicit*) |
| {VideoYear} | 2021 |
| {TrackID} | 188932980 |
| Tag | Example Value |
| ----------------- | ------------------------------------------ |
| {VideoNumber} | 00 |
| {ArtistName} | DMX |
| {ArtistsName} | DMX, Westside Gunn |
| {VideoTitle} | Hood Blues |
| {ExplicitFlag} | (*Explicit*) |
| {VideoYear} | 2021 |
| {TrackID} | 188932980 |
## ☕ Support
If you really like my projects and want to support me, you can buy me a coffee and star this project.
If you really like my projects and want to support me, you can buy me a coffee and star this project.
<a href="https://www.buymeacoffee.com/yaronzz" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/arial-orange.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;" ></a>
## 🎂 Contributors
This project exists thanks to all the people who contribute.
This project exists thanks to all the people who contribute.
`<a href="https://github.com/yaronzz/Tidal-Media-Downloader/graphs/contributors"><img src="https://contributors-img.web.app/image?repo=yaronzz/Tidal-Media-Downloader" />``</a>`
<a href="https://github.com/yaronzz/Tidal-Media-Downloader/graphs/contributors"><img src="https://contributors-img.web.app/image?repo=yaronzz/Tidal-Media-Downloader" /></a>
## 🎨 Libraries and reference
@@ -125,9 +142,8 @@ This project exists thanks to all the people who contribute.
- [tidal-wiki](https://github.com/Fokka-Engineering/TIDAL/wiki)
## 📜 Disclaimer
- Private use only.
- Need a Tidal-HIFI subscription.
- Need a Tidal-HIFI subscription.
- You should not use this method to distribute or pirate music.
- It may be illegal to use this in your country, so be informed.
Binary file not shown.
+4 -2
View File
@@ -1,10 +1,12 @@
requests==2.27.1
requests==2.31.0
colorama==0.4.4
prettytable==3.1.1
mutagen==1.45.1
psutil==5.9.0
pycryptodome==3.14.1
aigpy==2022.6.22.1
aigpy==2022.7.8.1
lyricsgenius==3.0.1
pydub==0.25.1
PyQt5==5.15.7
qt-material==2.12
lxml==4.7.1
+1 -1
View File
@@ -11,6 +11,6 @@ setup(
packages=find_packages(exclude=['tidal_dl*']),
include_package_data = True,
platforms = "any",
install_requires=["tidal-dl", "PyQt5"],
install_requires=["tidal-dl"],
entry_points={'console_scripts': [ 'tidal-gui = tidal_gui:main', ]}
)
+3 -3
View File
@@ -13,11 +13,11 @@ setup(
packages=find_packages(exclude=['tidal_gui*']),
include_package_data=False,
platforms="any",
install_requires=["aigpy>=2022.6.22.1",
install_requires=["aigpy>=2022.7.8.1",
"requests>=2.22.0",
"pycryptodome",
"pydub",
"prettytable",
"PyQt5"],
"prettytable",
"lxml"],
entry_points={'console_scripts': ['tidal-dl = tidal_dl:main', ]}
)
+19 -10
View File
@@ -13,7 +13,7 @@ import getopt
from tidal_dl.events import *
from tidal_dl.settings import *
from tidal_dl.gui import *
from tidal_dl.gui import startGui
def mainCommand():
@@ -36,7 +36,7 @@ def mainCommand():
return
if opt in ('-g', '--gui'):
showGui = True
return
continue
if opt in ('-l', '--link'):
link = val
continue
@@ -54,7 +54,7 @@ def mainCommand():
continue
if not aigpy.path.mkdirs(SETTINGS.downloadPath):
Printf.err(LANG.MSG_PATH_ERR + SETTINGS.downloadPath)
Printf.err(LANG.select.MSG_PATH_ERR + SETTINGS.downloadPath)
return
if showGui:
@@ -64,12 +64,13 @@ def mainCommand():
if link is not None:
if not loginByConfig():
loginByWeb()
Printf.info(LANG.SETTING_DOWNLOAD_PATH + ':' + SETTINGS.downloadPath)
Printf.info(LANG.select.SETTING_DOWNLOAD_PATH + ':' + SETTINGS.downloadPath)
start(link)
def main():
SETTINGS.read(getProfilePath())
TOKEN.read(getTokenPath())
TIDAL_API.apiKey = apiKey.getItem(SETTINGS.apiKeyIndex)
if len(sys.argv) > 1:
mainCommand()
@@ -78,14 +79,17 @@ def main():
Printf.logo()
Printf.settings()
if not loginByConfig():
if not apiKey.isItemValid(SETTINGS.apiKeyIndex):
changeApiKey()
loginByWeb()
elif not loginByConfig():
loginByWeb()
Printf.checkVersion()
while True:
Printf.choices()
choice = Printf.enter(LANG.PRINT_ENTER_CHOICE)
choice = Printf.enter(LANG.select.PRINT_ENTER_CHOICE)
if choice == "0":
return
elif choice == "1":
@@ -115,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
@@ -124,23 +128,28 @@ def test():
SETTINGS.showProgress = True
SETTINGS.showTrackInfo = True
SETTINGS.saveAlbumInfo = True
SETTINGS.downloadVideos = True
SETTINGS.downloadPath = "./download/"
SETTINGS.usePlaylistFolder = True
SETTINGS.albumFolderFormat = R"{ArtistName}/{Flag} {AlbumTitle} [{AlbumID}] [{AlbumYear}]"
SETTINGS.playlistFolderFormat = R"Playlist/{PlaylistName} [{PlaylistUUID}]"
SETTINGS.trackFileFormat = R"{TrackNumber} - {ArtistName} - {TrackTitle}{ExplicitFlag}"
SETTINGS.videoFileFormat = R"{VideoNumber} - {ArtistName} - {VideoTitle}{ExplicitFlag}"
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")
# video 155608351 188932980 https://tidal.com/browse/track/55130637
# start("155608351")https://tidal.com/browse/track/199683732
if __name__ == '__main__':
+12 -8
View File
@@ -60,12 +60,12 @@ __KEYS_JSON__ = '''
'''
__API_KEYS__ = json.loads(__KEYS_JSON__)
__ERROR_KEY__ = {
'platform': 'None',
'formats': '',
'clientId': '',
'clientSecret': '',
'platform': 'None',
'formats': '',
'clientId': '',
'clientSecret': '',
'valid': 'False',
},
},
def getNum():
@@ -78,6 +78,11 @@ def getItem(index: int):
return __API_KEYS__['keys'][index]
def isItemValid(index: int):
item = getItem(index)
return item['valid'] == 'True'
def getItems():
return __API_KEYS__['keys']
@@ -92,7 +97,8 @@ def getLimitIndexs():
def getVersion():
return __API_KEYS__['version']
#Load from gist
# Load from gist
try:
respond = requests.get('https://api.github.com/gists/48d01f5a24b4b7b37f19443977c22cd6')
if respond.status_code == 200:
@@ -100,5 +106,3 @@ try:
__API_KEYS__ = json.loads(content)
except:
pass
+46 -15
View File
@@ -16,6 +16,7 @@ from tidal_dl.printf import *
from tidal_dl.decryption import *
from tidal_dl.tidal import *
from concurrent.futures import ThreadPoolExecutor
def __isSkip__(finalpath, url):
if not SETTINGS.checkExist:
@@ -84,10 +85,10 @@ def downloadCover(album):
def downloadAlbumInfo(album, tracks):
if album is None:
return
path = getAlbumPath(album)
aigpy.path.mkdirs(path)
path += '/AlbumInfo.txt'
infos = ""
infos += "[ID] %s\n" % (str(album.id))
@@ -113,19 +114,19 @@ def downloadVideo(video: Video, album: Album = None, playlist: Playlist = None):
try:
stream = TIDAL_API.getVideoStreamUrl(video.id, SETTINGS.videoQuality)
path = getVideoPath(video, album, playlist)
Printf.video(video, stream)
logging.info("[DL Video] name=" + aigpy.path.getFileName(path) + "\nurl=" + stream.m3u8Url)
m3u8content = requests.get(stream.m3u8Url).content
if m3u8content is None:
Printf.err(f"DL Video[{video.title}] getM3u8 failed.{str(e)}")
return False
return False, f"GetM3u8 failed.{str(e)}"
urls = aigpy.m3u8.parseTsUrls(m3u8content)
if len(urls) <= 0:
Printf.err(f"DL Video[{video.title}] getTsUrls failed.{str(e)}")
return False
return False, "GetTsUrls failed.{str(e)}"
check, msg = aigpy.m3u8.downloadByTsUrls(urls, path)
if check:
@@ -133,10 +134,10 @@ def downloadVideo(video: Video, album: Album = None, playlist: Playlist = None):
return True
else:
Printf.err(f"DL Video[{video.title}] failed.{msg}")
return False
return False, msg
except Exception as e:
Printf.err(f"DL Video[{video.title}] failed.{str(e)}")
return False
return False, str(e)
def downloadTrack(track: Track, album=None, playlist=None, userProgress=None, partSize=1048576):
@@ -144,7 +145,7 @@ def downloadTrack(track: Track, album=None, playlist=None, userProgress=None, pa
stream = TIDAL_API.getStreamUrl(track.id, SETTINGS.audioQuality)
path = getTrackPath(track, stream, album, playlist)
if SETTINGS.showTrackInfo:
if SETTINGS.showTrackInfo and not SETTINGS.multiThread:
Printf.track(track, stream)
if userProgress is not None:
@@ -153,18 +154,18 @@ def downloadTrack(track: Track, album=None, playlist=None, userProgress=None, pa
# check exist
if __isSkip__(path, stream.url):
Printf.success(aigpy.path.getFileName(path) + " (skip:already exists!)")
return True
return True, ''
# 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)
check, err = tool.start(SETTINGS.showProgress and not SETTINGS.multiThread)
if not check:
Printf.err(f"DL Track[{track.title}] failed.{str(err)}")
return False
return False, str(err)
# encrypted -> decrypt and remove encrypted file
__encrypted__(stream, path + '.part', path)
@@ -180,13 +181,43 @@ def downloadTrack(track: Track, album=None, playlist=None, userProgress=None, pa
lyrics = TIDAL_API.getLyrics(track.id).subtitles
if SETTINGS.lyricFile:
lrcPath = path.rsplit(".", 1)[0] + '.lrc'
aigpy.fileHelper.write(lrcPath, lyrics, 'w')
aigpy.file.write(lrcPath, lyrics, 'w')
except:
lyrics = ''
__setMetaData__(track, album, path, contributors, lyrics)
Printf.success(track.title)
return True
return True, ''
except Exception as e:
Printf.err(f"DL Track[{track.title}] failed.{str(e)}")
return False
return False, str(e)
def downloadTracks(tracks, album: Album = None, playlist : Playlist=None):
def __getAlbum__(item: Track):
album = TIDAL_API.getAlbum(item.album.id)
if SETTINGS.saveCovers and not SETTINGS.usePlaylistFolder:
downloadCover(album)
return album
if not SETTINGS.multiThread:
for index, item in enumerate(tracks):
itemAlbum = album
if itemAlbum is None:
itemAlbum = __getAlbum__(item)
item.trackNumberOnPlaylist = index + 1
downloadTrack(item, itemAlbum, playlist)
else:
thread_pool = ThreadPoolExecutor(max_workers=5)
for index, item in enumerate(tracks):
itemAlbum = album
if itemAlbum is None:
itemAlbum = __getAlbum__(item)
item.trackNumberOnPlaylist = index + 1
thread_pool.submit(downloadTrack, item, itemAlbum, playlist)
thread_pool.shutdown(wait=True)
def downloadVideos(videos, album: Album, playlist=None):
for item in videos:
downloadVideo(item, album, playlist)
+1
View File
@@ -16,6 +16,7 @@ class AudioQuality(Enum):
High = 1
HiFi = 2
Master = 3
Max = 4
class VideoQuality(Enum):
+53 -59
View File
@@ -30,12 +30,11 @@ def start_album(obj: Album):
tracks, videos = TIDAL_API.getItems(obj.id, Type.Album)
if SETTINGS.saveAlbumInfo:
downloadAlbumInfo(obj, tracks)
if SETTINGS.saveCovers:
if SETTINGS.saveCovers and obj.cover is not None:
downloadCover(obj)
for item in tracks:
downloadTrack(item, obj)
for item in videos:
downloadVideo(item, obj)
downloadTracks(tracks, obj)
if SETTINGS.downloadVideos:
downloadVideos(videos, obj)
def start_track(obj: Track):
@@ -46,7 +45,6 @@ def start_track(obj: Track):
def start_video(obj: Video):
# Printf.video(obj)
downloadVideo(obj, obj.album)
@@ -60,28 +58,15 @@ def start_artist(obj: Artist):
def start_playlist(obj: Playlist):
Printf.playlist(obj)
tracks, videos = TIDAL_API.getItems(obj.uuid, Type.Playlist)
for index, item in enumerate(tracks):
album = TIDAL_API.getAlbum(item.album.id)
item.trackNumberOnPlaylist = index + 1
downloadTrack(item, album, obj)
if SETTINGS.saveCovers and not SETTINGS.usePlaylistFolder:
downloadCover(album)
for item in videos:
downloadVideo(item, None)
downloadTracks(tracks, None, obj)
if SETTINGS.downloadVideos:
downloadVideos(videos, None, obj)
def start_mix(obj: Mix):
Printf.mix(obj)
for index, item in enumerate(obj.tracks):
album = TIDAL_API.getAlbum(item.album.id)
item.trackNumberOnPlaylist = index + 1
downloadTrack(item, album)
if SETTINGS.saveCovers and not SETTINGS.usePlaylistFolder:
downloadCover(album)
for item in obj.videos:
downloadVideo(item, None)
downloadTracks(obj.tracks, None, None)
downloadVideos(obj.videos, None, None)
def start_file(string):
@@ -114,6 +99,7 @@ def start_type(etype: Type, obj):
elif etype == Type.Mix:
start_mix(obj)
def start(string):
if aigpy.string.isNull(string):
Printf.err('Please enter something.')
@@ -138,6 +124,7 @@ def start(string):
except Exception as e:
Printf.err(str(e))
'''
=================================
CHANGE SETTINGS
@@ -146,52 +133,59 @@ CHANGE SETTINGS
def changePathSettings():
Printf.settings(SETTINGS)
Printf.settings()
SETTINGS.downloadPath = Printf.enterPath(
LANG.CHANGE_DOWNLOAD_PATH,
LANG.MSG_PATH_ERR,
LANG.select.CHANGE_DOWNLOAD_PATH,
LANG.select.MSG_PATH_ERR,
'0',
SETTINGS.downloadPath)
SETTINGS.albumFolderFormat = Printf.enterFormat(
LANG.CHANGE_ALBUM_FOLDER_FORMAT,
LANG.select.CHANGE_ALBUM_FOLDER_FORMAT,
SETTINGS.albumFolderFormat,
SETTINGS.getDefaultAlbumFolderFormat())
SETTINGS.getDefaultPathFormat(Type.Album))
SETTINGS.playlistFolderFormat = Printf.enterFormat(
LANG.select.CHANGE_PLAYLIST_FOLDER_FORMAT,
SETTINGS.playlistFolderFormat,
SETTINGS.getDefaultPathFormat(Type.Playlist))
SETTINGS.trackFileFormat = Printf.enterFormat(
LANG.CHANGE_TRACK_FILE_FORMAT,
LANG.select.CHANGE_TRACK_FILE_FORMAT,
SETTINGS.trackFileFormat,
SETTINGS.getDefaultTrackFileFormat())
SETTINGS.getDefaultPathFormat(Type.Track))
SETTINGS.videoFileFormat = Printf.enterFormat(
LANG.CHANGE_VIDEO_FILE_FORMAT,
LANG.select.CHANGE_VIDEO_FILE_FORMAT,
SETTINGS.videoFileFormat,
SETTINGS.getDefaultVideoFileFormat())
SETTINGS.getDefaultPathFormat(Type.Video))
SETTINGS.save()
def changeQualitySettings():
Printf.settings(SETTINGS)
Printf.settings()
SETTINGS.audioQuality = AudioQuality(
int(Printf.enterLimit(LANG.CHANGE_AUDIO_QUALITY,
LANG.MSG_INPUT_ERR,
['0', '1', '2', '3'])))
int(Printf.enterLimit(LANG.select.CHANGE_AUDIO_QUALITY,
LANG.select.MSG_INPUT_ERR,
['0', '1', '2', '3', '4'])))
SETTINGS.videoQuality = VideoQuality(
int(Printf.enterLimit(LANG.CHANGE_VIDEO_QUALITY,
LANG.MSG_INPUT_ERR,
int(Printf.enterLimit(LANG.select.CHANGE_VIDEO_QUALITY,
LANG.select.MSG_INPUT_ERR,
['1080', '720', '480', '360'])))
SETTINGS.save()
def changeSettings():
Printf.settings(SETTINGS)
SETTINGS.showProgress = Printf.enterBool(LANG.CHANGE_SHOW_PROGRESS)
SETTINGS.showTrackInfo = Printf.enterBool(LANG.CHANGE_SHOW_TRACKINFO)
SETTINGS.checkExist = Printf.enterBool(LANG.CHANGE_CHECK_EXIST)
SETTINGS.includeEP = Printf.enterBool(LANG.CHANGE_INCLUDE_EP)
SETTINGS.saveCovers = Printf.enterBool(LANG.CHANGE_SAVE_COVERS)
SETTINGS.saveAlbumInfo = Printf.enterBool(LANG.CHANGE_SAVE_ALBUM_INFO)
SETTINGS.lyricFile = Printf.enterBool(LANG.CHANGE_ADD_LRC_FILE)
SETTINGS.usePlaylistFolder = Printf.enterBool(LANG.SETTING_USE_PLAYLIST_FOLDER + "('0'-No,'1'-Yes):")
SETTINGS.language = Printf.enter(LANG.CHANGE_LANGUAGE + "(" + getLangChoicePrint() + "):")
LANG = setLang(SETTINGS.language)
Printf.settings()
SETTINGS.showProgress = Printf.enterBool(LANG.select.CHANGE_SHOW_PROGRESS)
SETTINGS.showTrackInfo = Printf.enterBool(LANG.select.CHANGE_SHOW_TRACKINFO)
SETTINGS.checkExist = Printf.enterBool(LANG.select.CHANGE_CHECK_EXIST)
SETTINGS.includeEP = Printf.enterBool(LANG.select.CHANGE_INCLUDE_EP)
SETTINGS.saveCovers = Printf.enterBool(LANG.select.CHANGE_SAVE_COVERS)
SETTINGS.saveAlbumInfo = Printf.enterBool(LANG.select.CHANGE_SAVE_ALBUM_INFO)
SETTINGS.downloadVideos = Printf.enterBool(LANG.select.CHANGE_DOWNLOAD_VIDEOS)
SETTINGS.lyricFile = Printf.enterBool(LANG.select.CHANGE_ADD_LRC_FILE)
SETTINGS.multiThread = Printf.enterBool(LANG.select.CHANGE_MULITHREAD_DOWNLOAD)
SETTINGS.usePlaylistFolder = Printf.enterBool(LANG.select.SETTING_USE_PLAYLIST_FOLDER + "('0'-No,'1'-Yes):")
SETTINGS.downloadDelay = Printf.enterBool(LANG.select.CHANGE_USE_DOWNLOAD_DELAY)
SETTINGS.language = Printf.enter(LANG.select.CHANGE_LANGUAGE + "(" + LANG.getLangChoicePrint() + "):")
LANG.setLang(SETTINGS.language)
SETTINGS.save()
@@ -202,7 +196,7 @@ def changeApiKey():
Printf.info(f'Current APIKeys: {str(SETTINGS.apiKeyIndex)} {item["platform"]}-{item["formats"]}')
Printf.info(f'Current Version: {str(ver)}')
Printf.apikeys(apiKey.getItems())
index = int(Printf.enterLimit("APIKEY index:", LANG.MSG_INPUT_ERR, apiKey.getLimitIndexs()))
index = int(Printf.enterLimit("APIKEY index:", LANG.select.MSG_INPUT_ERR, apiKey.getLimitIndexs()))
if index != SETTINGS.apiKeyIndex:
SETTINGS.apiKeyIndex = index
@@ -244,14 +238,14 @@ def __displayTime__(seconds, granularity=2):
def loginByWeb():
try:
print(LANG.AUTH_START_LOGIN)
print(LANG.select.AUTH_START_LOGIN)
# get device code
url = TIDAL_API.getDeviceCode()
print(LANG.AUTH_NEXT_STEP.format(
print(LANG.select.AUTH_NEXT_STEP.format(
aigpy.cmd.green(url),
aigpy.cmd.yellow(__displayTime__(TIDAL_API.key.authCheckTimeout))))
print(LANG.AUTH_WAITING)
print(LANG.select.AUTH_WAITING)
start = time.time()
elapsed = 0
@@ -261,7 +255,7 @@ def loginByWeb():
time.sleep(TIDAL_API.key.authCheckInterval + 1)
continue
Printf.success(LANG.MSG_VALID_ACCESSTOKEN.format(
Printf.success(LANG.select.MSG_VALID_ACCESSTOKEN.format(
__displayTime__(int(TIDAL_API.key.expiresIn))))
TOKEN.userid = TIDAL_API.key.userId
@@ -272,7 +266,7 @@ def loginByWeb():
TOKEN.save()
return True
raise Exception(LANG.AUTH_TIMEOUT)
raise Exception(LANG.select.AUTH_TIMEOUT)
except Exception as e:
Printf.err(f"Login failed.{str(e)}")
return False
@@ -284,7 +278,7 @@ def loginByConfig():
return False
if TIDAL_API.verifyAccessToken(TOKEN.accessToken):
Printf.info(LANG.MSG_VALID_ACCESSTOKEN.format(
Printf.info(LANG.select.MSG_VALID_ACCESSTOKEN.format(
__displayTime__(int(TOKEN.expiresAfter - time.time()))))
TIDAL_API.key.countryCode = TOKEN.countryCode
@@ -292,9 +286,9 @@ def loginByConfig():
TIDAL_API.key.accessToken = TOKEN.accessToken
return True
Printf.info(LANG.MSG_INVALID_ACCESSTOKEN)
Printf.info(LANG.select.MSG_INVALID_ACCESSTOKEN)
if TIDAL_API.refreshAccessToken(TOKEN.refreshToken):
Printf.success(LANG.MSG_VALID_ACCESSTOKEN.format(
Printf.success(LANG.select.MSG_VALID_ACCESSTOKEN.format(
__displayTime__(int(TIDAL_API.key.expiresIn))))
TOKEN.userid = TIDAL_API.key.userId
+256 -148
View File
@@ -8,170 +8,278 @@
@Contact : yaronhuang@foxmail.com
@Desc :
"""
import os
import sys
import aigpy
import _thread
import importlib
from tidal_dl.events import *
from tidal_dl.settings import *
from PyQt5.QtCore import Qt
from PyQt5.QtCore import pyqtSignal
from PyQt5 import QtWidgets
from qt_material import apply_stylesheet
from tidal_dl.printf import *
from tidal_dl.enums import *
class MainView(QtWidgets.QWidget):
s_downloadEnd = pyqtSignal(str, bool, str)
def enableGui():
try:
importlib.import_module('PyQt5')
importlib.import_module('qt_material')
return True
except Exception as e:
return False
def __init__(self, ) -> None:
super().__init__()
self.initView()
self.setMinimumSize(600, 500)
self.setWindowTitle("Tidal-dl")
def __info__(self, msg):
QtWidgets.QMessageBox.information(self,
'Info',
msg,
QtWidgets.QMessageBox.Yes)
def initView(self):
self.c_lineSearch = QtWidgets.QLineEdit()
self.c_btnSearch = QtWidgets.QPushButton("Search")
self.c_btnDownload = QtWidgets.QPushButton("Download")
self.m_supportType = [Type.Album, Type.Playlist, Type.Track, Type.Video]
self.c_combType = QtWidgets.QComboBox()
for item in self.m_supportType:
self.c_combType.addItem(item.name, item)
if not enableGui():
def startGui():
Printf.err("Not support gui. Please type: `pip3 install PyQt5 qt_material`")
else:
from PyQt5.QtCore import Qt, QObject
from PyQt5.QtGui import QTextCursor
from PyQt5.QtCore import pyqtSignal
from PyQt5 import QtWidgets
from qt_material import apply_stylesheet
columnNames = ['#', 'Title', 'Artists', 'Quality']
self.c_tableInfo = QtWidgets.QTableWidget()
self.c_tableInfo.setColumnCount(len(columnNames))
self.c_tableInfo.setRowCount(0)
self.c_tableInfo.setShowGrid(False)
self.c_tableInfo.verticalHeader().setVisible(False)
self.c_tableInfo.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.c_tableInfo.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.c_tableInfo.horizontalHeader().setStretchLastSection(True)
self.c_tableInfo.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.ResizeToContents)
self.c_tableInfo.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.c_tableInfo.setFocusPolicy(Qt.NoFocus)
for index, name in enumerate(columnNames):
item = QtWidgets.QTableWidgetItem(name)
self.c_tableInfo.setHorizontalHeaderItem(index, item)
self.lineGrid = QtWidgets.QHBoxLayout()
self.lineGrid.addWidget(self.c_combType)
self.lineGrid.addWidget(self.c_lineSearch)
self.lineGrid.addWidget(self.c_btnSearch)
self.mainGrid = QtWidgets.QVBoxLayout(self)
self.mainGrid.addLayout(self.lineGrid)
self.mainGrid.addWidget(self.c_tableInfo)
self.mainGrid.addWidget(self.c_btnDownload)
self.c_btnSearch.clicked.connect(self.search)
self.c_btnDownload.clicked.connect(self.download)
self.s_downloadEnd.connect(self.downloadEnd)
def addItem(self, rowIdx: int, colIdx: int, text):
if isinstance(text, str):
item = QtWidgets.QTableWidgetItem(text)
self.c_tableInfo.setItem(rowIdx, colIdx, item)
def search(self):
self.c_tableInfo.setRowCount(0)
self.s_type = self.c_combType.currentData()
self.s_text = self.c_lineSearch.text()
if self.s_text.startswith('http'):
tmpType, tmpId = TIDAL_API.parseUrl(self.s_text)
if tmpType == Type.Null:
self.__info__('Url not support')
return
elif tmpType not in self.m_supportType:
self.__info__(f'Type[{tmpType.name}] not support')
return
class SettingView(QtWidgets.QWidget):
def __init__(self, ) -> None:
super().__init__()
self.initView()
tmpData = TIDAL_API.getTypeData(tmpId, tmpType)
if tmpData is None:
self.__info__('Url is wrong!')
def initView(self):
self.c_pathDownload = QtWidgets.QLineEdit()
self.c_pathAlbumFormat = QtWidgets.QLineEdit()
self.c_pathTrackFormat = QtWidgets.QLineEdit()
self.c_pathVideoFormat = QtWidgets.QLineEdit()
self.mainGrid = QtWidgets.QVBoxLayout(self)
self.mainGrid.addWidget(self.c_pathDownload)
self.mainGrid.addWidget(self.c_pathAlbumFormat)
self.mainGrid.addWidget(self.c_pathTrackFormat)
self.mainGrid.addWidget(self.c_pathVideoFormat)
class EmittingStream(QObject):
textWritten = pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
class MainView(QtWidgets.QWidget):
s_downloadEnd = pyqtSignal(str, bool, str)
def __init__(self, ) -> None:
super().__init__()
self.initView()
self.setMinimumSize(600, 620)
self.setWindowTitle("Tidal-dl")
def __info__(self, msg):
QtWidgets.QMessageBox.information(self, 'Info', msg, QtWidgets.QMessageBox.Yes)
def __output__(self, text):
cursor = self.c_printTextEdit.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.insertText(text)
self.c_printTextEdit.setTextCursor(cursor)
self.c_printTextEdit.ensureCursorVisible()
def initView(self):
self.c_lineSearch = QtWidgets.QLineEdit()
self.c_btnSearch = QtWidgets.QPushButton("Search")
self.c_btnDownload = QtWidgets.QPushButton("Download")
self.c_btnSetting = QtWidgets.QPushButton("Setting")
self.c_combType = QtWidgets.QComboBox()
self.c_combTQuality = QtWidgets.QComboBox()
self.c_combVQuality = QtWidgets.QComboBox()
self.c_widgetSetting = SettingView()
self.c_widgetSetting.hide()
# Supported types for search
self.m_supportType = [Type.Album, Type.Playlist, Type.Track, Type.Video, Type.Artist]
for item in self.m_supportType:
self.c_combType.addItem(item.name, item)
for item in AudioQuality:
self.c_combTQuality.addItem(item.name, item)
for item in VideoQuality:
self.c_combVQuality.addItem(item.name, item)
self.c_combTQuality.setCurrentText(SETTINGS.audioQuality.name)
self.c_combVQuality.setCurrentText(SETTINGS.videoQuality.name)
# init table
columnNames = ['#', 'Title', 'Artists', 'Quality']
self.c_tableInfo = QtWidgets.QTableWidget()
self.c_tableInfo.setColumnCount(len(columnNames))
self.c_tableInfo.setRowCount(0)
self.c_tableInfo.setShowGrid(False)
self.c_tableInfo.verticalHeader().setVisible(False)
self.c_tableInfo.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.c_tableInfo.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.c_tableInfo.horizontalHeader().setStretchLastSection(True)
self.c_tableInfo.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.ResizeToContents)
self.c_tableInfo.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.c_tableInfo.setFocusPolicy(Qt.NoFocus)
for index, name in enumerate(columnNames):
item = QtWidgets.QTableWidgetItem(name)
self.c_tableInfo.setHorizontalHeaderItem(index, item)
# print
self.c_printTextEdit = QtWidgets.QTextEdit()
self.c_printTextEdit.setReadOnly(True)
self.c_printTextEdit.setFixedHeight(150)
sys.stdout = EmittingStream(textWritten=self.__output__)
sys.stderr = EmittingStream(textWritten=self.__output__)
# layout
self.lineGrid = QtWidgets.QHBoxLayout()
self.lineGrid.addWidget(self.c_combType)
self.lineGrid.addWidget(self.c_lineSearch)
self.lineGrid.addWidget(self.c_btnSearch)
self.line2Grid = QtWidgets.QHBoxLayout()
self.line2Grid.addWidget(QtWidgets.QLabel("QUALITY:"))
self.line2Grid.addWidget(self.c_combTQuality)
self.line2Grid.addWidget(self.c_combVQuality)
self.line2Grid.addStretch(4)
# self.line2Grid.addWidget(self.c_btnSetting)
self.line2Grid.addWidget(self.c_btnDownload)
self.funcGrid = QtWidgets.QVBoxLayout()
self.funcGrid.addLayout(self.lineGrid)
self.funcGrid.addWidget(self.c_tableInfo)
self.funcGrid.addLayout(self.line2Grid)
self.funcGrid.addWidget(self.c_printTextEdit)
self.mainGrid = QtWidgets.QGridLayout(self)
self.mainGrid.addLayout(self.funcGrid, 0, 0)
self.mainGrid.addWidget(self.c_widgetSetting, 0, 0)
# connect
self.c_btnSearch.clicked.connect(self.search)
self.c_btnDownload.clicked.connect(self.download)
self.s_downloadEnd.connect(self.downloadEnd)
self.c_combTQuality.currentIndexChanged.connect(self.changeTQuality)
self.c_combVQuality.currentIndexChanged.connect(self.changeVQuality)
self.c_btnSetting.clicked.connect(self.showSettings)
def addItem(self, rowIdx: int, colIdx: int, text):
if isinstance(text, str):
item = QtWidgets.QTableWidgetItem(text)
self.c_tableInfo.setItem(rowIdx, colIdx, item)
def search(self):
self.c_tableInfo.setRowCount(0)
self.s_type = self.c_combType.currentData()
self.s_text = self.c_lineSearch.text()
if self.s_text.startswith('http'):
tmpType, tmpId = TIDAL_API.parseUrl(self.s_text)
if tmpType == Type.Null:
self.__info__('Url not support')
return
elif tmpType not in self.m_supportType:
self.__info__(f'Type[{tmpType.name}] not support')
return
tmpData = TIDAL_API.getTypeData(tmpId, tmpType)
if tmpData is None:
self.__info__('Url is wrong!')
return
self.s_type = tmpType
self.s_array = [tmpData]
self.s_result = None
self.c_combType.setCurrentText(tmpType.name)
else:
self.s_result = TIDAL_API.search(self.s_text, self.s_type)
self.s_array = TIDAL_API.getSearchResultItems(self.s_result, self.s_type)
if len(self.s_array) <= 0:
self.__info__('No result')
return
self.s_type = tmpType
self.s_array = [tmpData]
self.s_result = None
self.c_combType.setCurrentText(tmpType.name)
else:
self.s_result = TIDAL_API.search(self.s_text, self.s_type)
self.s_array = TIDAL_API.getSearchResultItems(self.s_result, self.s_type)
self.c_tableInfo.setRowCount(len(self.s_array))
for index, item in enumerate(self.s_array):
self.addItem(index, 0, str(index + 1))
if self.s_type in [Type.Album, Type.Track]:
self.addItem(index, 1, item.title)
self.addItem(index, 2, TIDAL_API.getArtistsName(item.artists))
self.addItem(index, 3, item.audioQuality)
elif self.s_type in [Type.Video]:
self.addItem(index, 1, item.title)
self.addItem(index, 2, TIDAL_API.getArtistsName(item.artists))
self.addItem(index, 3, item.quality)
elif self.s_type in [Type.Playlist]:
self.addItem(index, 1, item.title)
self.addItem(index, 2, '')
self.addItem(index, 3, '')
elif self.s_type in [Type.Artist]:
self.addItem(index, 1, item.name)
self.addItem(index, 2, '')
self.addItem(index, 3, '')
self.c_tableInfo.viewport().update()
def download(self):
index = self.c_tableInfo.currentIndex().row()
if index < 0:
self.__info__('Please select a row first.')
return
self.c_btnDownload.setEnabled(False)
item_to_download = ""
if isinstance(self.s_array[index], Artist):
item_to_download = self.s_array[index].name
else:
item_to_download = self.s_array[index].title
self.c_btnDownload.setText(f"Downloading [${item_to_download}]...")
def __thread_download__(model: MainView):
downloading_item = ""
try:
type = model.s_type
item = model.s_array[index]
start_type(type, item)
if isinstance(item, Artist):
downloading_item = item.name
else:
downloading_item = item.title
model.s_downloadEnd.emit(downloading_item, True, '')
except Exception as e:
model.s_downloadEnd.emit(downloading_item, False, str(e))
_thread.start_new_thread(__thread_download__, (self, ))
def downloadEnd(self, title, result, msg):
self.c_btnDownload.setEnabled(True)
self.c_btnDownload.setText(f"Download")
if result:
self.__info__(f'Download [{title}] finish')
else:
self.__info__(f'Download [{title}] failed:{msg}')
def checkLogin(self):
if not loginByConfig():
self.__info__('Login failed. Please log in using the command line first.')
if len(self.s_array) <= 0:
self.__info__('No result')
return
def changeTQuality(self, index):
SETTINGS.audioQuality = self.c_combTQuality.itemData(index)
SETTINGS.save()
def changeVQuality(self, index):
SETTINGS.videoQuality = self.c_combVQuality.itemData(index)
SETTINGS.save()
def showSettings(self):
self.c_widgetSetting.show()
def startGui():
aigpy.cmd.enableColor(False)
self.c_tableInfo.setRowCount(len(self.s_array))
for index, item in enumerate(self.s_array):
self.addItem(index, 0, str(index + 1))
if self.s_type in [Type.Album, Type.Track]:
self.addItem(index, 1, item.title)
self.addItem(index, 2, TIDAL_API.getArtistsName(item.artists))
self.addItem(index, 3, item.audioQuality)
elif self.s_type in [Type.Video]:
self.addItem(index, 1, item.title)
self.addItem(index, 2, TIDAL_API.getArtistsName(item.artists))
self.addItem(index, 3, item.quality)
elif self.s_type in [Type.Playlist]:
self.addItem(index, 1, item.title)
self.addItem(index, 2, '')
self.addItem(index, 3, '')
app = QtWidgets.QApplication(sys.argv)
apply_stylesheet(app, theme='dark_blue.xml')
def download(self):
index = self.c_tableInfo.currentIndex().row()
if index < 0:
self.__info__('Please select a row first.')
return
window = MainView()
window.show()
window.checkLogin()
self.c_btnDownload.setEnabled(False)
self.c_btnDownload.setText(f"Downloading [{self.s_array[index].title}]...")
def __thread_download__(model: MainView):
try:
type = model.s_type
item = model.s_array[index]
start_type(type, item)
model.s_downloadEnd.emit(item.title, True, '')
except Exception as e:
model.s_downloadEnd.emit(item.title, False, str(e))
_thread.start_new_thread(__thread_download__, (self, ))
def downloadEnd(self, title, result, msg):
self.c_btnDownload.setEnabled(True)
self.c_btnDownload.setText(f"Download")
if result:
self.__info__(f'Download [{title}] finish')
else:
self.__info__(f'Download [{title}] failed:{msg}')
def checkLogin(self):
if not loginByConfig():
self.__info__('Login failed. Please log in using the command line first.')
def startGui():
os.chdir(sys.path[0])
app = QtWidgets.QApplication(sys.argv)
apply_stylesheet(app, theme='dark_blue.xml')
window = MainView()
window.show()
window.checkLogin()
app.exec_()
app.exec_()
if __name__ == '__main__':
+12 -5
View File
@@ -30,17 +30,20 @@ class LangArabic(object):
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "خيار"
FUNCTION = "وظيفة"
@@ -65,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):"
@@ -78,16 +81,20 @@ class LangArabic(object):
CHANGE_ALBUMID_BEFORE_FOLDER = "اضف رقم التتبع قبل اسم مجلد الالبوم('0'-No,'1'-Yes):"
CHANGE_SAVE_COVERS = "حفظ صورة الالبوم('0'-No,'1'-Yes):"
CHANGE_LANGUAGE = "اختر لغة"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify):"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0'-not modify,'default'-to set default):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0'-not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
+15 -8
View File
@@ -30,29 +30,32 @@ class LangChinese(object):
SETTING_USE_PLAYLIST_FOLDER = "将歌单下载到歌单目录"
SETTING_MULITHREAD_DOWNLOAD = "多线程下载"
SETTING_ALBUM_FOLDER_FORMAT = "专辑目录格式"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "歌曲文件名格式"
SETTING_VIDEO_FILE_FORMAT = "视频文件格式"
SETTING_SHOW_PROGRESS = "显示进度条"
SETTING_SHOW_TRACKINFO = "显示歌曲信息"
SETTING_SAVE_ALBUMINFO = "保存AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "添加歌词"
SETTING_LYRICS_SERVER_PROXY = "歌词服务器代理"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_ADD_LRC_FILE = "保存歌词文件 (.lrc file)"
SETTING_PATH = "配置文件目录"
SETTING_APIKEY = "APIKey支持"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_ADD_TYPE_FOLDER = "添加类型文件夹"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "选项"
FUNCTION = "功能"
CHOICE_ENTER = "输入"
CHOICE_ENTER_URLID = "输入 'Url或ID':"
CHOICE_EXIT = "退出"
CHOICE_LOGIN = "检查 AccessToken"
CHOICE_LOGIN = "检查AccessToken"
CHOICE_SETTINGS = "配置"
CHOICE_SET_ACCESS_TOKEN = "设置AccessToken"
CHOICE_DOWNLOAD_BY_URL = "通过链接或ID下载"
CHOICE_LOGOUT = "注销"
CHOICE_APIKEY = "Select APIKey"
CHOICE_APIKEY = "选择APIKey"
PRINT_ERR = "[错误]"
PRINT_INFO = "[提示]"
@@ -65,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'-是):"
@@ -79,15 +82,19 @@ class LangChinese(object):
CHANGE_SAVE_COVERS = "保存封面('0'-不,'1'-是):"
CHANGE_LANGUAGE = "选择语言"
CHANGE_ALBUM_FOLDER_FORMAT = "专辑目录格式('0' 不修改):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "歌曲文件名格式('0' 不修改):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "视频文件名格式('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "显示进度条('0'-不,'1'-是):"
CHANGE_SHOW_TRACKINFO = "显示歌曲信息('0'-否,'1'-是):"
CHANGE_SAVE_ALBUM_INFO = "保存AlbumInfo.txt('0'-否,'1'-是):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "添加歌词('0'-否,'1'-是):"
CHANGE_LYRICS_SERVER_PROXY = "歌词服务器代理('0' 不修改):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-否,'1'-是):"
CHANGE_ADD_LRC_FILE = "保存歌词文件 ('0'-否,'1'-是):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "多线程下载('0'-否,'1'-是):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "开始启动登录..."
+12 -5
View File
@@ -30,17 +30,20 @@ class LangCroatian(object):
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "ODABIR"
FUNCTION = "FUNKCIJA"
@@ -65,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):"
@@ -78,16 +81,20 @@ class LangCroatian(object):
CHANGE_ALBUMID_BEFORE_FOLDER = "Dodaj ID oznaku prije imena albuma u datoteci('0'-Ne,'1'-Da):"
CHANGE_SAVE_COVERS = "Spremi ilustracije albuma('0'-Ne,'1'-Da):"
CHANGE_LANGUAGE = "Odaberi jezik"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify):"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0'-not modify,'default'-to set default):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0'-not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
+73 -66
View File
@@ -2,10 +2,10 @@
# -*- encoding: utf-8 -*-
'''
@File : czech.py
@Time : 2020/08/20
@Author : Tomikk
@Version : 1.0
@Contact : justtomikk@gmail.com
@Time : 2022/11/13
@Author : Tomikk & Sweder
@Version : 1.2
@Contact : justtomikk@gmail.com & djsweder@gmail.com
@Desc :
'''
@@ -15,46 +15,49 @@ class LangCzech(object):
VALUE = "Hodnota"
SETTING_DOWNLOAD_PATH = "Umístění staženého souboru"
SETTING_ONLY_M4A = "Konvertovat mp4 na m4a"
SETTING_ADD_EXPLICIT_TAG = "Přidat explicitní značku"
SETTING_ADD_HYPHEN = "Používat pomlčky místo mezer"
SETTING_ADD_EXPLICIT_TAG = "Přidat označení explicity"
SETTING_ADD_HYPHEN = "Místo mezer použít pomlčky"
SETTING_ADD_YEAR = "Přidat rok před jméno složky"
SETTING_USE_TRACK_NUM = "Přidat číslo skladby"
SETTING_AUDIO_QUALITY = "Kvalita hudby"
SETTING_VIDEO_QUALITY = "Kvalita videa"
SETTING_CHECK_EXIST = "Zkontrolovat jestli soubor již existuje"
SETTING_CHECK_EXIST = "Zkontrolovat existenci souboru"
SETTING_ARTIST_BEFORE_TITLE = "Jméno interpreta před jménem skladby"
SETTING_ALBUMID_BEFORE_FOLDER = "Id před složkou alba"
SETTING_INCLUDE_EP = "Zahrnout single&ep"
SETTING_INCLUDE_EP = "Zahrnout singly & EP"
SETTING_SAVE_COVERS = "Uložit obal alba"
SETTING_LANGUAGE = "Změna jazyka"
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_USE_PLAYLIST_FOLDER = "Používat složku playlistu"
SETTING_MULITHREAD_DOWNLOAD = "Stahování více vlákny"
SETTING_ALBUM_FOLDER_FORMAT = "Formát názvu složky alba"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Formát názvu souboru skladby"
SETTING_VIDEO_FILE_FORMAT = "Formát názvu souboru videa"
SETTING_SHOW_PROGRESS = "Zobrazit indikátor stavu stahování"
SETTING_SHOW_TRACKINFO = "Zobrazit informace o skladbě"
SETTING_SAVE_ALBUMINFO = "Uložit soubor AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Přidat texty skladeb"
SETTING_LYRICS_SERVER_PROXY = "Server proxy pro texty skladeb"
SETTING_ADD_LRC_FILE = "Uložit slova skladby s časováním (soubor .lrc)"
SETTING_PATH = "Cesta k souboru s nastavením"
SETTING_APIKEY = "APIKey podporuje"
SETTING_ADD_TYPE_FOLDER = "Složky dle typu obsahu"
SETTING_DOWNLOAD_DELAY = "Stahovat s časovou prodlevou"
CHOICE = "Výběr"
FUNCTION = "Funkce"
CHOICE_ENTER = "Enter"
CHOICE_ENTER = "Zvolit"
CHOICE_ENTER_URLID = "Vložit 'Url/ID':"
CHOICE_EXIT = "Ukončit"
CHOICE_LOGIN = "Check AccessToken"
CHOICE_LOGIN = "Zkontrolovat přístupový token"
CHOICE_SETTINGS = "Nastavení"
CHOICE_SET_ACCESS_TOKEN = "Nastavit přístupový token"
CHOICE_DOWNLOAD_BY_URL = "Stáhnout buď url nebo id"
CHOICE_LOGOUT = "Logout"
CHOICE_APIKEY = "Select APIKey"
CHOICE_DOWNLOAD_BY_URL = "Stáhnout buď dle URL nebo ID"
CHOICE_LOGOUT = "Odhlásit"
CHOICE_APIKEY = "Vybrat APIKey"
PRINT_ERR = "[Error]"
PRINT_ERR = "[Chyba]"
PRINT_INFO = "[Info]"
PRINT_SUCCESS = "[Staženo]"
@@ -63,56 +66,60 @@ class LangCzech(object):
# PRINT_USERNAME = "přihlašovací jméno:"
# PRINT_PASSWORD = "heslo"
CHANGE_START_SETTINGS = "Start settings('0'-Zpět,'1'-Ano):"
CHANGE_DOWNLOAD_PATH = "Cesta stažení('0' not modify):"
CHANGE_AUDIO_QUALITY = "Kvalita hudby('0'-Normal,'1'-High,'2'-HiFi,'3'-Master):"
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 explicitní značku k souborům('0'-Ne,'1'-Ano):"
CHANGE_ADD_HYPHEN = "V názvech souborů používat místo mezer pomlčky('0'-Ne,'1'-Ano):"
CHANGE_ADD_YEAR = "Přidat rok vydání do názvu složky('0'-Ne,'1'-Ano):"
CHANGE_USE_TRACK_NUM = "Přidat číslo skladby před název skladby('0'-Ne,'1'-Ano):"
CHANGE_CHECK_EXIST = "Zkontrolovat existujicí soubor před stažením('0'-Ne,'1'-Ano):"
CHANGE_ARTIST_BEFORE_TITLE = "Přidat jméno interpreta před názvem skladby('0'-Ne,'1'-Ano):"
CHANGE_INCLUDE_EP = "Při stahování alba interpreta zahrnout singly a EP('0'-Ne,'1'-Ano):"
CHANGE_ALBUMID_BEFORE_FOLDER = "Přidat ID před složku do alba('0'-Ne,'1'-Ano):"
CHANGE_SAVE_COVERS = "Uložit obaly alb('0'-Ne,'1'-Ano):"
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,'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):"
CHANGE_ADD_HYPHEN = "V názvech souborů používat místo mezer pomlčky ('0'-Ne,'1'-Ano):"
CHANGE_ADD_YEAR = "Přidat rok vydání do názvu složky ('0'-Ne,'1'-Ano):"
CHANGE_USE_TRACK_NUM = "Přidat číslo skladby před název skladby ('0'-Ne,'1'-Ano):"
CHANGE_CHECK_EXIST = "Zkontrolovat existenci souboru před stažením ('0'-Ne,'1'-Ano):"
CHANGE_ARTIST_BEFORE_TITLE = "Přidat jméno interpreta před název skladby ('0'-Ne,'1'-Ano):"
CHANGE_INCLUDE_EP = "Při stahování alb interpreta zahrnout singly a EP ('0'-Ne,'1'-Ano):"
CHANGE_ALBUMID_BEFORE_FOLDER = "Přidat ID před název složky s albem ('0'-Ne,'1'-Ano):"
CHANGE_SAVE_COVERS = "Uložit obaly alb ('0'-Ne,'1'-Ano):"
CHANGE_LANGUAGE = "Zvolit jazyk"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_ALBUM_FOLDER_FORMAT = "Formát názvu složky alba ('0' beze změny):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Formát názvu složky skladny ('0' beze změny):"
CHANGE_VIDEO_FILE_FORMAT = "Formát názvu souboru videa ('0'-beze změny,'default'-pro nastavení výchozího názvu):"
CHANGE_SHOW_PROGRESS = "Zobrazit indikátor stavu stahování ('0'-Ne,'1'-Ano):"
CHANGE_SHOW_TRACKINFO = "Zobrazit info o skladbě ('0'-Ne,'1'-Ano):"
CHANGE_SAVE_ALBUM_INFO = "Uložit soubor AlbumInfo.txt ('0'-Ne,'1'-Ano):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Přidat texty skladeb ('0'-Ne,'1'-Ano):"
CHANGE_LYRICS_SERVER_PROXY = "Server proxy pro texty skladeb ('0' beze změny):"
CHANGE_ADD_LRC_FILE = "Uložit slova skladby s časováním do souboru .lrc) ('0'-Ne,'1'-Ano):"
CHANGE_ADD_TYPE_FOLDER = "Ukládat do složek dle typu obsahu, např. Album/Video/Playlist ('0'-Ne,'1'-Ano):"
CHANGE_MULITHREAD_DOWNLOAD = "Více vláken pro stahování ('0'-Ne,'1'-Ano):"
CHANGE_USE_DOWNLOAD_DELAY = "Stahovat s časovou prodlevou('0'-Ne,'1'-Ano):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
AUTH_LOGIN_CODE = "Your login code is {}"
AUTH_NEXT_STEP = "Go to {} within the next {} to complete setup."
AUTH_WAITING = "Waiting for authorization..."
AUTH_TIMEOUT = "Operation timed out."
AUTH_START_LOGIN = "Spouštění přihlašovacího procesu..."
AUTH_LOGIN_CODE = "Váš přihlašovací kód je {}"
AUTH_NEXT_STEP = "K dokončení nastavení přejděte na stránku {} během následujích {}."
AUTH_WAITING = "Čeká se na autorizaci..."
AUTH_TIMEOUT = "Vypršel časový limit procesu."
MSG_VALID_ACCESSTOKEN = "AccessToken good for {}."
MSG_INVALID_ACCESSTOKEN = "Expired AccessToken. Attempting to refresh it."
MSG_VALID_ACCESSTOKEN = "Přístupový token fukční pro {}."
MSG_INVALID_ACCESSTOKEN = "Platnost přístupového tokenu vypršela. Pokouším se o obnovení."
MSG_PATH_ERR = "Cesta neexistuje!"
MSG_INPUT_ERR = "Chyba vstupu!"
MSG_INPUT_ERR = "Chyba zadání!"
MODEL_ALBUM_PROPERTY = "ALBUM-PROPERTY"
MODEL_TRACK_PROPERTY = "TRACK-PROPERTY"
MODEL_VIDEO_PROPERTY = "VIDEO-PROPERTY"
MODEL_ARTIST_PROPERTY = "ARTIST-PROPERTY"
MODEL_PLAYLIST_PROPERTY = "PLAYLIST-PROPERTY"
MODEL_ALBUM_PROPERTY = "ALBUM-VLASTNOSTI"
MODEL_TRACK_PROPERTY = "SKLADBA-VLASTNOSTI"
MODEL_VIDEO_PROPERTY = "VIDEO-VLASTNOSTI"
MODEL_ARTIST_PROPERTY = "INTERPRET-VLASTNOSTI"
MODEL_PLAYLIST_PROPERTY = "PLAYLIST-VLASTNOSTI"
MODEL_TITLE = 'Název skladby'
MODEL_TRACK_NUMBER = 'Číslo skladby'
MODEL_VIDEO_NUMBER = 'Číslo videa'
MODEL_RELEASE_DATE = 'Datum vydání'
MODEL_VERSION = 'Verze'
MODEL_EXPLICIT = 'Explicit'
MODEL_EXPLICIT = 'Explicitní'
MODEL_ALBUM = 'Album'
MODEL_ID = 'ID'
MODEL_NAME = 'Jméno'
+10 -3
View File
@@ -30,17 +30,20 @@ class LangDanish(object):
SETTING_USE_PLAYLIST_FOLDER = "Brug afspilningsmappen"
SETTING_MULITHREAD_DOWNLOAD = "Flertråede download"
SETTING_ALBUM_FOLDER_FORMAT = "Albummappens format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Spillelistemappens format"
SETTING_TRACK_FILE_FORMAT = "Musiknummerets filformat"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Vis fremskridt"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "VALG"
FUNCTION = "FUNKTION"
@@ -65,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):"
@@ -79,15 +82,19 @@ class LangDanish(object):
CHANGE_SAVE_COVERS = "Gem omslag('0'-Nej,'1'-Ja):"
CHANGE_LANGUAGE = "Vælg sprog"
CHANGE_ALBUM_FOLDER_FORMAT = "Albummappeformat('0' Ændrer ikke, 'default' for at indstille som standard):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Spillelistemappeformat('0' Ændrer ikke, 'default' for at indstille som standard):"
CHANGE_TRACK_FILE_FORMAT = "Musiknummerets filformat('0' Ændrer ikke, 'default' for at indstille som standard):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Vis fremskridt('0'-Nej,'1'-Ja):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starter login-processen."
+12 -5
View File
@@ -30,17 +30,20 @@ class LangDutch(object):
SETTING_USE_PLAYLIST_FOLDER = "Afspeellijst gebruiken"
SETTING_MULITHREAD_DOWNLOAD = "Downloaden met meerdere threads"
SETTING_ALBUM_FOLDER_FORMAT = "Indeling albummap"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Bestandsindeling bijhouden"
SETTING_VIDEO_FILE_FORMAT = "Videobestandsindeling"
SETTING_SHOW_PROGRESS = "Toon voortgang"
SETTING_SHOW_TRACKINFO = "Toon trackinfo"
SETTING_SAVE_ALBUMINFO = "AlbumInfo.txt opslaan"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Songtekst toevoegen"
SETTING_LYRICS_SERVER_PROXY = "Tekst server proxy"
SETTINGS_ADD_LRC_FILE = "Getimede songteksten opslaan (.lrc-bestand)"
SETTING_ADD_LRC_FILE = "Getimede songteksten opslaan (.lrc-bestand)"
SETTING_PATH = "Instellingen pad"
SETTING_APIKEY = "APIKey-ondersteuning"
SETTING_ADD_TYPE_FOLDER = "Typemap toevoegen"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "KEUZE"
FUNCTION = "FUNCTIE"
@@ -65,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):"
@@ -78,16 +81,20 @@ class LangDutch(object):
CHANGE_ALBUMID_BEFORE_FOLDER = "ID toevoegen voor albummap ('0'-Nee,'1'-Ja):"
CHANGE_SAVE_COVERS = "Covers opslaan('0'-Nee,'1'-Ja):"
CHANGE_LANGUAGE = "Selecteer taal"
CHANGE_ALBUM_FOLDER_FORMAT = "Albummapindeling ('0'-niet wijzigen,'standaard'-om standaard in te stellen):"
CHANGE_TRACK_FILE_FORMAT = "Bestandsformaat bijhouden ('0'-niet wijzigen,'standaard'-om standaard in te stellen):"
CHANGE_VIDEO_FILE_FORMAT = "Videobestandsindeling('0'-niet wijzigen,'standaard'-om standaard in te stellen):"
CHANGE_ALBUM_FOLDER_FORMAT = "Albummapindeling ('0'-niet wijzigen,'default'-om standaard in te stellen):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Afspeellijstmapindeling format('0'-niet wijzigen,'default'-om standaard in te stellen):"
CHANGE_TRACK_FILE_FORMAT = "Bestandsformaat bijhouden ('0'-niet wijzigen,'default'-om standaard in te stellen):"
CHANGE_VIDEO_FILE_FORMAT = "Videobestandsindeling('0'-niet wijzigen,'default'-om standaard in te stellen):"
CHANGE_SHOW_PROGRESS = "Voortgang weergeven('0'-Nee,'1'-Ja):"
CHANGE_SHOW_TRACKINFO = "Toon trackinfo('0'-Nee,'1'-Ja):"
CHANGE_SAVE_ALBUM_INFO = "Bewaar AlbumInfo.txt('0'-Nee,'1'-Ja):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Songtekst toevoegen('0'-Nee,'1'-Ja):"
CHANGE_LYRICS_SERVER_PROXY = "Songtekst proxyserver('0'-niet wijzigen):"
CHANGE_ADD_LRC_FILE = "Sla getimede songtekst .lrc-bestand op ('0'-Nee,'1'-Ja):"
CHANGE_ADD_TYPE_FOLDER = "Type-map toevoegen, bijv. Album/Video/Playlist('0'-Nee,'1'-Ja):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Inlogproces starten..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangEnglish(object):
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "CHOICE"
FUNCTION = "FUNCTION"
@@ -65,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):"
@@ -79,15 +82,19 @@ class LangEnglish(object):
CHANGE_SAVE_COVERS = "Save covers('0'-No,'1'-Yes):"
CHANGE_LANGUAGE = "Select language"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0'-not modify,'default'-to set default):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0'-not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
+12 -5
View File
@@ -30,17 +30,20 @@ class LangFilipino(object):
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "PAGPIPILIAN"
FUNCTION = "SILBI"
@@ -65,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):"
@@ -78,16 +81,20 @@ class LangFilipino(object):
CHANGE_ALBUMID_BEFORE_FOLDER = "Lagyan ng id bago ang album folder('0'-Hindi,'1'-Oo):"
CHANGE_SAVE_COVERS = "I-save ang mga covers('0'-Hindi,'1'-Oo):"
CHANGE_LANGUAGE = "Pumili ng lenggwahe"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify):"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify,'default'-to set default):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
+32 -25
View File
@@ -30,29 +30,32 @@ class LangFrench(object):
SETTING_USE_PLAYLIST_FOLDER = "Utiliser dossier de playlist"
SETTING_MULITHREAD_DOWNLOAD = "Téléchargement multithread"
SETTING_ALBUM_FOLDER_FORMAT = "Format du dossier d'album"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Format du fichier de tracklist"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Afficher la Progression"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_SHOW_TRACKINFO = "Afficher les information de la musique"
SETTING_SAVE_ALBUMINFO = "Enregistrer AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Inclure les paroles"
SETTING_LYRICS_SERVER_PROXY = "Proxy du serveur de paroles"
SETTING_ADD_LRC_FILE = "Enregistrer les paroles synchronisées (fichier .lrc)"
SETTING_PATH = "Emplacement des paramètres"
SETTING_APIKEY = "Prise en charge de la clé API"
SETTING_ADD_TYPE_FOLDER = "Ajouter un dossier de type"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "CHOIX"
FUNCTION = "FONCTION"
CHOICE_ENTER = "Saisir"
CHOICE_ENTER_URLID = "Saisir 'Url/ID':"
CHOICE_EXIT = "Quitter"
CHOICE_LOGIN = "Check AccessToken"
CHOICE_LOGIN = "Vérifier le token d'accès"
CHOICE_SETTINGS = "Réglages"
CHOICE_SET_ACCESS_TOKEN = "Définir le jeton d'accès"
CHOICE_DOWNLOAD_BY_URL = "Téléchargement par url ou id"
CHOICE_LOGOUT = "Logout"
CHOICE_APIKEY = "Select APIKey"
CHOICE_LOGOUT = "Déconnexion"
CHOICE_APIKEY = "Choisir la clé d'API"
PRINT_ERR = "[ERR]"
PRINT_INFO = "[INFO]"
@@ -65,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):"
@@ -79,25 +82,29 @@ class LangFrench(object):
CHANGE_SAVE_COVERS = "Sauvegarder les couvertures('0'-Non,'1'-Oui):"
CHANGE_LANGUAGE = "Sélectionnez une langue"
CHANGE_ALBUM_FOLDER_FORMAT = "Format du dossier d'album('0' ne pas modifier):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Format du fichier de tracklist('0' ne pas modifier):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Afficher la progression('0'-Non,'1'-Oui):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Afficher les information de la piste ('0'-Non,'1'-Oui):"
CHANGE_SAVE_ALBUM_INFO = "Enregistrer AlbumInfo.txt('0'-Non,'1'-Oui):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Ajouter les paroles ('0'-Non,'1'-Oui):"
CHANGE_LYRICS_SERVER_PROXY = "Proxy du serveur de paroles('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Enregistrer les paroles synchronisées (fichier.lrc) ('0'-Non,'1'-Oui):"
CHANGE_ADD_TYPE_FOLDER = "Ajouter un dossier de type,Ex: Album/Video/Playlist('0'-Non,'1'-Oui):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-Non,'1'-Oui):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
AUTH_LOGIN_CODE = "Your login code is {}"
AUTH_NEXT_STEP = "Go to {} within the next {} to complete setup."
AUTH_WAITING = "Waiting for authorization..."
AUTH_TIMEOUT = "Operation timed out."
AUTH_START_LOGIN = "Démarrage du processus de connexion..."
AUTH_LOGIN_CODE = "Votre code de connection est le suivant: {}"
AUTH_NEXT_STEP = "Allez à {} avant {} pour finir la configuration."
AUTH_WAITING = "En attente d'autorisation..."
AUTH_TIMEOUT = "Temps écoulé."
MSG_VALID_ACCESSTOKEN = "AccessToken good for {}."
MSG_INVALID_ACCESSTOKEN = "Expired AccessToken. Attempting to refresh it."
MSG_VALID_ACCESSTOKEN = "Token d'accès valable {}."
MSG_INVALID_ACCESSTOKEN = "Token d'accès expiré. Tentative de renouvellement automatique."
MSG_PATH_ERR = "Erreur du chemin d'accès"
MSG_INPUT_ERR = "Erreur de saisie !"
+48 -41
View File
@@ -2,9 +2,9 @@
# -*- encoding: utf-8 -*-
'''
@File : german.py
@Time : 2021/01/04
@Authors : Sematre, MineClashTV
@Version : 1.0
@Time : 2022/11/8
@Authors : Sematre, MineClashTV, Click1701
@Version : 1.1
@Contact :
@Desc :
'''
@@ -24,23 +24,26 @@ class LangGerman(object):
SETTING_CHECK_EXIST = "Existenz überprüfen"
SETTING_ARTIST_BEFORE_TITLE = "Künstlername vor Songtitel"
SETTING_ALBUMID_BEFORE_FOLDER = "ID vor Album-Ordner"
SETTING_INCLUDE_EP = "Einschließlich single&ep"
SETTING_INCLUDE_EP = "Singles & EPs einschließen"
SETTING_SAVE_COVERS = "Cover speichern"
SETTING_LANGUAGE = "Sprache"
SETTING_USE_PLAYLIST_FOLDER = "Playlist-Ordner verwenden"
SETTING_MULITHREAD_DOWNLOAD = "Multi-Thread-Download"
SETTING_MULITHREAD_DOWNLOAD = "Multi-Thread Download"
SETTING_ALBUM_FOLDER_FORMAT = "Album-Ordnerformat"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist-Ordnerformat"
SETTING_TRACK_FILE_FORMAT = "Track-Dateiformat"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_VIDEO_FILE_FORMAT = "Video-Dateiformat"
SETTING_SHOW_PROGRESS = "Fortschritt anzeigen"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_SHOW_TRACKINFO = "Titelinformationen anzeigen"
SETTING_SAVE_ALBUMINFO = "AlbumInfo.txt speichern"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Songtexte hinzufügen"
SETTING_LYRICS_SERVER_PROXY = "Songtext Proxy-Server"
SETTING_ADD_LRC_FILE = "Songtext mit Zeitcode speichern (.lrc Datei)"
SETTING_PATH = "Speicherort der Einstellungen"
SETTING_APIKEY = "APIKey Unterstützung"
SETTING_ADD_TYPE_FOLDER = "Unterordner für jede Kategorie erstellen"
SETTING_DOWNLOAD_DELAY = "Downloads zeitverzögert starten"
CHOICE = "AUSWAHL"
FUNCTION = "FUNKTION"
@@ -50,9 +53,9 @@ class LangGerman(object):
CHOICE_LOGIN = "AccessToken überprüfen"
CHOICE_SETTINGS = "Einstellungen"
CHOICE_SET_ACCESS_TOKEN = "AccessToken setzen"
CHOICE_DOWNLOAD_BY_URL = "Herunterladen per URL oder ID"
CHOICE_LOGOUT = "Logout"
CHOICE_APIKEY = "Select APIKey"
CHOICE_DOWNLOAD_BY_URL = "Download per URL oder ID"
CHOICE_LOGOUT = "Ausloggen"
CHOICE_APIKEY = "APIKey Auswahl"
PRINT_ERR = "[FEHLER]"
PRINT_INFO = "[INFO]"
@@ -63,41 +66,45 @@ class LangGerman(object):
# PRINT_USERNAME = "Benutzername:"
# PRINT_PASSWORD = "Passwort:"
CHANGE_START_SETTINGS = "Einstellungen starten ('0'-Zurück,'1'-Ja):"
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):"
CHANGE_ADD_HYPHEN = "Verwende Bindestriche statt Leerzeichen im Dateinamen ('0'-Nein,'1'-Ja):"
CHANGE_ADD_YEAR = "Jahr zu Album-Ordnernamen hinzufügen ('0'-Nein,'1'-Ja):"
CHANGE_USE_TRACK_NUM = "Titelnummer vor Dateinamen hinzufügen ('0'-Nein,'1'-Ja):"
CHANGE_CHECK_EXIST = "Vor dem Download überprüfen, ob die Datei existiert ('0'-Nein,'1'-Ja):"
CHANGE_ARTIST_BEFORE_TITLE = "Künstlername vor den Songtitel hinzufügen ('0'-Nein,'1'-Ja):"
CHANGE_INCLUDE_EP = "Singles und EPs beim Download von Alben eines Künstlers einbeziehen ('0'-Nein,'1'-Ja):"
CHANGE_ALBUMID_BEFORE_FOLDER = "ID vor Album-Ordner hinzufügen ('0'-Nein,'1'-Ja):"
CHANGE_SAVE_COVERS = "Cover speichern ('0'-Nein,'1'-Ja):"
CHANGE_ONLYM4A = "mp4 in m4a konvertieren ('0'-Nein, '1'-Ja):"
CHANGE_ADD_EXPLICIT_TAG = "Explicit Tag zum Dateiname hinzufügen ('0'-Nein, '1'-Ja):"
CHANGE_ADD_HYPHEN = "Im Dateinamen Bindestriche statt Leerzeichen verwenden ('0'-Nein, '1'-Ja):"
CHANGE_ADD_YEAR = "Jahr zu Album-Ordnernamen hinzufügen ('0'-Nein, '1'-Ja):"
CHANGE_USE_TRACK_NUM = "Titelnummer vor Dateinamen hinzufügen ('0'-Nein, '1'-Ja):"
CHANGE_CHECK_EXIST = "Vor dem Download überprüfen, ob die Datei existiert ('0'-Nein, '1'-Ja):"
CHANGE_ARTIST_BEFORE_TITLE = "Künstlername vor den Songtitel hinzufügen ('0'-Nein, '1'-Ja):"
CHANGE_INCLUDE_EP = "Singles und EPs beim Download von Alben eines Künstlers einbeziehen ('0'-Nein, '1'-Ja):"
CHANGE_ALBUMID_BEFORE_FOLDER = "ID vor Album-Ordner hinzufügen ('0'-Nein, '1'-Ja):"
CHANGE_SAVE_COVERS = "Cover speichern ('0'-Nein, '1'-Ja):"
CHANGE_LANGUAGE = "Sprache auswählen"
CHANGE_ALBUM_FOLDER_FORMAT = "Album-Ordnerformat('0' überspringen):"
CHANGE_TRACK_FILE_FORMAT = "Track-Dateiformat('0' überspringen):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Fortschritt anzeigen('0'-Nein,'1'-Ja):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_ALBUM_FOLDER_FORMAT = "Album-Ordnerformat ('0' überspringen):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist Ordner-Format ('0'-nicht ändern, 'default'-für Standard):"
CHANGE_TRACK_FILE_FORMAT = "Track-Dateiformat ('0' überspringen):"
CHANGE_VIDEO_FILE_FORMAT = "Video-Dateiformat ('0'-nicht ändern, 'default'-für Standard):"
CHANGE_SHOW_PROGRESS = "Fortschritt anzeigen ('0'-Nein, '1'-Ja):"
CHANGE_SHOW_TRACKINFO = "Song-Informationen anzeigen ('0'-Nein, '1'-Ja):"
CHANGE_SAVE_ALBUM_INFO = "AlbumInfo.txt speichern ('0'-Nein, '1'-Ja):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Songtexte hinzufügen ('0'-No, '1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Songtext Proxy-Server ('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Songtexte mit Zeitcode speichern (.lrc Datei) ('0'-Nein, '1'-Ja):"
CHANGE_ADD_TYPE_FOLDER = "Unterordner für jede Kategorie erstellen, Z.B. Album/Video/Playlist('0'-Nein, '1'-Ja):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi-Thread Download('0'-Nein, '1'-Ja):"
CHANGE_USE_DOWNLOAD_DELAY = "Downloads zeitverzögert starten ('0'-nein, '1'-ja):"
# {} are required in these strings
AUTH_START_LOGIN = "Starte Loginprozess..."
AUTH_LOGIN_CODE = "Dein Logincode ist {}"
AUTH_NEXT_STEP = "Gehe auf {} in den nächsten {} um das Setup abzuschließen."
AUTH_WAITING = "Auf Autorisierung warten..."
AUTH_WAITING = "Warte auf Autorisierung..."
AUTH_TIMEOUT = "Zeitüberschreitung der Operation."
MSG_VALID_ACCESSTOKEN = "AccessToken gültig für {}."
MSG_INVALID_ACCESSTOKEN = "AccessToken abgelaufen. Versuche zu erneuern."
MSG_INVALID_ACCESSTOKEN = "AccessToken abgelaufen. Er muss erneuert werden."
MSG_PATH_ERR = "Ungültiger Pfad!"
MSG_INPUT_ERR = "Eingabefehler!"
+25 -18
View File
@@ -2,9 +2,9 @@
# -*- encoding: utf-8 -*-
'''
@File : hungarian.py
@Time : 2022/02/10
@Time : 2022/08/01
@Author : Shanahan
@Version : 1.1
@Version : 1.2
@Contact :
@Desc :
'''
@@ -30,17 +30,20 @@ class LangHungarian(object):
SETTING_USE_PLAYLIST_FOLDER = "Lejátszási lista mappa használata"
SETTING_MULITHREAD_DOWNLOAD = "Többszálú letöltés"
SETTING_ALBUM_FOLDER_FORMAT = "Album mappa formátum"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track fájlformátum"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_VIDEO_FILE_FORMAT = "Videó fájlformátum"
SETTING_SHOW_PROGRESS = "Haladás megjelenítése"
SETTING_SHOW_TRACKINFO = "Track infók megjelenítése"
SETTING_SAVE_ALBUMINFO = "AlbumInfo.txt mentése"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Dalszöveg hozzáadása"
SETTING_LYRICS_SERVER_PROXY = "Dalszöveg kiszolgáló proxy"
SETTING_ADD_LRC_FILE = "Dalszövegek mentése (.lrc fájl)"
SETTING_PATH = "Beállítási útvonal"
SETTINGS_ADD_LRC_FILE = "Dalszövegek mentése (.lrc fájl)"
SETTING_APIKEY = "APIKey támogatás"
SETTING_ADD_TYPE_FOLDER = "Mappa típus hozzáadása"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "VÁLASZTÁS"
FUNCTION = "FUNKCIÓ"
@@ -61,11 +64,11 @@ class LangHungarian(object):
PRINT_ENTER_CHOICE = "Válasszon:"
PRINT_LATEST_VERSION = "Legújabb verzió:"
# PRINT_USERNAME = "felhasználónév:"
# PRINT_PASSWORD = "jelszó
# PRINT_PASSWORD = "jelszó:"
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):"
@@ -74,20 +77,24 @@ class LangHungarian(object):
CHANGE_USE_TRACK_NUM = "Track szám hozzáadása a fájlnevek előtt('0'-Nem,'1'-Igen):"
CHANGE_CHECK_EXIST = "Létező fájl ellenőrzése letöltés előtt('0'-Nem,'1'-Igen):"
CHANGE_ARTIST_BEFORE_TITLE = "Előadó hozzáadása a szám címe előtt('0'-Nem,'1'-Igen):"
CHANGE_INCLUDE_EP = "A kislemezek és EP-k letöltése('0'-nem, '1'-igen):"
CHANGE_INCLUDE_EP = "A kislemezek és EP-k letöltése('0'-Nem, '1'-Igen):"
CHANGE_ALBUMID_BEFORE_FOLDER = "Azonosító (ID) az album mappa előtt('0'-Nem,'1'-Igen):"
CHANGE_SAVE_COVERS = "Borító mentése('0'-nem, '1'-igen):"
CHANGE_SAVE_COVERS = "Borító mentése('0'-Nem, '1'-Igen):"
CHANGE_LANGUAGE = "Nyelv kiválasztása"
CHANGE_ALBUM_FOLDER_FORMAT = "Album mappa formátum('0' nincs módosítás,'default' az alapértelmezett beállításhoz):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track fájl neve('0' nincs módosítás,'default' az alapértelmezett beállításhoz):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Haladás megjelenítése('0'-nem, '1'-igen):"
CHANGE_SHOW_TRACKINFO = "Track infók megjelenítése('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "AlbumInfo.txt mentése('0'-nem, '1'-igen):"
CHANGE_ADD_LYRICS = "Dalszöveg hozzáadása('0'-nem,'1'-igen):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-nincs módosítás,'default' az alapértelmezett beállításhoz):"
CHANGE_SHOW_PROGRESS = "Haladás megjelenítése('0'-Nem, '1'-Igen):"
CHANGE_SHOW_TRACKINFO = "Track infók megjelenítése('0'-Nem,'1'-Igen):"
CHANGE_SAVE_ALBUM_INFO = "AlbumInfo.txt mentése('0'-Nem, '1'-Igen):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Dalszöveg hozzáadása('0'-Nem,'1'-Igen):"
CHANGE_LYRICS_SERVER_PROXY = "Dalszöveg kiszolgáló proxy('0' nincs módosítás):"
CHANGE_ADD_LRC_FILE = "Dalszöveg mentése időbélyeggel .lrc fájl('0'-Nem,'1'-Igen):"
CHANGE_ADD_TYPE_FOLDER = "Mappa típus hozzáadása, pl. Album/Video/Playlist('0'-Nem,'1'-Igen):"
CHANGE_MULITHREAD_DOWNLOAD = "Többszálas letöltés('0'-Nem,'1'-Igen):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Bejelentkezési folyamat elindítása..."
@@ -101,11 +108,11 @@ class LangHungarian(object):
MSG_PATH_ERR = "Az útvonal hibás!"
MSG_INPUT_ERR = "Beviteli hiba!"
MODEL_ALBUM_PROPERTY = "ALBUM-TULAJDONSÁG"
MODEL_TRACK_PROPERTY = "TRACK-TULAJDONSÁG"
MODEL_VIDEO_PROPERTY = "VIDEO-TULAJDONSÁG"
MODEL_ARTIST_PROPERTY = "ELŐADÓ-TULAJDONSÁG"
MODEL_PLAYLIST_PROPERTY = "LEJÁTSZÁSI LISTA-TULAJDONSÁG"
MODEL_ALBUM_PROPERTY = "ALBUM-INFÓ"
MODEL_TRACK_PROPERTY = "TRACK-INFÓ"
MODEL_VIDEO_PROPERTY = "VIDEO-INFÓ"
MODEL_ARTIST_PROPERTY = "ELŐADÓ-INFÓ"
MODEL_PLAYLIST_PROPERTY = "LEJÁTSZÁSI LISTA-INFÓ"
MODEL_TITLE = 'Cím'
MODEL_TRACK_NUMBER = 'Track száma'
+12 -5
View File
@@ -30,17 +30,20 @@ class LangItalian(object):
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "SCELTA"
FUNCTION = "FUNZIONE"
@@ -65,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ì):"
@@ -78,16 +81,20 @@ class LangItalian(object):
CHANGE_ALBUMID_BEFORE_FOLDER = "Aggiungere ID prima del nome della cartella per l'album ('0'-No,'1'-Sì):"
CHANGE_SAVE_COVERS = "Salve copertine ('0'-No,'1'-Sì):"
CHANGE_LANGUAGE = "Selezionare lingua"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify):"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0' not modify,'default'-to set default):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0' not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-No,'1'-Yes):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangJapanese(object):
SETTING_USE_PLAYLIST_FOLDER = "Use playlist folder"
SETTING_MULITHREAD_DOWNLOAD = "Multi thread download"
SETTING_ALBUM_FOLDER_FORMAT = "Album folder format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Show progress"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "歌詞を追加"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "設定パス"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "選択"
FUNCTION = "関数"
@@ -65,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'-はい):"
@@ -79,15 +82,19 @@ class LangJapanese(object):
CHANGE_SAVE_COVERS = "カバーを保存('0'-いいえ,'1'-はい):"
CHANGE_LANGUAGE = "言語を選択する"
CHANGE_ALBUM_FOLDER_FORMAT = "Album folder format('0'-変更しない,'default'-デフォルトを設定するには):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Track file format('0'-変更しない,'default'-デフォルトを設定するには):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Show progress('0'-いいえ,'1'-はい):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-いいえ,'1'-はい):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-いいえ,'1'-はい):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "歌詞を追加('0'-いいえ,'1'-はい):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-変更しない):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-いいえ,'1'-はい):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starting login process..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangKorean(object):
SETTING_USE_PLAYLIST_FOLDER = "재생목록 폴더 사용"
SETTING_MULITHREAD_DOWNLOAD = "다중 스레드 다운로드"
SETTING_ALBUM_FOLDER_FORMAT = "앨범 폴더 형식"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "트랙 파일 형식"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "진행 상태 표시"
SETTING_SHOW_TRACKINFO = "트랙 정보 표시"
SETTING_SAVE_ALBUMINFO = "AlbumInfo.txt 저장"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "가사 추가"
SETTING_LYRICS_SERVER_PROXY = "가사 서버 프록시"
SETTINGS_ADD_LRC_FILE = "timed 가사 저장 (.lrc 파일)"
SETTING_ADD_LRC_FILE = "timed 가사 저장 (.lrc 파일)"
SETTING_PATH = "설정 경로"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "선택"
FUNCTION = "기능"
@@ -65,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'-예):"
@@ -79,15 +82,19 @@ class LangKorean(object):
CHANGE_SAVE_COVERS = "커버 저장('0'-아니요,'1'-예):"
CHANGE_LANGUAGE = "언어 선택"
CHANGE_ALBUM_FOLDER_FORMAT = "앨범 폴더 형식('0'-변경 안 함,'default'-기본 설정):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "트랙 파일 형식('0'-변경 안 함,'default'-기본 설정):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "진행 상태 표시('0'-아니요,'1'-예):"
CHANGE_SHOW_TRACKINFO = "트랙 정보 표시('0'-아니요,'1'-예):"
CHANGE_SAVE_ALBUM_INFO = "AlbumInfo.txt 저장('0'-아니요,'1'-예):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "가사 추가('0'-아니요,'1'-예):"
CHANGE_LYRICS_SERVER_PROXY = "가사 서버 프록시('0'-변경 안 함):"
CHANGE_ADD_LRC_FILE = "timed 가사 .lrc 파일 저장 ('0'-아니요,'1'-예):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "로그인 중..."
+60 -106
View File
@@ -21,6 +21,7 @@ from tidal_dl.lang.french import LangFrench
from tidal_dl.lang.german import LangGerman
from tidal_dl.lang.hungarian import LangHungarian
from tidal_dl.lang.italian import LangItalian
from tidal_dl.lang.norwegian import LangNorwegian
from tidal_dl.lang.polish import LangPolish
from tidal_dl.lang.portuguese import LangPortuguese
from tidal_dl.lang.russian import LangRussian
@@ -31,111 +32,64 @@ from tidal_dl.lang.vietnamese import LangVietnamese
from tidal_dl.lang.korean import LangKorean
from tidal_dl.lang.japanese import LangJapanese
LANG = LangEnglish()
_ALL_LANGUAGE_ = [
['English', LangEnglish()],
['中文', LangChinese()],
['Turkish', LangTurkish()],
['Italian', LangItalian()],
['Czech', LangCzech()],
['Arabic', LangArabic()],
['Russian', LangRussian()],
['Filipino', LangFilipino()],
['Croatian', LangCroatian()],
['Spanish', LangSpanish()],
['Portuguese', LangPortuguese()],
['Ukrainian', LangUkrainian()],
['Vietnamese', LangVietnamese()],
['French', LangFrench()],
['German', LangGerman()],
['Danish', LangDanish()],
['Hungarian', LangHungarian()],
['Korean', LangKorean()],
['Japanese', LangJapanese()],
['Dutch', LangDutch()],
['Polish', LangPolish()],
['Norwegian', LangNorwegian()],
]
class Language(object):
def __init__(self) -> None:
self.select = LangEnglish()
def __toInt__(self, str):
try:
return int(str)
except:
return 0
def setLang(self, index):
index = self.__toInt__(index)
if index >= 0 and index < len(_ALL_LANGUAGE_):
self.select = _ALL_LANGUAGE_[index][1]
else:
self.select = LangEnglish()
def getLangName(self, index):
index = self.__toInt__(index)
if index >= 0 and index < len(_ALL_LANGUAGE_):
return _ALL_LANGUAGE_[index][0]
return ""
def getLangChoicePrint(self):
array = []
index = 0
while True:
name = self.getLangName(index)
if name == "":
break
array.append('\'' + str(index) + '\'-' + name)
index += 1
return ','.join(array)
def setLang(index):
global LANG
if str(index) == '0':
LANG = LangEnglish()
elif str(index) == '1':
LANG = LangChinese()
elif str(index) == '2':
LANG = LangTurkish()
elif str(index) == '3':
LANG = LangItalian()
elif str(index) == '4':
LANG = LangCzech()
elif str(index) == '5':
LANG = LangArabic()
elif str(index) == '6':
LANG = LangRussian()
elif str(index) == '7':
LANG = LangFilipino()
elif str(index) == '8':
LANG = LangCroatian()
elif str(index) == '9':
LANG = LangSpanish()
elif str(index) == '10':
LANG = LangPortuguese()
elif str(index) == '11':
LANG = LangUkrainian()
elif str(index) == '12':
LANG = LangVietnamese()
elif str(index) == '13':
LANG = LangFrench()
elif str(index) == '14':
LANG = LangGerman()
elif str(index) == '15':
LANG = LangDanish()
elif str(index) == '16':
LANG = LangHungarian()
elif str(index) == '17':
LANG = LangKorean()
elif str(index) == '18':
LANG = LangJapanese()
elif str(index) == '19':
LANG = LangDutch()
elif str(index) == '20':
LANG = LangPolish()
else:
LANG = LangEnglish()
return LANG
def getLangName(index):
if str(index) == '0':
return "English"
if str(index) == '1':
return "中文"
if str(index) == '2':
return "Turkish"
if str(index) == '3':
return "Italian"
if str(index) == '4':
return "Czech"
if str(index) == '5':
return "Arabic"
if str(index) == '6':
return "Russian"
if str(index) == '7':
return "Filipino"
if str(index) == '8':
return "Croatian"
if str(index) == '9':
return "Spanish"
if str(index) == '10':
return "Portuguese"
if str(index) == '11':
return "Ukrainian"
if str(index) == '12':
return "Vietnamese"
if str(index) == '13':
return "French"
if str(index) == '14':
return "German"
if str(index) == '15':
return "Danish"
if str(index) == '16':
return "Hungarian"
if str(index) == '17':
return "Korean"
if str(index) == '18':
return "Japanese"
if str(index) == '19':
return "Dutch"
if str(index) == '20':
return "Polish"
return ""
def getLangChoicePrint():
array = []
index = 0
while True:
name = getLangName(index)
if name == "":
break
array.append('\'' + str(index) + '\'-' + name)
index += 1
return ','.join(array)
LANG = Language()
+126
View File
@@ -0,0 +1,126 @@
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File : norwegian.py
@Time : 2021/03/25
@Author : roberts91
@Version : 1.0
@Contact :
@Desc :
'''
class LangNorwegian(object):
SETTING = "INNSTILLINGER"
VALUE = "Verdi"
SETTING_DOWNLOAD_PATH = "Nedlastingssti"
SETTING_ONLY_M4A = "Konverter MP4 til M4A"
SETTING_ADD_EXPLICIT_TAG = "Legg til eksplisitt tag"
SETTING_ADD_HYPHEN = "Legg til bindestrek"
SETTING_ADD_YEAR = "Legg til år før albummappenavn"
SETTING_USE_TRACK_NUM = "Legg til spornummer"
SETTING_AUDIO_QUALITY = "Lydkvalitet"
SETTING_VIDEO_QUALITY = "Videokvalitet"
SETTING_CHECK_EXIST = "Kontroller eksistens"
SETTING_ARTIST_BEFORE_TITLE = "Artistnavn før spornummer"
SETTING_ALBUMID_BEFORE_FOLDER = "Id før album mappe"
SETTING_INCLUDE_EP = "Inkluder single&EP"
SETTING_SAVE_COVERS = "Lagre cover"
SETTING_LANGUAGE = "Språk"
SETTING_USE_PLAYLIST_FOLDER = "Bruk spillelistemappe"
SETTING_MULITHREAD_DOWNLOAD = "Last ned flere samtidig"
SETTING_ALBUM_FOLDER_FORMAT = "Albummappens format"
SETTING_PLAYLIST_FOLDER_FORMAT = "Spillelistemappens format"
SETTING_TRACK_FILE_FORMAT = "Spor filformat"
SETTING_VIDEO_FILE_FORMAT = "Video filformat"
SETTING_SHOW_PROGRESS = "Vis fremgang"
SETTING_SHOW_TRACKINFO = "Vis sporinformasjon"
SETTING_SAVE_ALBUMINFO = "Lagre AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Last ned video"
SETTING_ADD_LYRICS = "Legg til sangtekst"
SETTING_LYRICS_SERVER_PROXY = "Sangtekst server proxy"
SETTING_ADD_LRC_FILE = "Lagre sangtekster med tidsreferanser (.lrc fil)"
SETTING_PATH = "Innstillinger sti"
SETTING_APIKEY = "API-nøkkel støtte"
SETTING_ADD_TYPE_FOLDER = "Legg til Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "VALG"
FUNCTION = "FUNKSJON"
CHOICE_ENTER = "Tast inn"
CHOICE_ENTER_URLID = "Tast inn 'Url/ID':"
CHOICE_EXIT = "Avslutt"
CHOICE_LOGIN = "Kontroller AccessToken"
CHOICE_SETTINGS = "Innstillinger"
CHOICE_SET_ACCESS_TOKEN = "Sett AccessToken"
CHOICE_DOWNLOAD_BY_URL = "Last ned via URL eller ID"
CHOICE_LOGOUT = "Logg ut"
CHOICE_APIKEY = "Velg APIKey"
PRINT_ERR = "[FEIL]"
PRINT_INFO = "[INFO]"
PRINT_SUCCESS = "[SUCCES]"
PRINT_ENTER_CHOICE = "Tast inn valg:"
PRINT_LATEST_VERSION = "Seneste versjon:"
# PRINT_USERNAME = "username:"
# PRINT_PASSWORD = "password:"
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,'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):"
CHANGE_ADD_HYPHEN = "Bruk bindestreker i stedet for mellomrom i filnavn('0'-Nei,'1'-Ja):"
CHANGE_ADD_YEAR = "Legg til år i albumnavn('0'-Nei,'1'-Ja):"
CHANGE_USE_TRACK_NUM = "Legg til spornummer før filnavn('0'-Nei,'1'-Ja):"
CHANGE_CHECK_EXIST = "Kontrollér filens eksistens før nedlasting('0'-Nei,'1'-Ja):"
CHANGE_ARTIST_BEFORE_TITLE = "Legg til artistnavn før sportittel('0'-Nei,'1'-Ja):"
CHANGE_INCLUDE_EP = "Inkluder singler og EP'er når man laster ned en artists album('0'-Nei,'1'-Ja):"
CHANGE_ALBUMID_BEFORE_FOLDER = "Legg til ID før albummappe('0'-Nei,'1'-Ja):"
CHANGE_SAVE_COVERS = "Lagre cover('0'-Nei,'1'-Ja):"
CHANGE_LANGUAGE = "Velg språk"
CHANGE_ALBUM_FOLDER_FORMAT = "Albummappe format('0'-ikke endre, 'default'-for å sette til standardverdi):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Spillelistemappe format('0'-ikke endre, 'default'-for å sette til standardverdi):"
CHANGE_TRACK_FILE_FORMAT = "Sportittel filformat('0'-ikke endre, 'default'-for å sette til standardverdi):"
CHANGE_VIDEO_FILE_FORMAT = "Videofil format('0'-ikke endre, 'default'-for å sette til standardverdi):"
CHANGE_SHOW_PROGRESS = "Vis fremgang('0'-Nei,'1'-Ja):"
CHANGE_SHOW_TRACKINFO = "Vis sporinformasjon('0'-Nei,'1'-Ja):"
CHANGE_SAVE_ALBUM_INFO = "Lagre AlbumInfo.txt('0'-Nei,'1'-Ja):"
CHANGE_DOWNLOAD_VIDEOS = "Last ned videers (i spillelister, album, mikser)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Legg til sangtekst('0'-Nei,'1'-Ja):"
CHANGE_LYRICS_SERVER_PROXY = "Sangtekst server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Lagre sangtekster med tidsreferanser .lrc fil ('0'-Nei,'1'-Ja):"
CHANGE_ADD_TYPE_FOLDER = "Legg til Type-mappe, f.eks. Album/Video/Spilleliste('0'-Nei,'1'-Ja):"
CHANGE_MULITHREAD_DOWNLOAD = "Last ned flere samtidig('0'-Nei,'1'-Ja):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Starter login-prosessen."
AUTH_LOGIN_CODE = "Din login kode er {}"
AUTH_NEXT_STEP = "Gå til {} innen de neste {} for å avslutte setup."
AUTH_WAITING = "Venter på godkjennelse..."
AUTH_TIMEOUT = "Tiden gikk ut."
MSG_VALID_ACCESSTOKEN = "AccessToken tilgjengelig for {}."
MSG_INVALID_ACCESSTOKEN = "AccessToken utløpt. Forøsker å oppdatere"
MSG_PATH_ERR = "Sti feil!"
MSG_INPUT_ERR = "Inntastningsfeol!"
MODEL_ALBUM_PROPERTY = "ALBUM-PROPERTY"
MODEL_TRACK_PROPERTY = "TRACK-PROPERTY"
MODEL_VIDEO_PROPERTY = "VIDEO-PROPERTY"
MODEL_ARTIST_PROPERTY = "ARTIST-PROPERTY"
MODEL_PLAYLIST_PROPERTY = "PLAYLIST-PROPERTY"
MODEL_TITLE = 'Tittel'
MODEL_TRACK_NUMBER = 'Spornummer'
MODEL_VIDEO_NUMBER = 'Videonummer'
MODEL_RELEASE_DATE = 'Utgivelsesdato'
MODEL_VERSION = 'Versjon'
MODEL_EXPLICIT = 'Eksplisitt'
MODEL_ALBUM = 'Album'
MODEL_ID = 'ID'
MODEL_NAME = 'Navn'
MODEL_TYPE = 'Type'
+9 -2
View File
@@ -30,17 +30,20 @@ class LangPolish(object):
SETTING_USE_PLAYLIST_FOLDER = "Użyj folder playlisty"
SETTING_MULITHREAD_DOWNLOAD = "Pobieranie wielowątkowe"
SETTING_ALBUM_FOLDER_FORMAT = "Format folderu albumu"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Format pliku utworu"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Pokaż postęp"
SETTING_SHOW_TRACKINFO = "Pokaż informacje o utworze"
SETTING_SAVE_ALBUMINFO = "Zapisz AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Dodaj teksty utworów"
SETTING_LYRICS_SERVER_PROXY = "Serwer proxy dla tekstów"
SETTINGS_ADD_LRC_FILE = "Zapisz czasowe teksty utworów (plik .lrc)"
SETTING_ADD_LRC_FILE = "Zapisz czasowe teksty utworów (plik .lrc)"
SETTING_PATH = "Ścieżka ustawień"
SETTING_APIKEY = "Obsługa APIKey"
SETTING_ADD_TYPE_FOLDER = "Dodaj folder typu"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "WYBÓR"
FUNCTION = "FUNKCJA"
@@ -65,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):"
@@ -79,15 +82,19 @@ class LangPolish(object):
CHANGE_SAVE_COVERS = "Zapisz okładki('0'-Nie,'1'-Tak):"
CHANGE_LANGUAGE = "Wybierz język"
CHANGE_ALBUM_FOLDER_FORMAT = "Format folderu albumu('0'-nie modyfikuj,'default'-by ustawić domyślny):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Format pliku utworu('0'-nie modyfikuj,'default'-by ustawić domyślny):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Pokaż postęp('0'-Nie,'1'-Tak):"
CHANGE_SHOW_TRACKINFO = "Pokaż informacje o utworze('0'-Nie,'1'-Tak):"
CHANGE_SAVE_ALBUM_INFO = "Zapisz AlbumInfo.txt('0'-Nie,'1'-Tak):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Dodaj teksty utworów('0'-Nie,'1'-Tak):"
CHANGE_LYRICS_SERVER_PROXY = "Serwer proxy dla tekstów('0'-nie modyfikuj):"
CHANGE_ADD_LRC_FILE = "Zapisz plik .lrc czasowych tekstów utworów ('0'-Nie,'1'-Tak):"
CHANGE_ADD_TYPE_FOLDER = "Dodaj folder typu, np. Album/wideo/lista odtwarzania('0'-Nie,'1'-Tak):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Rozpoczęcie procesu logowania..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangPortuguese(object):
SETTING_USE_PLAYLIST_FOLDER = "Usar pasta de lista de reprodução"
SETTING_MULITHREAD_DOWNLOAD = "Download de vários tópicos"
SETTING_ALBUM_FOLDER_FORMAT = "Formato da pasta do álbum"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Track file format"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Mostrar progresso"
SETTING_SHOW_TRACKINFO = "Mostrar informações da faixa"
SETTING_SAVE_ALBUMINFO = "Salvar AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Adicionar Letra da Música"
SETTING_LYRICS_SERVER_PROXY = "Proxy do servidor de letras"
SETTING_ADD_LRC_FILE = "Salvar letras cronometradas (.lrc file)"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Salvar letras cronometradas (.lrc file)"
SETTING_APIKEY = "Suporte APIKey"
SETTING_ADD_TYPE_FOLDER = "Adicionar tipo de pasta"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "ESCOLHER"
FUNCTION = "FUNÇÃO"
@@ -65,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):"
@@ -79,15 +82,19 @@ class LangPortuguese(object):
CHANGE_SAVE_COVERS = "Salvar Capas('0'-Não,'1'-Sim):"
CHANGE_LANGUAGE = "Selecionar idioma"
CHANGE_ALBUM_FOLDER_FORMAT = "Formato da pasta do álbum ('0' não modificar)"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Formato do arquivo de trilha ('0' não modificar):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Mostrar progresso('0'-Não,'1'-Sim):"
CHANGE_SHOW_TRACKINFO = "Mostrar informações da faixa('0'-Não,'1'-Sim):"
CHANGE_SAVE_ALBUM_INFO = "Salvar AlbumInfo.txt('0'-Não,'1'-Sim):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Adicionar letras('0'-Não,'1'-Sim):"
CHANGE_LYRICS_SERVER_PROXY = "Proxy do servidor de letras ('0' não modificar):"
CHANGE_ADD_LRC_FILE = "Salvar arquivo .lrc de letras cronometradas ('0'-Não,'1'-Sim):"
CHANGE_ADD_TYPE_FOLDER = "Adicionar Tipo de Pasta, por exemplo, Álbum/Vídeo/Lista de Reprodução('0'-Não,'1'-Sim):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Iniciando o processo de login..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangRussian(object):
SETTING_USE_PLAYLIST_FOLDER = "Плейлисты в отдельную папку"
SETTING_MULITHREAD_DOWNLOAD = "Многопоточная загрузка"
SETTING_ALBUM_FOLDER_FORMAT = "Маска имени альбома"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Маска имени трека"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Показывать процесс загрузки"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Сохранять AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Добавлять текст песень"
SETTING_LYRICS_SERVER_PROXY = "Прокси сервер для текстов песен"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Путь для настроек"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "ВЫБРАТЬ"
FUNCTION = "ФУНКЦИИ"
@@ -65,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'-Да):"
@@ -79,15 +82,19 @@ class LangRussian(object):
CHANGE_SAVE_COVERS = "Сохранять обложки('0'-Нет,'1'-Да):"
CHANGE_LANGUAGE = "Выбрать язык"
CHANGE_ALBUM_FOLDER_FORMAT = "Маска имени альбома('0' не менять):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Маска имени трека('0' не менять):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Показывать процесс загрузки('0'-Нет,'1'-Да):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Сохранять AlbumInfo.txt('0'-Нет,'1'-Да):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Добавлять тексты песень ('0'-Нет,'1'-Да):"
CHANGE_LYRICS_SERVER_PROXY = "Прокси для сервера с текстом песень('0' не менять):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Входим в сервис..."
+13 -6
View File
@@ -2,7 +2,7 @@
# -*- encoding: utf-8 -*-
'''
@File : spanish.py
@Time : 2022/01/19
@Time : 2022/07/07
@Author : Frikilinux & JavierSC
@Version : 2.3
@Contact :
@@ -30,17 +30,20 @@ class LangSpanish(object):
SETTING_USE_PLAYLIST_FOLDER = "Usar directorio de la lista de reproducción"
SETTING_MULITHREAD_DOWNLOAD = "Descarga Multi-hilo"
SETTING_ALBUM_FOLDER_FORMAT = "Formato del nombre de carpeta del álbum"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Formato del nombre de archivo de la pista"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Mostrar progreso"
SETTING_SHOW_TRACKINFO = "Mostrar información de pista"
SETTING_SAVE_ALBUMINFO = "Guardar AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Añadir letras"
SETTING_LYRICS_SERVER_PROXY = "Proxy del servidor de letras"
SETTING_ADD_LRC_FILE = "Añadir letras cronometradas (archivo .lrc)"
SETTING_PATH = "Ruta de ajustes"
SETTINGS_ADD_LRC_FILE = "Añadir letras cronometradas (archivo .lrc)"
SETTING_APIKEY = "Soporte de la APIKey"
SETTING_ADD_TYPE_FOLDER = "Añadir tipo de carpeta"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "SELECCIÓN"
FUNCTION = "FUNCIÓN"
@@ -65,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í):"
@@ -79,15 +82,19 @@ class LangSpanish(object):
CHANGE_SAVE_COVERS = "¿Guardar carátulas?('0'-No,'1'-Sí):"
CHANGE_LANGUAGE = "Seleccione el idioma"
CHANGE_ALBUM_FOLDER_FORMAT = "Formato del nombre de carpeta del álbum ('0' No modificar):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Formato del nombre de archivo de la pista ('0' No modificar):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_VIDEO_FILE_FORMAT = "Formato del archivo de video('0'-No modificar,'default'-por defecto):"
CHANGE_SHOW_PROGRESS = "¿Mostrar progreso? ('0'-No,'1'-Sí):"
CHANGE_SHOW_TRACKINFO = "¿Mostrar información de pista?('0'-No,'1'-Sí):"
CHANGE_SAVE_ALBUM_INFO = "¿Guardar AlbumInfo.txt?('0'-No,'1'-Sí):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "¿Añadir letras?('0'-No,'1'-Sí):"
CHANGE_LYRICS_SERVER_PROXY = "¿Proxy del servidor de letras?('0' no modificar):"
CHANGE_ADD_LRC_FILE = "¿Añadir letras cronometradas en un archivo .lrc? ('0'-No,'1'-Sí):"
CHANGE_ADD_TYPE_FOLDER = "Añadir tipo de carpeta, ej: Album/Video/Playlist('0'-No,'1'-Sí):"
CHANGE_MULITHREAD_DOWNLOAD = "¿Descarga Multi-hilo?('0'-No,'1'-Sí:"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Iniciando sesión..."
@@ -108,8 +115,8 @@ class LangSpanish(object):
MODEL_PLAYLIST_PROPERTY = "PROPIEDAD-DE-PLAYLIST"
MODEL_TITLE = 'Título'
MODEL_TRACK_NUMBER = 'Numero de pistas'
MODEL_VIDEO_NUMBER = 'Numero de videos'
MODEL_TRACK_NUMBER = 'Número de pistas'
MODEL_VIDEO_NUMBER = 'Número de videos'
MODEL_RELEASE_DATE = 'Fecha de lanzamiento'
MODEL_VERSION = 'Versión'
MODEL_EXPLICIT = 'Explícito'
+10 -3
View File
@@ -30,17 +30,20 @@ class LangTurkish(object):
SETTING_USE_PLAYLIST_FOLDER = "Albümler klasör halinde indirilsin mi ?"
SETTING_MULITHREAD_DOWNLOAD = "Şarkılar tek tek indirilsin mi?"
SETTING_ALBUM_FOLDER_FORMAT = "Klasör ismi formatı:"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Dosya ismi formatı:"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "İndirme Çubuğu Görüntüleme:"
SETTING_SHOW_TRACKINFO = "Show Track Info"
SETTING_SAVE_ALBUMINFO = "Save AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Add lyrics"
SETTING_LYRICS_SERVER_PROXY = "Lyrics server proxy"
SETTING_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_PATH = "Settings path"
SETTINGS_ADD_LRC_FILE = "Save timed lyrics (.lrc file)"
SETTING_APIKEY = "APIKey support"
SETTING_ADD_TYPE_FOLDER = "Add Type-Folder"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "Seçim"
FUNCTION = "İşlemler"
@@ -65,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): "
@@ -79,15 +82,19 @@ class LangTurkish(object):
CHANGE_SAVE_COVERS = ">>> Albüm kapağı indirilsin mi?('0'-Hayır,'1'-Evet): "
CHANGE_LANGUAGE = ">>> Lisan Seç "
CHANGE_ALBUM_FOLDER_FORMAT = "Albüm Klasör İsmi Formatı('0' aynı kalsın):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Dosya İsmi Formatı('0' aynı kalsın):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "İndirme Çubuğu Görüntülensin mi?('0'-Hayır,'1'-Evet):"
CHANGE_SHOW_TRACKINFO = "Show track info('0'-No,'1'-Yes):"
CHANGE_SAVE_ALBUM_INFO = "Save AlbumInfo.txt('0'-No,'1'-Yes):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Add lyrics('0'-No,'1'-Yes):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0' not modify):"
CHANGE_LYRICS_SERVER_PROXY = "Lyrics server proxy('0'-not modify):"
CHANGE_ADD_LRC_FILE = "Save timed lyrics .lrc file ('0'-No,'1'-Yes):"
CHANGE_ADD_TYPE_FOLDER = "Add Type-Folder,eg Album/Video/Playlist('0'-No,'1'-Yes):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Giriş işlemleri başlatıldı..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangUkrainian(object):
SETTING_USE_PLAYLIST_FOLDER = "Використовувати папку плейлиста"
SETTING_MULITHREAD_DOWNLOAD = "Багатопоточне завантаження"
SETTING_ALBUM_FOLDER_FORMAT = "Формат папки альбому"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Формат файлу треку"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Показувати прогрес"
SETTING_SHOW_TRACKINFO = "Показувати інформацію про трек"
SETTING_SAVE_ALBUMINFO = "Зберігати AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Додавати тексти пісень"
SETTING_LYRICS_SERVER_PROXY = "Проксі для сервера з текстами пісень"
SETTING_ADD_LRC_FILE = "Зберігати тексти з відмітками часу (.lrc файл)"
SETTING_PATH = "Шлях налаштувань"
SETTINGS_ADD_LRC_FILE = "Зберігати тексти з відмітками часу (.lrc файл)"
SETTING_APIKEY = "Підтримка ключа API"
SETTING_ADD_TYPE_FOLDER = "Додавати папку-тип"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "ВИБІР"
FUNCTION = "ФУНКЦІЇ"
@@ -65,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'-Так):"
@@ -79,15 +82,19 @@ class LangUkrainian(object):
CHANGE_SAVE_COVERS = "Зберігати обкладинки('0'-Ні,'1'-Так):"
CHANGE_LANGUAGE = "Обрати мову"
CHANGE_ALBUM_FOLDER_FORMAT = "Формат теки альбому('0'-не змінювати):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Формат файлу треку('0'-не змінювати):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Показувати прогрес('0'-Ні,'1'-Так):"
CHANGE_SHOW_TRACKINFO = "Показувати інформацію про трек('0'-Ні,'1'-Так):"
CHANGE_SAVE_ALBUM_INFO = "Зберігати AlbumInfo.txt('0'-Ні,'1'-Так):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Додавати тексти пісень('0'-Ні,'1'-Так):"
CHANGE_LYRICS_SERVER_PROXY = "Проксі для сервера з текстами пісень('0'-не змінювати):"
CHANGE_ADD_LRC_FILE = "Зберігати тексти пісень з відмітками часу в .lrc файл('0'-Ні,'1'-Так):"
CHANGE_ADD_TYPE_FOLDER = "Додавати теку-тип,наприклад Альбом/Відео/Плейлист('0'-Ні,'1'-Так):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Початок процесу авторизації..."
+9 -2
View File
@@ -30,17 +30,20 @@ class LangVietnamese(object):
SETTING_USE_PLAYLIST_FOLDER = "Thư mục cho danh sách phát"
SETTING_MULITHREAD_DOWNLOAD = "Tải về đa luồng"
SETTING_ALBUM_FOLDER_FORMAT = "Định dạng thư mục album"
SETTING_PLAYLIST_FOLDER_FORMAT = "Playlist folder format"
SETTING_TRACK_FILE_FORMAT = "Định dạng tên tệp nhạc"
SETTING_VIDEO_FILE_FORMAT = "Video file format"
SETTING_SHOW_PROGRESS = "Hiện tiến trình"
SETTING_SHOW_TRACKINFO = "Hiện thông tin bài"
SETTING_SAVE_ALBUMINFO = "Lưu AlbumInfo.txt"
SETTING_DOWNLOAD_VIDEOS = "Download videos"
SETTING_ADD_LYRICS = "Thêm lời bài hát"
SETTING_LYRICS_SERVER_PROXY = "Máy chủ proxy cho lyrics"
SETTINGS_ADD_LRC_FILE = "Lưu timed lyrics (tệp .lrc)"
SETTING_ADD_LRC_FILE = "Lưu timed lyrics (tệp .lrc)"
SETTING_PATH = "Đường dẫn cài đặt"
SETTING_APIKEY = "Hỗ trợ APIKey"
SETTING_ADD_TYPE_FOLDER = "Thêm Loại-Thư mục"
SETTING_DOWNLOAD_DELAY = "Use Download Delay"
CHOICE = "LỰA CHỌN"
FUNCTION = "CHỨC NĂNG"
@@ -65,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ó):"
@@ -79,15 +82,19 @@ class LangVietnamese(object):
CHANGE_SAVE_COVERS = "Tải ảnh bìa('0'-Không,'1'-Có):"
CHANGE_LANGUAGE = "Chọn ngôn ngữ"
CHANGE_ALBUM_FOLDER_FORMAT = "Định dạng thư mục album('0' không đổi,'default' để đặt về mặc định):"
CHANGE_PLAYLIST_FOLDER_FORMAT = "Playlist folder format('0'-not modify,'default'-to set default):"
CHANGE_TRACK_FILE_FORMAT = "Định dạng tên tệp nhạc('0' không đổi,'default' để đặt về mặc định):"
CHANGE_VIDEO_FILE_FORMAT = "Video file format('0'-not modify,'default'-to set default):"
CHANGE_SHOW_PROGRESS = "Hiện tiến trình('0'-Không,'1'-Có):"
CHANGE_SHOW_TRACKINFO = "Hiện thông tin bài('0'-Không,'1'-Có):"
CHANGE_SAVE_ALBUM_INFO = "Lưu AlbumInfo.txt('0'-Không,'1'-Có):"
CHANGE_DOWNLOAD_VIDEOS = "Download videos (when downloading playlists, albums, mixes)('0'-No,'1'-Yes):"
CHANGE_ADD_LYRICS = "Thêm lời bài hát('0'-Không,'1'-Có):"
CHANGE_LYRICS_SERVER_PROXY = "Máy chủ proxy cho lyrics('0' không đổi):"
CHANGE_ADD_LRC_FILE = "Lưu timed lyrics tệp .lrc ('0'-Không,'1'-Có):"
CHANGE_ADD_TYPE_FOLDER = "Thêm Loại-Thư mục, ví dụ Album/Video/Playlist('0'-Không,'1'-Có):"
CHANGE_MULITHREAD_DOWNLOAD = "Multi thread download('0'-No,'1'-Yes):"
CHANGE_USE_DOWNLOAD_DELAY = "Use Download Delay('0'-No,'1'-Yes):"
# {} are required in these strings
AUTH_START_LOGIN = "Đang bắt đầu đăng nhập..."
+1
View File
@@ -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
+14 -7
View File
@@ -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 + "] "
@@ -80,11 +82,16 @@ def getAlbumPath(album):
retpath = retpath.strip()
return f"{SETTINGS.downloadPath}/{retpath}"
def getPlaylistPath(playlist):
# name
name = __fixPath__(playlist.title)
return f"{SETTINGS.downloadPath}/Playlist/{name}"
playlistName = __fixPath__(playlist.title)
# retpath
retpath = SETTINGS.playlistFolderFormat
if retpath is None or len(retpath) <= 0:
retpath = SETTINGS.getDefaultPlaylistFolderFormat()
retpath = retpath.replace(R"{PlaylistUUID}", str(playlist.uuid))
retpath = retpath.replace(R"{PlaylistName}", playlistName)
return f"{SETTINGS.downloadPath}/{retpath}"
def getTrackPath(track, stream, album=None, playlist=None):
@@ -112,8 +119,8 @@ def getTrackPath(track, stream, album=None, playlist=None):
explicit = "(Explicit)" if track.explicit else ''
# album and addyear
albumName = __fixPath__(album.title)
year = __getYear__(album.releaseDate)
albumName = __fixPath__(album.title) if album is not None else ''
year = __getYear__(album.releaseDate) if album is not None else ''
# extension
extension = __getExtension__(stream)
+83 -67
View File
@@ -8,6 +8,8 @@
@Contact : yaronhuang@foxmail.com
@Desc :
'''
from pickle import GLOBAL
import threading
import aigpy
import logging
import prettytable
@@ -20,7 +22,7 @@ from tidal_dl.settings import *
from tidal_dl.lang.language import *
VERSION = '2022.06.20.1'
VERSION = '2022.10.31.1'
__LOGO__ = f'''
/$$$$$$$$ /$$ /$$ /$$ /$$ /$$
|__ $$__/|__/ | $$ | $$ | $$| $$
@@ -36,7 +38,7 @@ __LOGO__ = f'''
{VERSION}
'''
print_mutex = threading.Lock()
class Printf(object):
@@ -61,6 +63,7 @@ class Printf(object):
tb = Printf.__gettable__(["OPTION", "DESC"], [
["-h or --help", "show help-message"],
["-v or --version", "show version"],
["-g or --gui", "show simple-gui"],
["-o or --output", "download path"],
["-l or --link", "url/id/filePath"],
["-q or --quality", "track quality('Normal','High,'HiFi','Master')"],
@@ -71,53 +74,57 @@ class Printf(object):
@staticmethod
def checkVersion():
onlineVer = aigpy.pip.getLastVersion('tidal-dl')
if onlineVer is None:
if onlineVer is not None:
icmp = aigpy.system.cmpVersion(onlineVer, VERSION)
if icmp > 0:
Printf.info(LANG.PRINT_LATEST_VERSION + ' ' + onlineVer)
Printf.info(LANG.select.PRINT_LATEST_VERSION + ' ' + onlineVer)
@staticmethod
def settings():
data = SETTINGS
tb = Printf.__gettable__([LANG.SETTING, LANG.VALUE], [
tb = Printf.__gettable__([LANG.select.SETTING, LANG.select.VALUE], [
#settings - path and format
[LANG.SETTING_PATH, getProfilePath()],
[LANG.SETTING_DOWNLOAD_PATH, data.downloadPath],
[LANG.SETTING_ALBUM_FOLDER_FORMAT, data.albumFolderFormat],
[LANG.SETTING_TRACK_FILE_FORMAT, data.trackFileFormat],
[LANG.SETTING_VIDEO_FILE_FORMAT, data.videoFileFormat],
[LANG.select.SETTING_PATH, getProfilePath()],
[LANG.select.SETTING_DOWNLOAD_PATH, data.downloadPath],
[LANG.select.SETTING_ALBUM_FOLDER_FORMAT, data.albumFolderFormat],
[LANG.select.SETTING_PLAYLIST_FOLDER_FORMAT, data.playlistFolderFormat],
[LANG.select.SETTING_TRACK_FILE_FORMAT, data.trackFileFormat],
[LANG.select.SETTING_VIDEO_FILE_FORMAT, data.videoFileFormat],
#settings - quality
[LANG.SETTING_AUDIO_QUALITY, data.audioQuality],
[LANG.SETTING_VIDEO_QUALITY, data.videoQuality],
[LANG.select.SETTING_AUDIO_QUALITY, data.audioQuality],
[LANG.select.SETTING_VIDEO_QUALITY, data.videoQuality],
#settings - else
[LANG.SETTING_USE_PLAYLIST_FOLDER, data.usePlaylistFolder],
[LANG.SETTING_CHECK_EXIST, data.checkExist],
[LANG.SETTING_SHOW_PROGRESS, data.showProgress],
[LANG.SETTING_SHOW_TRACKINFO, data.showTrackInfo],
[LANG.SETTING_SAVE_ALBUMINFO, data.saveAlbumInfo],
[LANG.SETTING_SAVE_COVERS, data.saveCovers],
[LANG.SETTING_INCLUDE_EP, data.includeEP],
[LANG.SETTING_LANGUAGE, getLangName(data.language)],
[LANG.SETTINGS_ADD_LRC_FILE, data.lyricFile],
[LANG.SETTING_APIKEY, f"[{data.apiKeyIndex}]" + apiKey.getItem(data.apiKeyIndex)['formats']]
[LANG.select.SETTING_USE_PLAYLIST_FOLDER, data.usePlaylistFolder],
[LANG.select.SETTING_CHECK_EXIST, data.checkExist],
[LANG.select.SETTING_SHOW_PROGRESS, data.showProgress],
[LANG.select.SETTING_SHOW_TRACKINFO, data.showTrackInfo],
[LANG.select.SETTING_SAVE_ALBUMINFO, data.saveAlbumInfo],
[LANG.select.SETTING_DOWNLOAD_VIDEOS, data.downloadVideos],
[LANG.select.SETTING_SAVE_COVERS, data.saveCovers],
[LANG.select.SETTING_INCLUDE_EP, data.includeEP],
[LANG.select.SETTING_LANGUAGE, LANG.getLangName(data.language)],
[LANG.select.SETTING_ADD_LRC_FILE, data.lyricFile],
[LANG.select.SETTING_MULITHREAD_DOWNLOAD, data.multiThread],
[LANG.select.SETTING_APIKEY, f"[{data.apiKeyIndex}]" + apiKey.getItem(data.apiKeyIndex)['formats']],
[LANG.select.SETTING_DOWNLOAD_DELAY, data.downloadDelay],
])
print(tb)
@staticmethod
def choices():
print("====================================================")
tb = Printf.__gettable__([LANG.CHOICE, LANG.FUNCTION], [
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '0':"), LANG.CHOICE_EXIT],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '1':"), LANG.CHOICE_LOGIN],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '2':"), LANG.CHOICE_LOGOUT],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '3':"), LANG.CHOICE_SET_ACCESS_TOKEN],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '4':"), LANG.CHOICE_SETTINGS + '-Path'],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '5':"), LANG.CHOICE_SETTINGS + '-Quality'],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '6':"), LANG.CHOICE_SETTINGS + '-Else'],
[aigpy.cmd.green(LANG.CHOICE_ENTER + " '7':"), LANG.CHOICE_APIKEY],
[aigpy.cmd.green(LANG.CHOICE_ENTER_URLID), LANG.CHOICE_DOWNLOAD_BY_URL],
tb = Printf.__gettable__([LANG.select.CHOICE, LANG.select.FUNCTION], [
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '0':"), LANG.select.CHOICE_EXIT],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '1':"), LANG.select.CHOICE_LOGIN],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '2':"), LANG.select.CHOICE_LOGOUT],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '3':"), LANG.select.CHOICE_SET_ACCESS_TOKEN],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '4':"), LANG.select.CHOICE_SETTINGS + '-Path'],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '5':"), LANG.select.CHOICE_SETTINGS + '-Quality'],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '6':"), LANG.select.CHOICE_SETTINGS + '-Else'],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER + " '7':"), LANG.select.CHOICE_APIKEY],
[aigpy.cmd.green(LANG.select.CHOICE_ENTER_URLID), LANG.select.CHOICE_DOWNLOAD_BY_URL],
])
tb.set_style(prettytable.PLAIN_COLUMNS)
print(tb)
@@ -142,7 +149,7 @@ class Printf(object):
if ret == retWord:
return default
elif ret == "":
print(aigpy.cmd.red(LANG.PRINT_ERR + " ") + errmsg)
print(aigpy.cmd.red(LANG.select.PRINT_ERR + " ") + errmsg)
else:
break
return ret
@@ -152,7 +159,7 @@ class Printf(object):
while True:
ret = aigpy.cmd.inputLimit(aigpy.cmd.yellow(string), limit)
if ret is None:
print(aigpy.cmd.red(LANG.PRINT_ERR + " ") + errmsg)
print(aigpy.cmd.red(LANG.select.PRINT_ERR + " ") + errmsg)
else:
break
return ret
@@ -168,27 +175,36 @@ class Printf(object):
@staticmethod
def err(string):
print(aigpy.cmd.red(LANG.PRINT_ERR + " ") + string)
global print_mutex
print_mutex.acquire()
print(aigpy.cmd.red(LANG.select.PRINT_ERR + " ") + string)
# logging.error(string)
print_mutex.release()
@staticmethod
def info(string):
print(aigpy.cmd.blue(LANG.PRINT_INFO + " ") + string)
global print_mutex
print_mutex.acquire()
print(aigpy.cmd.blue(LANG.select.PRINT_INFO + " ") + string)
print_mutex.release()
@staticmethod
def success(string):
print(aigpy.cmd.green(LANG.PRINT_SUCCESS + " ") + string)
global print_mutex
print_mutex.acquire()
print(aigpy.cmd.green(LANG.select.PRINT_SUCCESS + " ") + string)
print_mutex.release()
@staticmethod
def album(data: Album):
tb = Printf.__gettable__([LANG.MODEL_ALBUM_PROPERTY, LANG.VALUE], [
[LANG.MODEL_TITLE, data.title],
tb = Printf.__gettable__([LANG.select.MODEL_ALBUM_PROPERTY, LANG.select.VALUE], [
[LANG.select.MODEL_TITLE, data.title],
["ID", data.id],
[LANG.MODEL_TRACK_NUMBER, data.numberOfTracks],
[LANG.MODEL_VIDEO_NUMBER, data.numberOfVideos],
[LANG.MODEL_RELEASE_DATE, data.releaseDate],
[LANG.MODEL_VERSION, data.version],
[LANG.MODEL_EXPLICIT, data.explicit],
[LANG.select.MODEL_TRACK_NUMBER, data.numberOfTracks],
[LANG.select.MODEL_VIDEO_NUMBER, data.numberOfVideos],
[LANG.select.MODEL_RELEASE_DATE, data.releaseDate],
[LANG.select.MODEL_VERSION, data.version],
[LANG.select.MODEL_EXPLICIT, data.explicit],
])
print(tb)
logging.info("====album " + str(data.id) + "====\n" +
@@ -199,12 +215,12 @@ class Printf(object):
@staticmethod
def track(data: Track, stream: StreamUrl = None):
tb = Printf.__gettable__([LANG.MODEL_TRACK_PROPERTY, LANG.VALUE], [
[LANG.MODEL_TITLE, data.title],
tb = Printf.__gettable__([LANG.select.MODEL_TRACK_PROPERTY, LANG.select.VALUE], [
[LANG.select.MODEL_TITLE, data.title],
["ID", data.id],
[LANG.MODEL_ALBUM, data.album.title],
[LANG.MODEL_VERSION, data.version],
[LANG.MODEL_EXPLICIT, data.explicit],
[LANG.select.MODEL_ALBUM, data.album.title],
[LANG.select.MODEL_VERSION, data.version],
[LANG.select.MODEL_EXPLICIT, data.explicit],
["Max-Q", data.audioQuality],
])
if stream is not None:
@@ -218,11 +234,11 @@ class Printf(object):
@staticmethod
def video(data: Video, stream: VideoStreamUrl = None):
tb = Printf.__gettable__([LANG.MODEL_VIDEO_PROPERTY, LANG.VALUE], [
[LANG.MODEL_TITLE, data.title],
[LANG.MODEL_ALBUM, data.album.title if data.album != None else None],
[LANG.MODEL_VERSION, data.version],
[LANG.MODEL_EXPLICIT, data.explicit],
tb = Printf.__gettable__([LANG.select.MODEL_VIDEO_PROPERTY, LANG.select.VALUE], [
[LANG.select.MODEL_TITLE, data.title],
[LANG.select.MODEL_ALBUM, data.album.title if data.album != None else None],
[LANG.select.MODEL_VERSION, data.version],
[LANG.select.MODEL_EXPLICIT, data.explicit],
["Max-Q", data.quality],
])
if stream is not None:
@@ -236,11 +252,11 @@ class Printf(object):
@staticmethod
def artist(data: Artist, num):
tb = Printf.__gettable__([LANG.MODEL_ARTIST_PROPERTY, LANG.VALUE], [
[LANG.MODEL_ID, data.id],
[LANG.MODEL_NAME, data.name],
tb = Printf.__gettable__([LANG.select.MODEL_ARTIST_PROPERTY, LANG.select.VALUE], [
[LANG.select.MODEL_ID, data.id],
[LANG.select.MODEL_NAME, data.name],
["Number of albums", num],
[LANG.MODEL_TYPE, str(data.type)],
[LANG.select.MODEL_TYPE, str(data.type)],
])
print(tb)
logging.info("====artist " + str(data.id) + "====\n" +
@@ -250,10 +266,10 @@ class Printf(object):
@staticmethod
def playlist(data):
tb = Printf.__gettable__([LANG.MODEL_PLAYLIST_PROPERTY, LANG.VALUE], [
[LANG.MODEL_TITLE, data.title],
[LANG.MODEL_TRACK_NUMBER, data.numberOfTracks],
[LANG.MODEL_VIDEO_NUMBER, data.numberOfVideos],
tb = Printf.__gettable__([LANG.select.MODEL_PLAYLIST_PROPERTY, LANG.select.VALUE], [
[LANG.select.MODEL_TITLE, data.title],
[LANG.select.MODEL_TRACK_NUMBER, data.numberOfTracks],
[LANG.select.MODEL_VIDEO_NUMBER, data.numberOfVideos],
])
print(tb)
logging.info("====playlist " + str(data.uuid) + "====\n" +
@@ -264,10 +280,10 @@ class Printf(object):
@staticmethod
def mix(data):
tb = Printf.__gettable__([LANG.MODEL_PLAYLIST_PROPERTY, LANG.VALUE], [
[LANG.MODEL_ID, data.id],
[LANG.MODEL_TRACK_NUMBER, len(data.tracks)],
[LANG.MODEL_VIDEO_NUMBER, len(data.videos)],
tb = Printf.__gettable__([LANG.select.MODEL_PLAYLIST_PROPERTY, LANG.select.VALUE], [
[LANG.select.MODEL_ID, data.id],
[LANG.select.MODEL_TRACK_NUMBER, len(data.tracks)],
[LANG.select.MODEL_VIDEO_NUMBER, len(data.videos)],
])
print(tb)
logging.info("====Mix " + str(data.id) + "====\n" +
+11 -1
View File
@@ -12,6 +12,7 @@ import json
import aigpy
import base64
from tidal_dl.lang.language import *
from tidal_dl.enums import *
@@ -25,18 +26,24 @@ class Settings(aigpy.model.ModelBase):
showProgress = True
showTrackInfo = True
saveAlbumInfo = False
downloadVideos = True
multiThread = False
downloadDelay = True
downloadPath = "./download/"
audioQuality = AudioQuality.Normal
videoQuality = VideoQuality.P360
usePlaylistFolder = True
albumFolderFormat = R"{ArtistName}/{Flag} {AlbumTitle} [{AlbumID}] [{AlbumYear}]"
playlistFolderFormat = R"Playlist/{PlaylistName} [{PlaylistUUID}]"
trackFileFormat = R"{TrackNumber} - {ArtistName} - {TrackTitle}{ExplicitFlag}"
videoFileFormat = R"{VideoNumber} - {ArtistName} - {VideoTitle}{ExplicitFlag}"
def getDefaultPathFormat(self, type: Type):
if type == Type.Album:
return R"{ArtistName}/{Flag} {AlbumTitle} [{AlbumID}] [{AlbumYear}]"
elif type == Type.Playlist:
return R"Playlist/{PlaylistName} [{PlaylistUUID}]"
elif type == Type.Track:
return R"{TrackNumber} - {ArtistName} - {TrackTitle}{ExplicitFlag}"
elif type == Type.Video:
@@ -70,10 +77,14 @@ class Settings(aigpy.model.ModelBase):
self.albumFolderFormat = self.getDefaultPathFormat(Type.Album)
if self.trackFileFormat is None:
self.trackFileFormat = self.getDefaultPathFormat(Type.Track)
if self.playlistFolderFormat is None:
self.playlistFolderFormat = self.getDefaultPathFormat(Type.Playlist)
if self.videoFileFormat is None:
self.videoFileFormat = self.getDefaultPathFormat(Type.Video)
if self.apiKeyIndex is None:
self.apiKeyIndex = 0
LANG.setLang(self.language)
def save(self):
data = aigpy.model.modelToDict(self)
@@ -83,7 +94,6 @@ class Settings(aigpy.model.ModelBase):
aigpy.file.write(self._path_, txt, 'w+')
class TokenSettings(aigpy.model.ModelBase):
userid = None
countryCode = None
+94 -3
View File
@@ -9,12 +9,17 @@
@Desc : tidal api
'''
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 *
from tidal_dl.settings import *
# SSL Warnings | retry number
requests.packages.urllib3.disable_warnings()
@@ -35,6 +40,21 @@ class TidalAPI(object):
for index in range(0, 3):
try:
respond = requests.get(urlpre + path, headers=header, params=params)
if respond.url.find("playbackinfopostpaywall") != -1 and SETTINGS.downloadDelay is not False:
# random sleep between 0.5 and 5 seconds and print it
sleep_time = random.randint(500, 5000) / 1000
print(f"Sleeping for {sleep_time} seconds, to mimic human behaviour and prevent too many requests error")
time.sleep(sleep_time)
if respond.status_code == 429:
print('Too many requests, waiting for 20 seconds...')
# Loop countdown 20 seconds and print the remaining time
for i in range(20, 0, -1):
time.sleep(1)
print(i, end=' ')
print('')
continue
result = json.loads(respond.text)
if 'status' not in result:
return result
@@ -87,12 +107,12 @@ class TidalAPI(object):
return ret
def __post__(self, path, data, auth=None, urlpre='https://auth.tidal.com/v1/oauth2'):
for index in range(0, 3):
for index in range(3):
try:
result = requests.post(urlpre+path, data=data, auth=auth, verify=False).json()
return result
except Exception as e:
if index >= 3:
if index == 2:
raise e
def getDeviceCode(self) -> str:
@@ -252,7 +272,7 @@ class TidalAPI(object):
tracks = []
videos = []
for item in data:
if item['type'] == 'track':
if item['type'] == 'track' and item['item']['streamReady']:
tracks.append(aigpy.model.dictToModel(item['item'], Track()))
else:
videos.append(aigpy.model.dictToModel(item['item'], Video()))
@@ -268,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:
@@ -276,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)
@@ -289,7 +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
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):
@@ -315,6 +404,8 @@ class TidalAPI(object):
return self.__get__(f'tracks/{str(id)}/contributors')
def getCoverUrl(self, sid, width="320", height="320"):
if sid is None:
return ""
return f"https://resources.tidal.com/images/{sid.replace('-', '/')}/{width}x{height}.jpg"
def getCoverData(self, sid, width="320", height="320"):
+169 -58
View File
@@ -1,139 +1,188 @@
TYPE tidal-dl
USE pip3 install tidal-dl --upgrade
#### v2022-10-31
- [X] Add delay setting by @grzekru
#### v2022-08-29
- [X] Fix #931
#### v2022-07-06
- [X] Mulithread download
#### v2022-06-23
- [X] remove redundant configuration
- [X] add simple-gui
- [X] optimize code
#### v2022-03-04
- [x] fix "file name contain *" #844
- [x] Update Vietnamese
- [x] update Hungarian
- [x] Update Ukrainian
- [x] Update Dutch
- [x] fix bug of setting path
- [X] fix "file name contain *" #844
- [X] Update Vietnamese
- [X] update Hungarian
- [X] Update Ukrainian
- [X] Update Dutch
- [X] fix bug of setting path
#### v2022-02-07
- [x] update api key by 1nikolas
- [X] update api key by 1nikolas
#### v2022-01-21
- [x] update api key by @morguldir
- [x] Fix bug of "ReleaseDate"
- [X] update api key by @morguldir
- [X] Fix bug of "ReleaseDate"
#### v2022-01-18
- [X] Gui: search view
- [X] Gui: download view
#### v2022-01-11
- [X] Settings: add type-folder(eg Album/Video/Playlist)
- [x] Album folder format support: {None}
- [X] Album folder format support: {None}
#### v2021-11-30
- [x] Add language:Japanese
- [x] Support select apikey(Different keys support different formats)
- [X] Add language:Japanese
- [X] Support select apikey(Different keys support different formats)
#### v2021-11-15
- [x] Add language:Korean
- [x] Update vietnamese
- [x] Additional tags for album path and track name
- [X] Add language:Korean
- [X] Update vietnamese
- [X] Additional tags for album path and track name
#### v2021-09-23
- [x] Get lyrics from tidal
- [x] Support mixes
- [X] Get lyrics from tidal
- [X] Support mixes
#### v2021-09-10
- [x] Add settings: show track-info
- [x] Fix bug of "Illegal characters in path"
- [X] Add settings: show track-info
- [X] Fix bug of "Illegal characters in path"
#### v2021-05-31
- [x] Add lyrics
- [X] Add lyrics
#### v2021-04-30
- [x] Add 'album info.txt'
- [x] Fix bug of download video
- [X] Add 'album info.txt'
- [X] Fix bug of download video
#### v2021-04-23
- [x] Show get-quality
- [x] Update language
- [x] Update settings: usePlaylistFolder
- [X] Show get-quality
- [X] Update language
- [X] Update settings: usePlaylistFolder
#### v2021-03-24
- [x] Fix bug of download video
- [x] Fix bug of 'Command line download'
- [X] Fix bug of download video
- [X] Fix bug of 'Command line download'
#### v2021-02-20
- [x] Add log
- [X] Add log
#### v2020-12-17
- [x] Show DOLBY_ATMOS flag [A]
- [x] Fix bug of "Connection aborted"(Linux platform)
- [x] Fix bug of download failed "stat: path should be string, bytes, os.PathLike or integer, not list"
- [X] Show DOLBY_ATMOS flag [A]
- [X] Fix bug of "Connection aborted"(Linux platform)
- [X] Fix bug of download failed "stat: path should be string, bytes, os.PathLike or integer, not list"
#### v2020-12-10
- [x] Add feature: set the accessToken manually
- [X] Add feature: set the accessToken manually
#### v2020-12-01
- [x] Fix bug of settings-path
- [x] Ability to download multiple urls at a time.
- [X] Fix bug of settings-path
- [X] Ability to download multiple urls at a time.
#### v2020-11-13
- [x] Change settings-file save path: XDG_CONFIG_HOME or HOME
- [x] Fix bug of multiThreadDownload
- [x] Choice: logout
#### v2020-11-09
- [x] New login-method: get the accessToken by opening the link, accessToken good for one week and auto refresh
- [X] Change settings-file save path: XDG_CONFIG_HOME or HOME
- [X] Fix bug of multiThreadDownload
- [X] Choice: logout
#### v2020-11-09
- [X] New login-method: get the accessToken by opening the link, accessToken good for one week and auto refresh
#### v2020-10-22
- [x] Settings: album folder format、track file format
- [x] Settings: show progress
- [x] Support language: german
- [x] Tag: composer
- [X] Add command opts: username\password\accessToken\quality\resolution
- [X] Settings: album folder format、track file format
- [X] Settings: show progress
- [X] Support language: german
- [X] Tag: composer
- [X] Add command opts: username\password\accessToken\quality\resolution
#### v2020-09-26
- [x] Fix: download video failed. Resolution parse error.
- [x] Windows: auto get accessToken from tidal-desktop cache
- [x] Download playlist to playlist folder
- [x] Fix: check exist
- [x] Support language vietnamese
- [x] Fix: download cover error (no album-cover)
- [x] Settings: usePlaylistFolder、 multiThreadDownload
- [x] Support language french
- [X] Fix: download video failed. Resolution parse error.
- [X] Windows: auto get accessToken from tidal-desktop cache
- [X] Download playlist to playlist folder
- [X] Fix: check exist
- [X] Support language vietnamese
- [X] Fix: download cover error (no album-cover)
- [X] Settings: usePlaylistFolder、 multiThreadDownload
- [X] Support language french
#### v2020-09-06
- usage by command: tidal-dl --help
#### v2020-08-30
- support language portuguese
- multithreading download a track
#### v2020-08-24
- add errmessage when downloading failed
- fix: macos - download failed
#### v2020-08-22
- support language spanish\croatian
#### v2020-08-21
- fix: get album path
- support download by file
- support language arabic\czech\itlian\russian\turkish\filipino
#### v2020-08-20
- fix: download playlist
- fix: settings
- fix: lack of multi-language module
#### v2020-08-19
- code rebuild
- multi-language
#### v2020-07-16
- Enter 10:Set AccessToken(authorization)
#### v2020-07-03
- Add label [E] before albumtitle #264
- Volume to CD
- Fix bug of ssl
#### v2020-06-28
- Fix bug of download-playlist
- ArtistName before title(settings)
- AlbumID before AlbumFolderName(settings)
@@ -141,6 +190,7 @@ USE pip3 install tidal-dl --upgrade
- Add errmessage when download err
#### v2020-06-14
- Reduce the number of logins
- Use another login method(from Redsea)
- Download Dolby Atmos(AC4 Codec\Low Quality\Mp4 format)
@@ -149,41 +199,51 @@ USE pip3 install tidal-dl --upgrade
- Fixed the bug of Download-HIRES
#### v2020-05-31
- Use CDN request
- Fix bug of redownload(download artist-albums)
- Add errmessage when login-err
- Fix bug of save-cover MacOs
#### v2020-05-19
- by Command(eg. tidal-dl https://tidal.com/browse/track/70973230)
- Add label [M] before albumtitle
- Update token
#### v2020-05-15
- Cloud token
#### v2020-05-14
- Update token
#### v2020-05-04
- Hide password
#### v2020-03-23
- Fix downloading redirects that can be obtained through the
/playbackinfopostpaywall method.
- When downloading, download to a .part file, which is then
either decrypted or renamed into place, to avoid leaving broken files.
#### v2020-3-17
#### v2020-3-17
- Fix bug of download ArtistAlbum
#### v2020-03-11
- Fix bug of 'Asset is not ready for playback'
#### v2020-03-10
- Update token
#### v2020-02-28
- Fix bug of savepath
- Add Year: before/After
- save covers(settings)
@@ -191,17 +251,20 @@ USE pip3 install tidal-dl --upgrade
- Fixno version in Tag
#### v2020-02-14
- Fix bug of download track
- ByUrl: add artist
- ByUrl: support 'https://tidal.com/browse/'
#### v2020-01-22
- Download artist album include singles(settings)
- Download by file include artist
- Fix english typos
- Fix bug of tracknumber(download playlist)
#### v2020-01-17
- Artists hyphen ';' to ', '
- Fix bug of download playlist
- Fix bug of download artwork
@@ -210,123 +273,157 @@ USE pip3 install tidal-dl --upgrade
- Playlist: add tracknum before tracktitle
#### v2019-10-26
- Download playlist by url
- Config 'AddYear' before album dir
- Download playlist track-picture
#### v2019-09-27
- Add skip switch when download atrist/file
- Fix bug of download playlist
#### v2019-09-10
- Fix bug of download videos
- Add version to title
- Add hyphen between number and title(settings)
#### v2019-09-02
- Fix bug of parse link
- Download by file
#### v2019-08-19
- Show Config
- Tag: add composer
#### v2019-08-17
- Download ArtistAlbum: Add EP&Singles
#### v2019-08-12
- Fix bug of tag
- Add setting-showprogress (Only enable when threadnum=1)
#### v2019-08-11
- Fix tag of title
- Download album videos
#### v2019-08-07
- Fix Bug: login;threadnum
- Fix Bug: login;threadnum
#### v2019-08-05
- Support python 2.7
#### v2019-07-30
- Add Setting-OnlyM4a(auto covert mp4 To m4a)
- Fix some bug when first login
- Check ffmpeg status
#### v2019-07-23
- CLI: add a serial number before the file name
#### v2019-07-22
- Fix Some Bug
#### v2019-07-18
- Fix Bug: Set Metadata
#### v2019-07-12
- Fix Some Bug
#### v2019-07-11
- Add Func:Download By Url
#### v2019-07-01
- Add HI_RES Quality
#### v2019-06-24
- Fix Bug When Downloading Playlist
#### v2019-06-16
- Fix Bug Of Track Tag
- Fix Bug Of Track Tag
#### v2019-06-01
- Fix Encoding BUG
- Add Cover To Track
#### v2019-05-08
- Update FFmpegTool
#### v2019-05-06
- Change 'Track' TargetDir
- Download 'Playlist'&'Track' Image
- Fuc: Download ArtistAlbums
#### v2019-04-23
- Add 'Resolution' To Config
- Change Playlist Items TrackNum
#### v2019-04-22
- Download Album: Track Title Append Version
#### v2019-04-16
- Change Album TargetDir
- Add 'ReleaseDate' to Track Metadata
- Remove BUG:Playlist Path
#### v2019-04-11
- Remove BUG:Download Playlist Video
#### v2019-04-08
- Change Tmp File Flag
#### v2019-04-02
- Highlight(Only Linux)
#### v2019-04-01
- Remove Encoding Err
#### v2019-03-29
- Dl Album:If Exist TrackFile. Support ReDownload Or Ignore
#### v2019-03-28
- Check After Set Metadata
#### v2019-03-13
- Deal Err: Get pip version failed
#### v2019-03-11
- Check Files After Download Playlist
- Show Last Version
#### v2019-03-06
- Add Config 'ThreadNum'
- Support Linux
- Add 'requirements.txt'
@@ -334,52 +431,66 @@ USE pip3 install tidal-dl --upgrade
- Set Metadata in Linux
#### v2019-03-04
- Simplified Code
#### v2019-02-27
- Download FavoriteVideos
#### v2019-02-26
- Download Playlist:Deal with err 'Too Big Page'
#### v2019-02-25
- Playlist LimitNum = 9999
- Download FavoriteTracks
#### v2019-02-19
- Print more err message
#### v2019-02-19
- Download AlbumCover
- Set Track Metadata
#### v2019-02-14
- Set music-filetype by StreamUrlInfo
#### v2019-01-28
- Add decryption.py -- Download LOSSLESS music
#### v2018-12-28
- Add Progressbar - Download Video
- Add Progressbar - Download Video
#### v2018-12-19
- Update ffmpegHelper
- Simplified Code
#### v2018-12-11
- Fuc: Download Playlist Video
#### v2018-12-01
- Optimized Code
- Multithreading Download Video
- Fuc: Download Playlist
#### v2018-11-22
- Multithreading Download
- Fuc: Download Track
- Fuc: Download Video
#### v2018-11-21
- Func: Download Album
- Func: Get SessionID By Account
- Upload Version To PIP Server : pip install tidal-dl
-58
View File
@@ -1,58 +0,0 @@
cd TIDALDL-PY
rm -rf dist
rm -rf build
rm -rf exe/tidal-dl.exe
rm MANIFEST.in
rm -rf tidal_dl.egg-info
rm -rf tidal_gui.egg-info
rm -rf tidal_dl_test.egg-info
mkdir exe
# pack
python setup.py sdist bdist_wheel
# creat exe file
pyinstaller -F tidal_dl/__init__.py
# rename exe name
mv dist/__init__.exe exe/tidal-dl.exe
pip uninstall -y tidal-dl
# creat requirements.txt
# pipreqs ./ --force --encoding=utf8
# python setup.py install
# upload
twine upload dist/*
cd TIDALDL-PY
rm -rf dist
rm -rf build
rm -rf exe/tidal-gui.exe
cp -rf guiStatic.in MANIFEST.in
rm -rf tidal_dl.egg-info
rm -rf tidal_gui.egg-info
rm -rf tidal_dl_test.egg-info
# pack
python setup-gui.py sdist bdist_wheel
# creat exe file
pyinstaller -F tidal_gui/__init__.py -w
pyinstaller -F -w -p C:/Windows/System32/downlevel tidal_gui/__init__.py
# rename exe name
mv dist/__init__.exe exe/tidal-gui.exe
pip uninstall -y tidal-gui
# upload
twine upload dist/*
+20
View File
@@ -0,0 +1,20 @@
rm -rf dist
rm -rf build
rm -rf __init__.spec
cd TIDALDL-PY
rm -rf __init__.spec
rm -rf dist
rm -rf build
rm -rf exe
rm -rf MANIFEST.in
rm -rf *.egg-info
python setup.py sdist bdist_wheel
pyinstaller -F tidal_dl/__init__.py
mkdir exe
mv dist/__init__.exe exe/tidal-dl.exe
pip uninstall -y tidal-dl
cd ..
+908
View File
@@ -0,0 +1,908 @@
2023-09-06T02:49:42.9612887Z Requested labels: macos-latest
2023-09-06T02:49:42.9613141Z Job defined at: yaronzz/Tidal-Media-Downloader/.github/workflows/build.yml@refs/heads/test-workflow
2023-09-06T02:49:42.9613257Z Waiting for a runner to pick up this job...
2023-09-06T02:49:43.2883430Z Job is waiting for a hosted runner to come online.
2023-09-06T02:49:49.2005699Z Job is about to start running on the hosted runner: GitHub Actions 4 (hosted)
2023-09-06T02:49:52.6736100Z Current runner version: '2.308.0'
2023-09-06T02:49:52.6829780Z ##[group]Operating System
2023-09-06T02:49:52.6830630Z macOS
2023-09-06T02:49:52.6831060Z 12.6.7
2023-09-06T02:49:52.6831330Z 21G651
2023-09-06T02:49:52.6831680Z ##[endgroup]
2023-09-06T02:49:52.6832030Z ##[group]Runner Image
2023-09-06T02:49:52.6832370Z Image: macos-12
2023-09-06T02:49:52.6832830Z Version: 20230825.1
2023-09-06T02:49:52.6833410Z Included Software: https://github.com/actions/runner-images/blob/macOS-12/20230825.1/images/macos/macos-12-Readme.md
2023-09-06T02:49:52.6834070Z Image Release: https://github.com/actions/runner-images/releases/tag/macOS-12%2F20230825.1
2023-09-06T02:49:52.6834510Z ##[endgroup]
2023-09-06T02:49:52.6834890Z ##[group]Runner Image Provisioner
2023-09-06T02:49:52.6835350Z 2.0.266.1
2023-09-06T02:49:52.6835620Z ##[endgroup]
2023-09-06T02:49:52.6836850Z ##[group]GITHUB_TOKEN Permissions
2023-09-06T02:49:52.6837620Z Actions: write
2023-09-06T02:49:52.6838140Z Checks: write
2023-09-06T02:49:52.6839050Z Contents: write
2023-09-06T02:49:52.6839620Z Deployments: write
2023-09-06T02:49:52.6839950Z Discussions: write
2023-09-06T02:49:52.6840310Z Issues: write
2023-09-06T02:49:52.6840650Z Metadata: read
2023-09-06T02:49:52.6840950Z Packages: write
2023-09-06T02:49:52.6841360Z Pages: write
2023-09-06T02:49:52.6841730Z PullRequests: write
2023-09-06T02:49:52.6842070Z RepositoryProjects: write
2023-09-06T02:49:52.6930470Z SecurityEvents: write
2023-09-06T02:49:52.6930940Z Statuses: write
2023-09-06T02:49:52.6931570Z ##[endgroup]
2023-09-06T02:49:52.6939150Z Secret source: Actions
2023-09-06T02:49:52.6939810Z Prepare workflow directory
2023-09-06T02:49:52.8672910Z Prepare all required actions
2023-09-06T02:49:52.9587950Z Getting action download info
2023-09-06T02:49:53.1604860Z Download action repository 'actions/checkout@v3' (SHA:f43a0e5ff2bd294095638e18286ca9a3d1956744)
2023-09-06T02:49:54.2160180Z Download action repository 'actions/upload-artifact@v3' (SHA:0b7f8abb1508181956e8e162db84b466c27e18ce)
2023-09-06T02:49:54.7042440Z Complete job name: build (macos-latest)
2023-09-06T02:49:54.9046350Z ##[group]Run actions/checkout@v3
2023-09-06T02:49:54.9046830Z with:
2023-09-06T02:49:54.9047100Z fetch-depth: 0
2023-09-06T02:49:54.9047480Z repository: yaronzz/Tidal-Media-Downloader
2023-09-06T02:49:54.9048130Z token: ***
2023-09-06T02:49:54.9048430Z ssh-strict: true
2023-09-06T02:49:54.9048680Z persist-credentials: true
2023-09-06T02:49:54.9048980Z clean: true
2023-09-06T02:49:54.9049510Z sparse-checkout-cone-mode: true
2023-09-06T02:49:54.9049830Z fetch-tags: false
2023-09-06T02:49:54.9050120Z lfs: false
2023-09-06T02:49:54.9050440Z submodules: false
2023-09-06T02:49:54.9050860Z set-safe-directory: true
2023-09-06T02:49:54.9051180Z ##[endgroup]
2023-09-06T02:49:56.4157950Z Syncing repository: yaronzz/Tidal-Media-Downloader
2023-09-06T02:49:56.4160760Z ##[group]Getting Git version info
2023-09-06T02:49:56.4161440Z Working directory is '/Users/runner/work/Tidal-Media-Downloader/Tidal-Media-Downloader'
2023-09-06T02:49:56.4162630Z [command]/usr/local/bin/git version
2023-09-06T02:49:56.5771730Z git version 2.42.0
2023-09-06T02:49:56.5814880Z ##[endgroup]
2023-09-06T02:49:56.5839060Z Copying '/Users/runner/.gitconfig' to '/Users/runner/work/_temp/b2ae5887-6418-4170-824b-0ba8ad2d2e0c/.gitconfig'
2023-09-06T02:49:56.5853610Z Temporarily overriding HOME='/Users/runner/work/_temp/b2ae5887-6418-4170-824b-0ba8ad2d2e0c' before making global git config changes
2023-09-06T02:49:56.5854270Z Adding repository directory to the temporary git global config as a safe directory
2023-09-06T02:49:56.5860700Z [command]/usr/local/bin/git config --global --add safe.directory /Users/runner/work/Tidal-Media-Downloader/Tidal-Media-Downloader
2023-09-06T02:49:56.6015980Z Deleting the contents of '/Users/runner/work/Tidal-Media-Downloader/Tidal-Media-Downloader'
2023-09-06T02:49:56.6023420Z ##[group]Initializing the repository
2023-09-06T02:49:56.6029560Z [command]/usr/local/bin/git init /Users/runner/work/Tidal-Media-Downloader/Tidal-Media-Downloader
2023-09-06T02:49:56.6287000Z hint: Using 'master' as the name for the initial branch. This default branch name
2023-09-06T02:49:56.6287980Z hint: is subject to change. To configure the initial branch name to use in all
2023-09-06T02:49:56.6289440Z hint: of your new repositories, which will suppress this warning, call:
2023-09-06T02:49:56.6290280Z hint:
2023-09-06T02:49:56.6290870Z hint: git config --global init.defaultBranch <name>
2023-09-06T02:49:56.6291220Z hint:
2023-09-06T02:49:56.6291670Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2023-09-06T02:49:56.6292290Z hint: 'development'. The just-created branch can be renamed via this command:
2023-09-06T02:49:56.6293350Z hint:
2023-09-06T02:49:56.6293800Z hint: git branch -m <name>
2023-09-06T02:49:56.6332640Z Initialized empty Git repository in /Users/runner/work/Tidal-Media-Downloader/Tidal-Media-Downloader/.git/
2023-09-06T02:49:56.6350310Z [command]/usr/local/bin/git remote add origin https://github.com/yaronzz/Tidal-Media-Downloader
2023-09-06T02:49:56.6481190Z ##[endgroup]
2023-09-06T02:49:56.6481810Z ##[group]Disabling automatic garbage collection
2023-09-06T02:49:56.6489300Z [command]/usr/local/bin/git config --local gc.auto 0
2023-09-06T02:49:56.6598510Z ##[endgroup]
2023-09-06T02:49:56.6599350Z ##[group]Setting up auth
2023-09-06T02:49:56.6612460Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2023-09-06T02:49:56.6721100Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2023-09-06T02:49:56.8732720Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2023-09-06T02:49:56.8836700Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2023-09-06T02:49:57.0118890Z [command]/usr/local/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2023-09-06T02:49:57.0238170Z ##[endgroup]
2023-09-06T02:49:57.0239440Z ##[group]Fetching the repository
2023-09-06T02:49:57.0253600Z [command]/usr/local/bin/git -c protocol.version=2 fetch --prune --progress --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/*
2023-09-06T02:49:57.2687240Z remote: Enumerating objects: 6438, done.
2023-09-06T02:49:57.2693350Z remote: Counting objects: 0% (1/453)
2023-09-06T02:49:57.2694540Z remote: Counting objects: 1% (5/453)
2023-09-06T02:49:57.2696320Z remote: Counting objects: 2% (10/453)
2023-09-06T02:49:57.2699150Z remote: Counting objects: 3% (14/453)
2023-09-06T02:49:57.2700470Z remote: Counting objects: 4% (19/453)
2023-09-06T02:49:57.2701140Z remote: Counting objects: 5% (23/453)
2023-09-06T02:49:57.2701710Z remote: Counting objects: 6% (28/453)
2023-09-06T02:49:57.2702300Z remote: Counting objects: 7% (32/453)
2023-09-06T02:49:57.2702800Z remote: Counting objects: 8% (37/453)
2023-09-06T02:49:57.2703170Z remote: Counting objects: 9% (41/453)
2023-09-06T02:49:57.2703540Z remote: Counting objects: 10% (46/453)
2023-09-06T02:49:57.2703860Z remote: Counting objects: 11% (50/453)
2023-09-06T02:49:57.2826890Z remote: Counting objects: 12% (55/453)
2023-09-06T02:49:57.2827470Z remote: Counting objects: 13% (59/453)
2023-09-06T02:49:57.2827870Z remote: Counting objects: 14% (64/453)
2023-09-06T02:49:57.2828300Z remote: Counting objects: 15% (68/453)
2023-09-06T02:49:57.2828560Z remote: Counting objects: 16% (73/453)
2023-09-06T02:49:57.2828970Z remote: Counting objects: 17% (78/453)
2023-09-06T02:49:57.2829310Z remote: Counting objects: 18% (82/453)
2023-09-06T02:49:57.2829610Z remote: Counting objects: 19% (87/453)
2023-09-06T02:49:57.2831010Z remote: Counting objects: 20% (91/453)
2023-09-06T02:49:57.2831340Z remote: Counting objects: 21% (96/453)
2023-09-06T02:49:57.2831860Z remote: Counting objects: 22% (100/453)
2023-09-06T02:49:57.2832160Z remote: Counting objects: 23% (105/453)
2023-09-06T02:49:57.2832530Z remote: Counting objects: 24% (109/453)
2023-09-06T02:49:57.2833020Z remote: Counting objects: 25% (114/453)
2023-09-06T02:49:57.2833340Z remote: Counting objects: 26% (118/453)
2023-09-06T02:49:57.2833670Z remote: Counting objects: 27% (123/453)
2023-09-06T02:49:57.2834010Z remote: Counting objects: 28% (127/453)
2023-09-06T02:49:57.2834300Z remote: Counting objects: 29% (132/453)
2023-09-06T02:49:57.2834760Z remote: Counting objects: 30% (136/453)
2023-09-06T02:49:57.2835120Z remote: Counting objects: 31% (141/453)
2023-09-06T02:49:57.2835410Z remote: Counting objects: 32% (145/453)
2023-09-06T02:49:57.2835760Z remote: Counting objects: 33% (150/453)
2023-09-06T02:49:57.2836310Z remote: Counting objects: 34% (155/453)
2023-09-06T02:49:57.2836800Z remote: Counting objects: 35% (159/453)
2023-09-06T02:49:57.2837100Z remote: Counting objects: 36% (164/453)
2023-09-06T02:49:57.2837810Z remote: Counting objects: 37% (168/453)
2023-09-06T02:49:57.2838150Z remote: Counting objects: 38% (173/453)
2023-09-06T02:49:57.2838450Z remote: Counting objects: 39% (177/453)
2023-09-06T02:49:57.2838710Z remote: Counting objects: 40% (182/453)
2023-09-06T02:49:57.2839230Z remote: Counting objects: 41% (186/453)
2023-09-06T02:49:57.2839490Z remote: Counting objects: 42% (191/453)
2023-09-06T02:49:57.2839750Z remote: Counting objects: 43% (195/453)
2023-09-06T02:49:57.2840010Z remote: Counting objects: 44% (200/453)
2023-09-06T02:49:57.2840310Z remote: Counting objects: 45% (204/453)
2023-09-06T02:49:57.2841240Z remote: Counting objects: 46% (209/453)
2023-09-06T02:49:57.2841910Z remote: Counting objects: 47% (213/453)
2023-09-06T02:49:57.2842260Z remote: Counting objects: 48% (218/453)
2023-09-06T02:49:57.2842560Z remote: Counting objects: 49% (222/453)
2023-09-06T02:49:57.2842890Z remote: Counting objects: 50% (227/453)
2023-09-06T02:49:57.2843460Z remote: Counting objects: 51% (232/453)
2023-09-06T02:49:57.2843730Z remote: Counting objects: 52% (236/453)
2023-09-06T02:49:57.2843990Z remote: Counting objects: 53% (241/453)
2023-09-06T02:49:57.2844240Z remote: Counting objects: 54% (245/453)
2023-09-06T02:49:57.2844530Z remote: Counting objects: 55% (250/453)
2023-09-06T02:49:57.2844790Z remote: Counting objects: 56% (254/453)
2023-09-06T02:49:57.2845060Z remote: Counting objects: 57% (259/453)
2023-09-06T02:49:57.2845310Z remote: Counting objects: 58% (263/453)
2023-09-06T02:49:57.2845580Z remote: Counting objects: 59% (268/453)
2023-09-06T02:49:57.2845890Z remote: Counting objects: 60% (272/453)
2023-09-06T02:49:57.2846250Z remote: Counting objects: 61% (277/453)
2023-09-06T02:49:57.2846510Z remote: Counting objects: 62% (281/453)
2023-09-06T02:49:57.2846760Z remote: Counting objects: 63% (286/453)
2023-09-06T02:49:57.2847180Z remote: Counting objects: 64% (290/453)
2023-09-06T02:49:57.2847450Z remote: Counting objects: 65% (295/453)
2023-09-06T02:49:57.2847700Z remote: Counting objects: 66% (299/453)
2023-09-06T02:49:57.2848020Z remote: Counting objects: 67% (304/453)
2023-09-06T02:49:57.2848340Z remote: Counting objects: 68% (309/453)
2023-09-06T02:49:57.2848620Z remote: Counting objects: 69% (313/453)
2023-09-06T02:49:57.2848930Z remote: Counting objects: 70% (318/453)
2023-09-06T02:49:57.2849430Z remote: Counting objects: 71% (322/453)
2023-09-06T02:49:57.2850390Z remote: Counting objects: 72% (327/453)
2023-09-06T02:49:57.2850690Z remote: Counting objects: 73% (331/453)
2023-09-06T02:49:57.2850960Z remote: Counting objects: 74% (336/453)
2023-09-06T02:49:57.2851270Z remote: Counting objects: 75% (340/453)
2023-09-06T02:49:57.2851530Z remote: Counting objects: 76% (345/453)
2023-09-06T02:49:57.2851850Z remote: Counting objects: 77% (349/453)
2023-09-06T02:49:57.2852170Z remote: Counting objects: 78% (354/453)
2023-09-06T02:49:57.2852460Z remote: Counting objects: 79% (358/453)
2023-09-06T02:49:57.2852750Z remote: Counting objects: 80% (363/453)
2023-09-06T02:49:57.2853080Z remote: Counting objects: 81% (367/453)
2023-09-06T02:49:57.2853410Z remote: Counting objects: 82% (372/453)
2023-09-06T02:49:57.2853700Z remote: Counting objects: 83% (376/453)
2023-09-06T02:49:57.2854030Z remote: Counting objects: 84% (381/453)
2023-09-06T02:49:57.2854370Z remote: Counting objects: 85% (386/453)
2023-09-06T02:49:57.2854660Z remote: Counting objects: 86% (390/453)
2023-09-06T02:49:57.2854990Z remote: Counting objects: 87% (395/453)
2023-09-06T02:49:57.2855310Z remote: Counting objects: 88% (399/453)
2023-09-06T02:49:57.2855600Z remote: Counting objects: 89% (404/453)
2023-09-06T02:49:57.2855910Z remote: Counting objects: 90% (408/453)
2023-09-06T02:49:57.2856230Z remote: Counting objects: 91% (413/453)
2023-09-06T02:49:57.2856540Z remote: Counting objects: 92% (417/453)
2023-09-06T02:49:57.2856820Z remote: Counting objects: 93% (422/453)
2023-09-06T02:49:57.2857140Z remote: Counting objects: 94% (426/453)
2023-09-06T02:49:57.2857450Z remote: Counting objects: 95% (431/453)
2023-09-06T02:49:57.2857730Z remote: Counting objects: 96% (435/453)
2023-09-06T02:49:57.2858050Z remote: Counting objects: 97% (440/453)
2023-09-06T02:49:57.2858370Z remote: Counting objects: 98% (444/453)
2023-09-06T02:49:57.2859180Z remote: Counting objects: 99% (449/453)
2023-09-06T02:49:57.2859970Z remote: Counting objects: 100% (453/453)
2023-09-06T02:49:57.2860530Z remote: Counting objects: 100% (453/453), done.
2023-09-06T02:49:57.2860860Z remote: Compressing objects: 0% (1/174)
2023-09-06T02:49:57.2861460Z remote: Compressing objects: 1% (2/174)
2023-09-06T02:49:57.2861810Z remote: Compressing objects: 2% (4/174)
2023-09-06T02:49:57.2862420Z remote: Compressing objects: 3% (6/174)
2023-09-06T02:49:57.2862780Z remote: Compressing objects: 4% (7/174)
2023-09-06T02:49:57.2863130Z remote: Compressing objects: 5% (9/174)
2023-09-06T02:49:57.2863470Z remote: Compressing objects: 6% (11/174)
2023-09-06T02:49:57.2863780Z remote: Compressing objects: 7% (13/174)
2023-09-06T02:49:57.2864470Z remote: Compressing objects: 8% (14/174)
2023-09-06T02:49:57.2864850Z remote: Compressing objects: 9% (16/174)
2023-09-06T02:49:57.2865350Z remote: Compressing objects: 10% (18/174)
2023-09-06T02:49:57.2865740Z remote: Compressing objects: 11% (20/174)
2023-09-06T02:49:57.2866070Z remote: Compressing objects: 12% (21/174)
2023-09-06T02:49:57.2866360Z remote: Compressing objects: 13% (23/174)
2023-09-06T02:49:57.2866650Z remote: Compressing objects: 14% (25/174)
2023-09-06T02:49:57.2866980Z remote: Compressing objects: 15% (27/174)
2023-09-06T02:49:57.2867320Z remote: Compressing objects: 16% (28/174)
2023-09-06T02:49:57.2867620Z remote: Compressing objects: 17% (30/174)
2023-09-06T02:49:57.2867940Z remote: Compressing objects: 18% (32/174)
2023-09-06T02:49:57.2868270Z remote: Compressing objects: 19% (34/174)
2023-09-06T02:49:57.2868570Z remote: Compressing objects: 20% (35/174)
2023-09-06T02:49:57.2868910Z remote: Compressing objects: 21% (37/174)
2023-09-06T02:49:57.2869910Z remote: Compressing objects: 22% (39/174)
2023-09-06T02:49:57.2870220Z remote: Compressing objects: 23% (41/174)
2023-09-06T02:49:57.2870570Z remote: Compressing objects: 24% (42/174)
2023-09-06T02:49:57.2870900Z remote: Compressing objects: 25% (44/174)
2023-09-06T02:49:57.2871240Z remote: Compressing objects: 26% (46/174)
2023-09-06T02:49:57.2871540Z remote: Compressing objects: 27% (47/174)
2023-09-06T02:49:57.2871880Z remote: Compressing objects: 28% (49/174)
2023-09-06T02:49:57.2872220Z remote: Compressing objects: 29% (51/174)
2023-09-06T02:49:57.2872520Z remote: Compressing objects: 30% (53/174)
2023-09-06T02:49:57.2877640Z remote: Compressing objects: 31% (54/174)
2023-09-06T02:49:57.2888660Z remote: Compressing objects: 32% (56/174)
2023-09-06T02:49:57.2893650Z remote: Compressing objects: 33% (58/174)
2023-09-06T02:49:57.2902850Z remote: Compressing objects: 34% (60/174)
2023-09-06T02:49:57.2909080Z remote: Compressing objects: 35% (61/174)
2023-09-06T02:49:57.2915550Z remote: Compressing objects: 36% (63/174)
2023-09-06T02:49:57.2925220Z remote: Compressing objects: 37% (65/174)
2023-09-06T02:49:57.2933020Z remote: Compressing objects: 38% (67/174)
2023-09-06T02:49:57.2935900Z remote: Compressing objects: 39% (68/174)
2023-09-06T02:49:57.2945960Z remote: Compressing objects: 40% (70/174)
2023-09-06T02:49:57.2952290Z remote: Compressing objects: 41% (72/174)
2023-09-06T02:49:57.2953190Z remote: Compressing objects: 42% (74/174)
2023-09-06T02:49:57.2957070Z remote: Compressing objects: 43% (75/174)
2023-09-06T02:49:57.2958450Z remote: Compressing objects: 44% (77/174)
2023-09-06T02:49:57.2959680Z remote: Compressing objects: 45% (79/174)
2023-09-06T02:49:57.2961280Z remote: Compressing objects: 46% (81/174)
2023-09-06T02:49:57.2963260Z remote: Compressing objects: 47% (82/174)
2023-09-06T02:49:57.2968210Z remote: Compressing objects: 48% (84/174)
2023-09-06T02:49:57.2970610Z remote: Compressing objects: 49% (86/174)
2023-09-06T02:49:57.2973890Z remote: Compressing objects: 50% (87/174)
2023-09-06T02:49:57.2975610Z remote: Compressing objects: 51% (89/174)
2023-09-06T02:49:57.2976930Z remote: Compressing objects: 52% (91/174)
2023-09-06T02:49:57.2977540Z remote: Compressing objects: 53% (93/174)
2023-09-06T02:49:57.2979010Z remote: Compressing objects: 54% (94/174)
2023-09-06T02:49:57.2980280Z remote: Compressing objects: 55% (96/174)
2023-09-06T02:49:57.2981030Z remote: Compressing objects: 56% (98/174)
2023-09-06T02:49:57.2981390Z remote: Compressing objects: 57% (100/174)
2023-09-06T02:49:57.2982450Z remote: Compressing objects: 58% (101/174)
2023-09-06T02:49:57.2984080Z remote: Compressing objects: 59% (103/174)
2023-09-06T02:49:57.2984470Z remote: Compressing objects: 60% (105/174)
2023-09-06T02:49:57.2984860Z remote: Compressing objects: 61% (107/174)
2023-09-06T02:49:57.2985250Z remote: Compressing objects: 62% (108/174)
2023-09-06T02:49:57.2985570Z remote: Compressing objects: 63% (110/174)
2023-09-06T02:49:57.2985920Z remote: Compressing objects: 64% (112/174)
2023-09-06T02:49:57.2986280Z remote: Compressing objects: 65% (114/174)
2023-09-06T02:49:57.2986570Z remote: Compressing objects: 66% (115/174)
2023-09-06T02:49:57.2986850Z remote: Compressing objects: 67% (117/174)
2023-09-06T02:49:57.2987180Z remote: Compressing objects: 68% (119/174)
2023-09-06T02:49:57.2987470Z remote: Compressing objects: 69% (121/174)
2023-09-06T02:49:57.2987800Z remote: Compressing objects: 70% (122/174)
2023-09-06T02:49:57.2988170Z remote: Compressing objects: 71% (124/174)
2023-09-06T02:49:57.2988520Z remote: Compressing objects: 72% (126/174)
2023-09-06T02:49:57.2989740Z remote: Compressing objects: 73% (128/174)
2023-09-06T02:49:57.2990090Z remote: Compressing objects: 74% (129/174)
2023-09-06T02:49:57.2990700Z remote: Compressing objects: 75% (131/174)
2023-09-06T02:49:57.2991050Z remote: Compressing objects: 76% (133/174)
2023-09-06T02:49:57.2991400Z remote: Compressing objects: 77% (134/174)
2023-09-06T02:49:57.2991730Z remote: Compressing objects: 78% (136/174)
2023-09-06T02:49:57.2992050Z remote: Compressing objects: 79% (138/174)
2023-09-06T02:49:57.2992350Z remote: Compressing objects: 80% (140/174)
2023-09-06T02:49:57.2992670Z remote: Compressing objects: 81% (141/174)
2023-09-06T02:49:57.2993010Z remote: Compressing objects: 82% (143/174)
2023-09-06T02:49:57.2993300Z remote: Compressing objects: 83% (145/174)
2023-09-06T02:49:57.2994170Z remote: Compressing objects: 84% (147/174)
2023-09-06T02:49:57.2994880Z remote: Compressing objects: 85% (148/174)
2023-09-06T02:49:57.2995220Z remote: Compressing objects: 86% (150/174)
2023-09-06T02:49:57.2995540Z remote: Compressing objects: 87% (152/174)
2023-09-06T02:49:57.2996320Z remote: Compressing objects: 88% (154/174)
2023-09-06T02:49:57.2997030Z remote: Compressing objects: 89% (155/174)
2023-09-06T02:49:57.2997410Z remote: Compressing objects: 90% (157/174)
2023-09-06T02:49:57.2997960Z remote: Compressing objects: 91% (159/174)
2023-09-06T02:49:57.2998260Z remote: Compressing objects: 92% (161/174)
2023-09-06T02:49:57.2998640Z remote: Compressing objects: 93% (162/174)
2023-09-06T02:49:57.2998980Z remote: Compressing objects: 94% (164/174)
2023-09-06T02:49:57.2999290Z remote: Compressing objects: 95% (166/174)
2023-09-06T02:49:57.2999800Z remote: Compressing objects: 96% (168/174)
2023-09-06T02:49:57.3000150Z remote: Compressing objects: 97% (169/174)
2023-09-06T02:49:57.3001500Z remote: Compressing objects: 98% (171/174)
2023-09-06T02:49:57.3002580Z remote: Compressing objects: 99% (173/174)
2023-09-06T02:49:57.3003120Z remote: Compressing objects: 100% (174/174)
2023-09-06T02:49:57.3004750Z remote: Compressing objects: 100% (174/174), done.
2023-09-06T02:49:57.3110090Z Receiving objects: 0% (1/6438)
2023-09-06T02:49:57.3124710Z Receiving objects: 1% (65/6438)
2023-09-06T02:49:57.3140830Z Receiving objects: 2% (129/6438)
2023-09-06T02:49:57.3155640Z Receiving objects: 3% (194/6438)
2023-09-06T02:49:57.3168830Z Receiving objects: 4% (258/6438)
2023-09-06T02:49:57.3180250Z Receiving objects: 5% (322/6438)
2023-09-06T02:49:57.3188940Z Receiving objects: 6% (387/6438)
2023-09-06T02:49:57.3199550Z Receiving objects: 7% (451/6438)
2023-09-06T02:49:57.3209800Z Receiving objects: 8% (516/6438)
2023-09-06T02:49:57.3218280Z Receiving objects: 9% (580/6438)
2023-09-06T02:49:58.3627990Z Receiving objects: 10% (644/6438)
2023-09-06T02:49:58.3643070Z Receiving objects: 11% (709/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.3653900Z Receiving objects: 12% (773/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.3670110Z Receiving objects: 13% (837/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.3816100Z Receiving objects: 14% (902/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.3827980Z Receiving objects: 14% (952/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.7727260Z Receiving objects: 15% (966/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.7738800Z Receiving objects: 16% (1031/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.7750370Z Receiving objects: 17% (1095/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.8654770Z Receiving objects: 18% (1159/6438), 44.19 MiB | 44.18 MiB/s
2023-09-06T02:49:58.8656300Z Receiving objects: 19% (1224/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:58.8665090Z Receiving objects: 20% (1288/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:58.8666240Z Receiving objects: 21% (1352/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:58.8669370Z Receiving objects: 22% (1417/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.1900760Z Receiving objects: 23% (1481/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.1904530Z Receiving objects: 24% (1546/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.1996390Z Receiving objects: 25% (1610/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.2002000Z Receiving objects: 26% (1674/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.2012040Z Receiving objects: 27% (1739/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.3095150Z Receiving objects: 28% (1803/6438), 72.79 MiB | 48.52 MiB/s
2023-09-06T02:49:59.3778380Z Receiving objects: 28% (1810/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.5791350Z Receiving objects: 29% (1868/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.5793020Z Receiving objects: 30% (1932/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.7881860Z Receiving objects: 31% (1996/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.7885020Z Receiving objects: 32% (2061/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.7886460Z Receiving objects: 33% (2125/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.7951360Z Receiving objects: 34% (2189/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.8090780Z Receiving objects: 35% (2254/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.9955430Z Receiving objects: 36% (2318/6438), 98.04 MiB | 49.02 MiB/s
2023-09-06T02:49:59.9981430Z Receiving objects: 37% (2383/6438), 128.62 MiB | 51.44 MiB/s
2023-09-06T02:50:00.0210410Z Receiving objects: 38% (2447/6438), 128.62 MiB | 51.44 MiB/s
2023-09-06T02:50:00.0252980Z Receiving objects: 39% (2511/6438), 128.62 MiB | 51.44 MiB/s
2023-09-06T02:50:00.2581280Z Receiving objects: 40% (2576/6438), 128.62 MiB | 51.44 MiB/s
2023-09-06T02:50:00.3095390Z Receiving objects: 41% (2640/6438), 128.62 MiB | 51.44 MiB/s
2023-09-06T02:50:00.6446890Z Receiving objects: 41% (2682/6438), 154.91 MiB | 51.64 MiB/s
2023-09-06T02:50:00.6832640Z Receiving objects: 42% (2704/6438), 154.91 MiB | 51.64 MiB/s
2023-09-06T02:50:00.9661330Z Receiving objects: 43% (2769/6438), 154.91 MiB | 51.64 MiB/s
2023-09-06T02:50:00.9759590Z Receiving objects: 44% (2833/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:00.9762930Z Receiving objects: 45% (2898/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.0151790Z Receiving objects: 46% (2962/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.0471900Z Receiving objects: 47% (3026/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.0478430Z Receiving objects: 48% (3091/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2262450Z Receiving objects: 49% (3155/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2390500Z Receiving objects: 50% (3219/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2436430Z Receiving objects: 51% (3284/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2443360Z Receiving objects: 52% (3348/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2506700Z Receiving objects: 53% (3413/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2639970Z Receiving objects: 54% (3477/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2641940Z Receiving objects: 55% (3541/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2645210Z Receiving objects: 56% (3606/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2650860Z Receiving objects: 57% (3670/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2737260Z Receiving objects: 58% (3735/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2738470Z Receiving objects: 59% (3799/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.2944690Z Receiving objects: 60% (3863/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.3031400Z Receiving objects: 61% (3928/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.3096250Z Receiving objects: 62% (3992/6438), 181.29 MiB | 51.80 MiB/s
2023-09-06T02:50:01.3097510Z Receiving objects: 62% (4048/6438), 204.98 MiB | 51.24 MiB/s
2023-09-06T02:50:01.3112970Z Receiving objects: 63% (4056/6438), 204.98 MiB | 51.24 MiB/s
2023-09-06T02:50:01.3132210Z Receiving objects: 64% (4121/6438), 204.98 MiB | 51.24 MiB/s
2023-09-06T02:50:01.3138460Z Receiving objects: 65% (4185/6438), 204.98 MiB | 51.24 MiB/s
2023-09-06T02:50:01.3145540Z Receiving objects: 66% (4250/6438), 204.98 MiB | 51.24 MiB/s
2023-09-06T02:50:02.0592560Z Receiving objects: 67% (4314/6438), 204.98 MiB | 51.24 MiB/s
2023-09-06T02:50:02.2033780Z Receiving objects: 68% (4378/6438), 233.66 MiB | 51.92 MiB/s
2023-09-06T02:50:02.2041250Z Receiving objects: 69% (4443/6438), 233.66 MiB | 51.92 MiB/s
2023-09-06T02:50:02.3232320Z Receiving objects: 70% (4507/6438), 233.66 MiB | 51.92 MiB/s
2023-09-06T02:50:02.3333740Z Receiving objects: 70% (4538/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.3994920Z Receiving objects: 71% (4571/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.4096090Z Receiving objects: 72% (4636/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.4598580Z Receiving objects: 73% (4700/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5196450Z Receiving objects: 74% (4765/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5309610Z Receiving objects: 75% (4829/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5453010Z Receiving objects: 76% (4893/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5591310Z Receiving objects: 77% (4958/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5684770Z Receiving objects: 78% (5022/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5713770Z Receiving objects: 79% (5087/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.5885800Z Receiving objects: 80% (5151/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.7455770Z Receiving objects: 81% (5215/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.7988650Z Receiving objects: 82% (5280/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.8180900Z Receiving objects: 83% (5344/6438), 264.15 MiB | 54.48 MiB/s
2023-09-06T02:50:02.8198430Z Receiving objects: 84% (5408/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.8747990Z Receiving objects: 85% (5473/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.8838600Z Receiving objects: 86% (5537/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.8894920Z Receiving objects: 87% (5602/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.8909280Z Receiving objects: 88% (5666/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.8932160Z Receiving objects: 89% (5730/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9175770Z Receiving objects: 90% (5795/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9179120Z Receiving objects: 91% (5859/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9212220Z Receiving objects: 92% (5923/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9222370Z Receiving objects: 93% (5988/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9226250Z Receiving objects: 94% (6052/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9227020Z Receiving objects: 95% (6117/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9235790Z Receiving objects: 96% (6181/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9245600Z Receiving objects: 97% (6245/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:02.9257690Z Receiving objects: 98% (6310/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:03.3107180Z Receiving objects: 99% (6374/6438), 291.94 MiB | 55.06 MiB/s
2023-09-06T02:50:03.7946160Z Receiving objects: 99% (6384/6438), 319.02 MiB | 54.72 MiB/s
2023-09-06T02:50:03.7947620Z remote: Total 6438 (delta 321), reused 358 (delta 270), pack-reused 5985
2023-09-06T02:50:03.7958320Z Receiving objects: 100% (6438/6438), 319.02 MiB | 54.72 MiB/s
2023-09-06T02:50:03.7958940Z Receiving objects: 100% (6438/6438), 345.00 MiB | 53.19 MiB/s, done.
2023-09-06T02:50:03.8020260Z Resolving deltas: 0% (0/4171)
2023-09-06T02:50:03.8022900Z Resolving deltas: 1% (43/4171)
2023-09-06T02:50:03.8024660Z Resolving deltas: 2% (84/4171)
2023-09-06T02:50:03.8027440Z Resolving deltas: 3% (126/4171)
2023-09-06T02:50:03.8032210Z Resolving deltas: 4% (167/4171)
2023-09-06T02:50:03.8052090Z Resolving deltas: 5% (209/4171)
2023-09-06T02:50:03.8057980Z Resolving deltas: 6% (251/4171)
2023-09-06T02:50:03.8061630Z Resolving deltas: 7% (292/4171)
2023-09-06T02:50:03.8077950Z Resolving deltas: 8% (334/4171)
2023-09-06T02:50:03.8084060Z Resolving deltas: 9% (376/4171)
2023-09-06T02:50:03.8089610Z Resolving deltas: 10% (419/4171)
2023-09-06T02:50:03.8095000Z Resolving deltas: 11% (459/4171)
2023-09-06T02:50:03.8100300Z Resolving deltas: 12% (501/4171)
2023-09-06T02:50:03.8300070Z Resolving deltas: 13% (543/4171)
2023-09-06T02:50:03.8401460Z Resolving deltas: 14% (584/4171)
2023-09-06T02:50:03.8402410Z Resolving deltas: 15% (626/4171)
2023-09-06T02:50:03.8503240Z Resolving deltas: 16% (668/4171)
2023-09-06T02:50:03.8551780Z Resolving deltas: 17% (710/4171)
2023-09-06T02:50:03.8552710Z Resolving deltas: 18% (751/4171)
2023-09-06T02:50:03.8553360Z Resolving deltas: 19% (793/4171)
2023-09-06T02:50:03.8554000Z Resolving deltas: 20% (835/4171)
2023-09-06T02:50:03.8554640Z Resolving deltas: 21% (876/4171)
2023-09-06T02:50:03.8555460Z Resolving deltas: 22% (918/4171)
2023-09-06T02:50:03.8556120Z Resolving deltas: 23% (960/4171)
2023-09-06T02:50:03.8556740Z Resolving deltas: 24% (1002/4171)
2023-09-06T02:50:03.8557380Z Resolving deltas: 25% (1043/4171)
2023-09-06T02:50:03.8558010Z Resolving deltas: 26% (1085/4171)
2023-09-06T02:50:03.8558650Z Resolving deltas: 27% (1127/4171)
2023-09-06T02:50:04.7078750Z Resolving deltas: 28% (1168/4171)
2023-09-06T02:50:04.7082490Z Resolving deltas: 29% (1210/4171)
2023-09-06T02:50:04.7098740Z Resolving deltas: 30% (1252/4171)
2023-09-06T02:50:04.7180510Z Resolving deltas: 31% (1294/4171)
2023-09-06T02:50:04.7183560Z Resolving deltas: 32% (1335/4171)
2023-09-06T02:50:04.9171160Z Resolving deltas: 33% (1377/4171)
2023-09-06T02:50:04.9266650Z Resolving deltas: 33% (1413/4171)
2023-09-06T02:50:05.0526790Z Resolving deltas: 34% (1419/4171)
2023-09-06T02:50:05.5897880Z Resolving deltas: 35% (1460/4171)
2023-09-06T02:50:05.5949720Z Resolving deltas: 36% (1502/4171)
2023-09-06T02:50:05.5963470Z Resolving deltas: 37% (1544/4171)
2023-09-06T02:50:05.6045720Z Resolving deltas: 38% (1585/4171)
2023-09-06T02:50:05.6162860Z Resolving deltas: 39% (1627/4171)
2023-09-06T02:50:05.6199250Z Resolving deltas: 40% (1669/4171)
2023-09-06T02:50:05.6261210Z Resolving deltas: 41% (1711/4171)
2023-09-06T02:50:05.6262060Z Resolving deltas: 42% (1752/4171)
2023-09-06T02:50:05.7744920Z Resolving deltas: 43% (1794/4171)
2023-09-06T02:50:05.7847510Z Resolving deltas: 44% (1836/4171)
2023-09-06T02:50:05.7949330Z Resolving deltas: 45% (1877/4171)
2023-09-06T02:50:05.8050930Z Resolving deltas: 46% (1919/4171)
2023-09-06T02:50:05.8153390Z Resolving deltas: 47% (1961/4171)
2023-09-06T02:50:05.8255220Z Resolving deltas: 48% (2003/4171)
2023-09-06T02:50:05.8356300Z Resolving deltas: 49% (2044/4171)
2023-09-06T02:50:05.8457390Z Resolving deltas: 50% (2086/4171)
2023-09-06T02:50:05.8533110Z Resolving deltas: 51% (2128/4171)
2023-09-06T02:50:05.8533900Z Resolving deltas: 52% (2169/4171)
2023-09-06T02:50:05.8534600Z Resolving deltas: 53% (2211/4171)
2023-09-06T02:50:05.8535260Z Resolving deltas: 54% (2253/4171)
2023-09-06T02:50:05.8535900Z Resolving deltas: 54% (2277/4171)
2023-09-06T02:50:05.9920280Z Resolving deltas: 55% (2295/4171)
2023-09-06T02:50:06.0021450Z Resolving deltas: 56% (2336/4171)
2023-09-06T02:50:06.2247490Z Resolving deltas: 57% (2378/4171)
2023-09-06T02:50:06.2450710Z Resolving deltas: 58% (2420/4171)
2023-09-06T02:50:06.2456320Z Resolving deltas: 59% (2461/4171)
2023-09-06T02:50:06.2467710Z Resolving deltas: 60% (2503/4171)
2023-09-06T02:50:06.2496480Z Resolving deltas: 61% (2545/4171)
2023-09-06T02:50:06.2497090Z Resolving deltas: 62% (2587/4171)
2023-09-06T02:50:06.2497660Z Resolving deltas: 63% (2628/4171)
2023-09-06T02:50:06.2560780Z Resolving deltas: 64% (2670/4171)
2023-09-06T02:50:06.2659170Z Resolving deltas: 65% (2712/4171)
2023-09-06T02:50:06.2661640Z Resolving deltas: 66% (2753/4171)
2023-09-06T02:50:06.2668830Z Resolving deltas: 67% (2795/4171)
2023-09-06T02:50:06.2771000Z Resolving deltas: 68% (2837/4171)
2023-09-06T02:50:06.2872220Z Resolving deltas: 69% (2878/4171)
2023-09-06T02:50:06.2963030Z Resolving deltas: 70% (2920/4171)
2023-09-06T02:50:06.2972150Z Resolving deltas: 71% (2962/4171)
2023-09-06T02:50:06.3064190Z Resolving deltas: 72% (3004/4171)
2023-09-06T02:50:06.3064650Z Resolving deltas: 73% (3045/4171)
2023-09-06T02:50:06.3074560Z Resolving deltas: 74% (3087/4171)
2023-09-06T02:50:06.8037510Z Resolving deltas: 75% (3129/4171)
2023-09-06T02:50:06.9773900Z Resolving deltas: 75% (3143/4171)
2023-09-06T02:50:06.9875210Z Resolving deltas: 76% (3170/4171)
2023-09-06T02:50:06.9976340Z Resolving deltas: 77% (3212/4171)
2023-09-06T02:50:07.4900360Z Resolving deltas: 78% (3254/4171)
2023-09-06T02:50:07.7983470Z Resolving deltas: 79% (3296/4171)
2023-09-06T02:50:08.1935270Z Resolving deltas: 80% (3337/4171)
2023-09-06T02:50:08.3065890Z Resolving deltas: 81% (3379/4171)
2023-09-06T02:50:08.3166160Z Resolving deltas: 82% (3421/4171)
2023-09-06T02:50:08.3266580Z Resolving deltas: 83% (3462/4171)
2023-09-06T02:50:08.3366970Z Resolving deltas: 84% (3504/4171)
2023-09-06T02:50:08.3467990Z Resolving deltas: 85% (3546/4171)
2023-09-06T02:50:08.3568640Z Resolving deltas: 86% (3588/4171)
2023-09-06T02:50:08.3668740Z Resolving deltas: 87% (3629/4171)
2023-09-06T02:50:08.3744570Z Resolving deltas: 88% (3671/4171)
2023-09-06T02:50:08.3781870Z Resolving deltas: 89% (3713/4171)
2023-09-06T02:50:08.3878690Z Resolving deltas: 90% (3754/4171)
2023-09-06T02:50:08.3980150Z Resolving deltas: 91% (3796/4171)
2023-09-06T02:50:08.3980510Z Resolving deltas: 92% (3838/4171)
2023-09-06T02:50:08.4040330Z Resolving deltas: 93% (3880/4171)
2023-09-06T02:50:08.4134170Z Resolving deltas: 94% (3921/4171)
2023-09-06T02:50:08.4980270Z Resolving deltas: 95% (3963/4171)
2023-09-06T02:50:08.5483540Z Resolving deltas: 96% (4005/4171)
2023-09-06T02:50:08.5584740Z Resolving deltas: 97% (4046/4171)
2023-09-06T02:50:08.8164960Z Resolving deltas: 98% (4088/4171)
2023-09-06T02:50:08.8568060Z Resolving deltas: 98% (4123/4171)
2023-09-06T02:50:09.6066220Z Resolving deltas: 99% (4130/4171)
2023-09-06T02:50:09.6067040Z Resolving deltas: 100% (4171/4171)
2023-09-06T02:50:09.6067720Z Resolving deltas: 100% (4171/4171), done.
2023-09-06T02:50:09.7067780Z From https://github.com/yaronzz/Tidal-Media-Downloader
2023-09-06T02:50:09.7068790Z * [new branch] dependabot/pip/TIDALDL-PY/lxml-4.9.1 -> origin/dependabot/pip/TIDALDL-PY/lxml-4.9.1
2023-09-06T02:50:09.7074070Z * [new branch] master -> origin/master
2023-09-06T02:50:09.7084740Z * [new branch] pr/moisespr123/528 -> origin/pr/moisespr123/528
2023-09-06T02:50:09.7092760Z * [new branch] pr/sporek/511-2 -> origin/pr/sporek/511-2
2023-09-06T02:50:09.7100000Z * [new branch] refactor -> origin/refactor
2023-09-06T02:50:09.7107280Z * [new branch] test-workflow -> origin/test-workflow
2023-09-06T02:50:09.7112470Z * [new tag] 1.1.0.10 -> 1.1.0.10
2023-09-06T02:50:09.7117260Z * [new tag] 1.1.0.11 -> 1.1.0.11
2023-09-06T02:50:09.7123280Z * [new tag] 1.1.0.12 -> 1.1.0.12
2023-09-06T02:50:09.7128730Z * [new tag] 1.1.0.13 -> 1.1.0.13
2023-09-06T02:50:09.7133270Z * [new tag] 1.1.0.14 -> 1.1.0.14
2023-09-06T02:50:09.7137370Z * [new tag] 1.1.0.15 -> 1.1.0.15
2023-09-06T02:50:09.7141290Z * [new tag] 1.1.0.16 -> 1.1.0.16
2023-09-06T02:50:09.7145630Z * [new tag] 1.1.0.17 -> 1.1.0.17
2023-09-06T02:50:09.7150570Z * [new tag] 1.1.0.18 -> 1.1.0.18
2023-09-06T02:50:09.7155380Z * [new tag] 1.1.0.19 -> 1.1.0.19
2023-09-06T02:50:09.7160210Z * [new tag] 1.1.0.2 -> 1.1.0.2
2023-09-06T02:50:09.7164980Z * [new tag] 1.1.0.20 -> 1.1.0.20
2023-09-06T02:50:09.7169610Z * [new tag] 1.1.0.21 -> 1.1.0.21
2023-09-06T02:50:09.7174350Z * [new tag] 1.1.0.22 -> 1.1.0.22
2023-09-06T02:50:09.7180050Z * [new tag] 1.1.0.3 -> 1.1.0.3
2023-09-06T02:50:09.7184780Z * [new tag] 1.1.0.4 -> 1.1.0.4
2023-09-06T02:50:09.7189110Z * [new tag] 1.1.0.5 -> 1.1.0.5
2023-09-06T02:50:09.7193700Z * [new tag] 1.1.0.6 -> 1.1.0.6
2023-09-06T02:50:09.7198080Z * [new tag] 1.1.0.7 -> 1.1.0.7
2023-09-06T02:50:09.7202730Z * [new tag] 1.1.0.8 -> 1.1.0.8
2023-09-06T02:50:09.7206910Z * [new tag] 1.1.0.9 -> 1.1.0.9
2023-09-06T02:50:09.7211510Z * [new tag] 1.1.1.0 -> 1.1.1.0
2023-09-06T02:50:09.7215500Z * [new tag] 2021.11.15.1 -> 2021.11.15.1
2023-09-06T02:50:09.7219920Z * [new tag] 2021.11.21.1 -> 2021.11.21.1
2023-09-06T02:50:09.7223940Z * [new tag] 2021.11.30.1 -> 2021.11.30.1
2023-09-06T02:50:09.7228450Z * [new tag] 2021.7.6.2 -> 2021.7.6.2
2023-09-06T02:50:09.7232920Z * [new tag] 2022.01.11.1 -> 2022.01.11.1
2023-09-06T02:50:09.7236940Z * [new tag] 2022.01.18.3-gui -> 2022.01.18.3-gui
2023-09-06T02:50:09.7241360Z * [new tag] 2022.01.21.1 -> 2022.01.21.1
2023-09-06T02:50:09.7245180Z * [new tag] 2022.02.07.1 -> 2022.02.07.1
2023-09-06T02:50:09.7249980Z * [new tag] 2022.03.04.1 -> 2022.03.04.1
2023-09-06T02:50:09.7255190Z * [new tag] 2022.03.04.2 -> 2022.03.04.2
2023-09-06T02:50:09.7260000Z * [new tag] 2022.06.23.1 -> 2022.06.23.1
2023-09-06T02:50:09.7265050Z * [new tag] 2022.08.29.1 -> 2022.08.29.1
2023-09-06T02:50:09.7403310Z [command]/usr/local/bin/git branch --list --remote origin/test-workflow
2023-09-06T02:50:09.7503280Z origin/test-workflow
2023-09-06T02:50:09.7519110Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/test-workflow
2023-09-06T02:50:09.7606430Z 754444c214c9185916ff606d83acdceb98dc821d
2023-09-06T02:50:09.7612570Z ##[endgroup]
2023-09-06T02:50:09.7613840Z ##[group]Determining the checkout info
2023-09-06T02:50:09.7615870Z ##[endgroup]
2023-09-06T02:50:09.7616620Z ##[group]Checking out the ref
2023-09-06T02:50:09.7623970Z [command]/usr/local/bin/git checkout --progress --force -B test-workflow refs/remotes/origin/test-workflow
2023-09-06T02:50:09.9788570Z Switched to a new branch 'test-workflow'
2023-09-06T02:50:09.9797500Z branch 'test-workflow' set up to track 'origin/test-workflow'.
2023-09-06T02:50:09.9866240Z ##[endgroup]
2023-09-06T02:50:09.9956240Z [command]/usr/local/bin/git log -1 --format='%H'
2023-09-06T02:50:10.0101190Z '754444c214c9185916ff606d83acdceb98dc821d'
2023-09-06T02:50:10.0533610Z ##[group]Run pip3 install wheel
2023-09-06T02:50:10.0534010Z pip3 install wheel
2023-09-06T02:50:10.0534250Z pip3 install pyinstaller
2023-09-06T02:50:10.0534470Z pip3 install PyQt5
2023-09-06T02:50:10.0534690Z pip3 install cython
2023-09-06T02:50:10.0534960Z python3 -m pip install --upgrade pip setuptools wheel
2023-09-06T02:50:10.0535280Z pip3 install -r requirements.txt --upgrade
2023-09-06T02:50:10.0736010Z shell: /bin/bash --noprofile --norc -e -o pipefail {0}
2023-09-06T02:50:10.0736310Z ##[endgroup]
2023-09-06T02:50:15.8757780Z Collecting wheel
2023-09-06T02:50:15.8761240Z Obtaining dependency information for wheel from https://files.pythonhosted.org/packages/b8/8b/31273bf66016be6ad22bb7345c37ff350276cfd46e389a0c2ac5da9d9073/wheel-0.41.2-py3-none-any.whl.metadata
2023-09-06T02:50:15.8845250Z Using cached wheel-0.41.2-py3-none-any.whl.metadata (2.2 kB)
2023-09-06T02:50:15.8966920Z Using cached wheel-0.41.2-py3-none-any.whl (64 kB)
2023-09-06T02:50:15.9656630Z Installing collected packages: wheel
2023-09-06T02:50:16.0509670Z Successfully installed wheel-0.41.2
2023-09-06T02:50:16.3653480Z
2023-09-06T02:50:16.3654690Z [notice] A new release of pip is available: 23.1.2 -> 23.2.1
2023-09-06T02:50:16.3656150Z [notice] To update, run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python -m pip install --upgrade pip
2023-09-06T02:50:17.2408200Z Collecting pyinstaller
2023-09-06T02:50:17.2413990Z Obtaining dependency information for pyinstaller from https://files.pythonhosted.org/packages/28/fd/f2ae4a3405c15a26f410e71412450c7a566530dc46679f6f5486c7f461d1/pyinstaller-5.13.2-py3-none-macosx_10_13_universal2.whl.metadata
2023-09-06T02:50:17.2650750Z Downloading pyinstaller-5.13.2-py3-none-macosx_10_13_universal2.whl.metadata (8.3 kB)
2023-09-06T02:50:17.2889230Z Requirement already satisfied: setuptools>=42.0.0 in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from pyinstaller) (65.5.0)
2023-09-06T02:50:17.3172870Z Collecting altgraph (from pyinstaller)
2023-09-06T02:50:17.3249390Z Downloading altgraph-0.17.3-py2.py3-none-any.whl (21 kB)
2023-09-06T02:50:17.3868920Z Collecting pyinstaller-hooks-contrib>=2021.4 (from pyinstaller)
2023-09-06T02:50:17.3872710Z Obtaining dependency information for pyinstaller-hooks-contrib>=2021.4 from https://files.pythonhosted.org/packages/90/6e/642935b6470115eb10339ffd843ee7dbbd7ea2f2ec9bb8cca439c6b3286e/pyinstaller_hooks_contrib-2023.8-py2.py3-none-any.whl.metadata
2023-09-06T02:50:17.3955600Z Downloading pyinstaller_hooks_contrib-2023.8-py2.py3-none-any.whl.metadata (15 kB)
2023-09-06T02:50:17.4385520Z Collecting macholib>=1.8 (from pyinstaller)
2023-09-06T02:50:17.4469260Z Downloading macholib-1.16.2-py2.py3-none-any.whl (38 kB)
2023-09-06T02:50:17.5274780Z Downloading pyinstaller-5.13.2-py3-none-macosx_10_13_universal2.whl (935 kB)
2023-09-06T02:50:17.5713930Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 935.0/935.0 kB 24.3 MB/s eta 0:00:00
2023-09-06T02:50:17.5793000Z Downloading pyinstaller_hooks_contrib-2023.8-py2.py3-none-any.whl (282 kB)
2023-09-06T02:50:17.5951750Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 282.9/282.9 kB 21.6 MB/s eta 0:00:00
2023-09-06T02:50:17.6966690Z Installing collected packages: altgraph, pyinstaller-hooks-contrib, macholib, pyinstaller
2023-09-06T02:50:19.1633370Z Successfully installed altgraph-0.17.3 macholib-1.16.2 pyinstaller-5.13.2 pyinstaller-hooks-contrib-2023.8
2023-09-06T02:50:19.2664970Z
2023-09-06T02:50:19.2665610Z [notice] A new release of pip is available: 23.1.2 -> 23.2.1
2023-09-06T02:50:19.2666390Z [notice] To update, run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python -m pip install --upgrade pip
2023-09-06T02:50:20.0544330Z Collecting PyQt5
2023-09-06T02:50:20.0805340Z Downloading PyQt5-5.15.9-cp37-abi3-macosx_10_13_x86_64.whl (7.0 MB)
2023-09-06T02:50:20.2685630Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 38.2 MB/s eta 0:00:00
2023-09-06T02:50:20.4325170Z Collecting PyQt5-sip<13,>=12.11 (from PyQt5)
2023-09-06T02:50:20.4327190Z Obtaining dependency information for PyQt5-sip<13,>=12.11 from https://files.pythonhosted.org/packages/b8/a5/b6e99a2f1d029ab9b9dfba7bfcfdacc81057b63c4dafb641dcda1d206559/PyQt5_sip-12.12.2-cp311-cp311-macosx_10_9_universal2.whl.metadata
2023-09-06T02:50:20.4403490Z Downloading PyQt5_sip-12.12.2-cp311-cp311-macosx_10_9_universal2.whl.metadata (504 bytes)
2023-09-06T02:50:20.4703260Z Collecting PyQt5-Qt5>=5.15.2 (from PyQt5)
2023-09-06T02:50:20.4815750Z Downloading PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl (40.5 MB)
2023-09-06T02:50:21.2883160Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.5/40.5 MB 35.5 MB/s eta 0:00:00
2023-09-06T02:50:21.4630790Z Downloading PyQt5_sip-12.12.2-cp311-cp311-macosx_10_9_universal2.whl (142 kB)
2023-09-06T02:50:21.4758180Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.9/142.9 kB 13.3 MB/s eta 0:00:00
2023-09-06T02:50:21.5748470Z Installing collected packages: PyQt5-Qt5, PyQt5-sip, PyQt5
2023-09-06T02:50:23.5385540Z Successfully installed PyQt5-5.15.9 PyQt5-Qt5-5.15.2 PyQt5-sip-12.12.2
2023-09-06T02:50:23.6378770Z
2023-09-06T02:50:23.6379800Z [notice] A new release of pip is available: 23.1.2 -> 23.2.1
2023-09-06T02:50:23.6380460Z [notice] To update, run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python -m pip install --upgrade pip
2023-09-06T02:50:25.1019420Z Collecting cython
2023-09-06T02:50:25.1075880Z Obtaining dependency information for cython from https://files.pythonhosted.org/packages/e2/18/ba1a01c0ed30b248878b98fcf0654141c1c0e476166b5dcb4d7c04214884/Cython-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl.metadata
2023-09-06T02:50:25.1282950Z Downloading Cython-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl.metadata (3.1 kB)
2023-09-06T02:50:25.1521230Z Downloading Cython-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl (3.1 MB)
2023-09-06T02:50:25.2409370Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 36.6 MB/s eta 0:00:00
2023-09-06T02:50:25.3396300Z Installing collected packages: cython
2023-09-06T02:50:26.3441380Z Successfully installed cython-3.0.2
2023-09-06T02:50:26.4488920Z
2023-09-06T02:50:26.4500440Z [notice] A new release of pip is available: 23.1.2 -> 23.2.1
2023-09-06T02:50:26.4543680Z [notice] To update, run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python -m pip install --upgrade pip
2023-09-06T02:50:27.1533240Z Requirement already satisfied: pip in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (23.1.2)
2023-09-06T02:50:27.2895390Z Collecting pip
2023-09-06T02:50:27.2967070Z Obtaining dependency information for pip from https://files.pythonhosted.org/packages/50/c2/e06851e8cc28dcad7c155f4753da8833ac06a5c704c109313b8d5a62968a/pip-23.2.1-py3-none-any.whl.metadata
2023-09-06T02:50:27.3068750Z Using cached pip-23.2.1-py3-none-any.whl.metadata (4.2 kB)
2023-09-06T02:50:27.3170600Z Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (65.5.0)
2023-09-06T02:50:27.6530060Z Collecting setuptools
2023-09-06T02:50:27.6533260Z Obtaining dependency information for setuptools from https://files.pythonhosted.org/packages/4f/ab/0bcfebdfc3bfa8554b2b2c97a555569c4c1ebc74ea288741ea8326c51906/setuptools-68.1.2-py3-none-any.whl.metadata
2023-09-06T02:50:27.6577800Z Using cached setuptools-68.1.2-py3-none-any.whl.metadata (6.2 kB)
2023-09-06T02:50:27.6652810Z Requirement already satisfied: wheel in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (0.41.2)
2023-09-06T02:50:27.7781240Z Using cached pip-23.2.1-py3-none-any.whl (2.1 MB)
2023-09-06T02:50:27.7961700Z Using cached setuptools-68.1.2-py3-none-any.whl (805 kB)
2023-09-06T02:50:27.9734710Z Installing collected packages: setuptools, pip
2023-09-06T02:50:27.9803250Z Attempting uninstall: setuptools
2023-09-06T02:50:27.9804340Z Found existing installation: setuptools 65.5.0
2023-09-06T02:50:28.0681740Z Uninstalling setuptools-65.5.0:
2023-09-06T02:50:28.3255540Z Successfully uninstalled setuptools-65.5.0
2023-09-06T02:50:29.0740360Z Attempting uninstall: pip
2023-09-06T02:50:29.0789020Z Found existing installation: pip 23.1.2
2023-09-06T02:50:29.1874650Z Uninstalling pip-23.1.2:
2023-09-06T02:50:29.6564760Z Successfully uninstalled pip-23.1.2
2023-09-06T02:50:31.2394020Z WARNING: The scripts pip, pip3 and pip3.11 are installed in '/Library/Frameworks/Python.framework/Versions/3.11/bin' which is not on PATH.
2023-09-06T02:50:31.2396010Z Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
2023-09-06T02:50:31.4021380Z Successfully installed pip-23.2.1 setuptools-68.1.2
2023-09-06T02:50:32.3416580Z Collecting requests==2.31.0 (from -r requirements.txt (line 1))
2023-09-06T02:50:32.3432400Z Obtaining dependency information for requests==2.31.0 from https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl.metadata
2023-09-06T02:50:32.3621750Z Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)
2023-09-06T02:50:32.4046770Z Collecting colorama==0.4.4 (from -r requirements.txt (line 2))
2023-09-06T02:50:32.4101710Z Downloading colorama-0.4.4-py2.py3-none-any.whl (16 kB)
2023-09-06T02:50:32.4595830Z Collecting prettytable==3.1.1 (from -r requirements.txt (line 3))
2023-09-06T02:50:32.4645130Z Downloading prettytable-3.1.1-py3-none-any.whl (26 kB)
2023-09-06T02:50:32.5085340Z Collecting mutagen==1.45.1 (from -r requirements.txt (line 4))
2023-09-06T02:50:32.5221530Z Downloading mutagen-1.45.1-py3-none-any.whl (218 kB)
2023-09-06T02:50:32.5375510Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 218.7/218.7 kB 21.9 MB/s eta 0:00:00
2023-09-06T02:50:32.7644770Z Collecting psutil==5.9.0 (from -r requirements.txt (line 5))
2023-09-06T02:50:32.7726920Z Downloading psutil-5.9.0.tar.gz (478 kB)
2023-09-06T02:50:32.7988100Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 478.3/478.3 kB 20.6 MB/s eta 0:00:00
2023-09-06T02:50:32.9330050Z Preparing metadata (setup.py): started
2023-09-06T02:50:33.5788910Z Preparing metadata (setup.py): finished with status 'done'
2023-09-06T02:50:33.9457580Z Collecting pycryptodome==3.14.1 (from -r requirements.txt (line 6))
2023-09-06T02:50:33.9557810Z Downloading pycryptodome-3.14.1-cp35-abi3-macosx_10_9_x86_64.whl (1.5 MB)
2023-09-06T02:50:34.0042400Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 33.6 MB/s eta 0:00:00
2023-09-06T02:50:34.1271640Z Collecting aigpy==2022.7.8.1 (from -r requirements.txt (line 7))
2023-09-06T02:50:34.1345820Z Downloading aigpy-2022.7.8.1-py3-none-any.whl (21 kB)
2023-09-06T02:50:34.2271040Z Collecting lyricsgenius==3.0.1 (from -r requirements.txt (line 8))
2023-09-06T02:50:34.2343070Z Downloading lyricsgenius-3.0.1-py3-none-any.whl (59 kB)
2023-09-06T02:50:34.2438590Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.4/59.4 kB 7.9 MB/s eta 0:00:00
2023-09-06T02:50:34.2905460Z Collecting pydub==0.25.1 (from -r requirements.txt (line 9))
2023-09-06T02:50:34.2996370Z Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)
2023-09-06T02:50:34.3729050Z Collecting PyQt5==5.15.7 (from -r requirements.txt (line 10))
2023-09-06T02:50:34.3801920Z Downloading PyQt5-5.15.7-cp37-abi3-macosx_10_13_x86_64.whl (7.0 MB)
2023-09-06T02:50:34.5705100Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 37.4 MB/s eta 0:00:00
2023-09-06T02:50:34.6555290Z Collecting qt-material==2.12 (from -r requirements.txt (line 11))
2023-09-06T02:50:34.6689260Z Downloading qt_material-2.12-py3-none-any.whl (1.7 MB)
2023-09-06T02:50:34.7187500Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 36.1 MB/s eta 0:00:00
2023-09-06T02:50:35.2225270Z Collecting lxml==4.7.1 (from -r requirements.txt (line 12))
2023-09-06T02:50:35.2340870Z Downloading lxml-4.7.1.tar.gz (3.2 MB)
2023-09-06T02:50:35.3011670Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 50.2 MB/s eta 0:00:00
2023-09-06T02:50:35.8052880Z Preparing metadata (setup.py): started
2023-09-06T02:50:39.0409080Z Preparing metadata (setup.py): finished with status 'done'
2023-09-06T02:50:39.2443400Z Collecting charset-normalizer<4,>=2 (from requests==2.31.0->-r requirements.txt (line 1))
2023-09-06T02:50:39.2446760Z Obtaining dependency information for charset-normalizer<4,>=2 from https://files.pythonhosted.org/packages/0f/16/8d50877a7215d31f024245a0acbda9e484dd70a21794f3109a6d8eaeba99/charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl.metadata
2023-09-06T02:50:39.2542300Z Downloading charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl.metadata (31 kB)
2023-09-06T02:50:39.3267130Z Collecting idna<4,>=2.5 (from requests==2.31.0->-r requirements.txt (line 1))
2023-09-06T02:50:39.3323140Z Downloading idna-3.4-py3-none-any.whl (61 kB)
2023-09-06T02:50:39.3427730Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 kB 7.0 MB/s eta 0:00:00
2023-09-06T02:50:39.4184860Z Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->-r requirements.txt (line 1))
2023-09-06T02:50:39.4186300Z Obtaining dependency information for urllib3<3,>=1.21.1 from https://files.pythonhosted.org/packages/9b/81/62fd61001fa4b9d0df6e31d47ff49cfa9de4af03adecf339c7bc30656b37/urllib3-2.0.4-py3-none-any.whl.metadata
2023-09-06T02:50:39.4239740Z Downloading urllib3-2.0.4-py3-none-any.whl.metadata (6.6 kB)
2023-09-06T02:50:39.4361690Z Requirement already satisfied: certifi>=2017.4.17 in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from requests==2.31.0->-r requirements.txt (line 1)) (2023.7.22)
2023-09-06T02:50:39.4756590Z Collecting wcwidth (from prettytable==3.1.1->-r requirements.txt (line 3))
2023-09-06T02:50:39.4793640Z Downloading wcwidth-0.2.6-py2.py3-none-any.whl (29 kB)
2023-09-06T02:50:39.5721450Z Collecting beautifulsoup4>=4.6.0 (from lyricsgenius==3.0.1->-r requirements.txt (line 8))
2023-09-06T02:50:39.5837860Z Downloading beautifulsoup4-4.12.2-py3-none-any.whl (142 kB)
2023-09-06T02:50:39.5904810Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.0/143.0 kB 18.7 MB/s eta 0:00:00
2023-09-06T02:50:39.6143320Z Requirement already satisfied: PyQt5-sip<13,>=12.11 in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from PyQt5==5.15.7->-r requirements.txt (line 10)) (12.12.2)
2023-09-06T02:50:39.6243380Z Requirement already satisfied: PyQt5-Qt5>=5.15.0 in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from PyQt5==5.15.7->-r requirements.txt (line 10)) (5.15.2)
2023-09-06T02:50:39.6576610Z Collecting Jinja2 (from qt-material==2.12->-r requirements.txt (line 11))
2023-09-06T02:50:39.6632660Z Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)
2023-09-06T02:50:39.6764820Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 12.2 MB/s eta 0:00:00
2023-09-06T02:50:39.7382990Z Collecting soupsieve>1.2 (from beautifulsoup4>=4.6.0->lyricsgenius==3.0.1->-r requirements.txt (line 8))
2023-09-06T02:50:39.7399960Z Obtaining dependency information for soupsieve>1.2 from https://files.pythonhosted.org/packages/4c/f3/038b302fdfbe3be7da016777069f26ceefe11a681055ea1f7817546508e3/soupsieve-2.5-py3-none-any.whl.metadata
2023-09-06T02:50:39.7454180Z Downloading soupsieve-2.5-py3-none-any.whl.metadata (4.7 kB)
2023-09-06T02:50:40.0121270Z Collecting MarkupSafe>=2.0 (from Jinja2->qt-material==2.12->-r requirements.txt (line 11))
2023-09-06T02:50:40.0209350Z Obtaining dependency information for MarkupSafe>=2.0 from https://files.pythonhosted.org/packages/c0/c7/171f5ac6b065e1425e8fabf4a4dfbeca76fd8070072c6a41bd5c07d90d8b/MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl.metadata
2023-09-06T02:50:40.0244850Z Downloading MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl.metadata (3.0 kB)
2023-09-06T02:50:40.0837030Z Downloading requests-2.31.0-py3-none-any.whl (62 kB)
2023-09-06T02:50:40.0987440Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.6/62.6 kB 4.4 MB/s eta 0:00:00
2023-09-06T02:50:40.1089380Z Downloading charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl (125 kB)
2023-09-06T02:50:40.1239930Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.1/125.1 kB 8.8 MB/s eta 0:00:00
2023-09-06T02:50:40.1340700Z Downloading urllib3-2.0.4-py3-none-any.whl (123 kB)
2023-09-06T02:50:40.1490710Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.9/123.9 kB 9.1 MB/s eta 0:00:00
2023-09-06T02:50:40.1592970Z Downloading MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl (13 kB)
2023-09-06T02:50:40.1743010Z Downloading soupsieve-2.5-py3-none-any.whl (36 kB)
2023-09-06T02:50:40.2043900Z Building wheels for collected packages: psutil, lxml
2023-09-06T02:50:40.2150420Z Building wheel for psutil (setup.py): started
2023-09-06T02:50:49.0218850Z Building wheel for psutil (setup.py): finished with status 'done'
2023-09-06T02:50:49.0228120Z Created wheel for psutil: filename=psutil-5.9.0-cp311-cp311-macosx_10_9_universal2.whl size=265136 sha256=c8df6ea79379777c6c27d7222e027d3d878ed8e1b54320cc100fefb293bfc04d
2023-09-06T02:50:49.0229900Z Stored in directory: /Users/runner/Library/Caches/pip/wheels/b7/3f/a5/6da60cf045cc7d875f3f6746c27e9afa159642fc5acaa5ae08
2023-09-06T02:50:49.0311190Z Building wheel for lxml (setup.py): started
2023-09-06T02:50:52.4852100Z Building wheel for lxml (setup.py): finished with status 'error'
2023-09-06T02:50:52.5014760Z error: subprocess-exited-with-error
2023-09-06T02:50:52.5015630Z
2023-09-06T02:50:52.5016460Z × python setup.py bdist_wheel did not run successfully.
2023-09-06T02:50:52.5017330Z │ exit code: 1
2023-09-06T02:50:52.5017970Z ╰─> [147 lines of output]
2023-09-06T02:50:52.5018800Z Building lxml version 4.7.1.
2023-09-06T02:50:52.5020030Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/pip-install-odf2xwb8/lxml_92275801c7b94609a97d7c7b250079d0/setup.py:67: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
2023-09-06T02:50:52.5021400Z import pkg_resources
2023-09-06T02:50:52.5021710Z Running setup.py clean for lxml
2023-09-06T02:50:52.5022500Z Building without Cython.
2023-09-06T02:50:52.5023310Z Building against libxml2 2.9.4 and libxslt 1.1.29
2023-09-06T02:50:52.5024010Z running bdist_wheel
2023-09-06T02:50:52.5024500Z running build
2023-09-06T02:50:52.5025130Z running build_py
2023-09-06T02:50:52.5025720Z creating build
2023-09-06T02:50:52.5026670Z creating build/lib.macosx-10.9-universal2-cpython-311
2023-09-06T02:50:52.5027450Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5028460Z copying src/lxml/_elementpath.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5029500Z copying src/lxml/sax.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5030700Z copying src/lxml/pyclasslookup.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5031540Z copying src/lxml/__init__.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5033920Z copying src/lxml/builder.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5034710Z copying src/lxml/doctestcompare.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5044590Z copying src/lxml/usedoctest.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5045700Z copying src/lxml/cssselect.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5046550Z copying src/lxml/ElementInclude.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5047580Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5048680Z copying src/lxml/includes/__init__.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5049830Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5050810Z copying src/lxml/html/soupparser.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5060910Z copying src/lxml/html/defs.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5062060Z copying src/lxml/html/_setmixin.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5063480Z copying src/lxml/html/clean.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5065440Z copying src/lxml/html/_diffcommand.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5066560Z copying src/lxml/html/html5parser.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5067750Z copying src/lxml/html/__init__.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5068800Z copying src/lxml/html/formfill.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5069830Z copying src/lxml/html/builder.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5070960Z copying src/lxml/html/ElementSoup.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5072080Z copying src/lxml/html/_html5builder.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5073060Z copying src/lxml/html/usedoctest.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5074100Z copying src/lxml/html/diff.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/html
2023-09-06T02:50:52.5075170Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron
2023-09-06T02:50:52.5076150Z copying src/lxml/isoschematron/__init__.py -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron
2023-09-06T02:50:52.5077190Z copying src/lxml/etree.h -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5078170Z copying src/lxml/etree_api.h -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5079130Z copying src/lxml/lxml.etree.h -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5080160Z copying src/lxml/lxml.etree_api.h -> build/lib.macosx-10.9-universal2-cpython-311/lxml
2023-09-06T02:50:52.5081260Z copying src/lxml/includes/xmlerror.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5082180Z copying src/lxml/includes/c14n.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5083300Z copying src/lxml/includes/xmlschema.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5084430Z copying src/lxml/includes/__init__.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5085650Z copying src/lxml/includes/schematron.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5086760Z copying src/lxml/includes/tree.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5088250Z copying src/lxml/includes/uri.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5089370Z copying src/lxml/includes/etreepublic.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5090490Z copying src/lxml/includes/xpath.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5091610Z copying src/lxml/includes/htmlparser.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5092820Z copying src/lxml/includes/xslt.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5093980Z copying src/lxml/includes/config.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5095170Z copying src/lxml/includes/xmlparser.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5096290Z copying src/lxml/includes/xinclude.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5097180Z copying src/lxml/includes/dtdvalid.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5098220Z copying src/lxml/includes/relaxng.pxd -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5099370Z copying src/lxml/includes/lxml-version.h -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5101130Z copying src/lxml/includes/etree_defs.h -> build/lib.macosx-10.9-universal2-cpython-311/lxml/includes
2023-09-06T02:50:52.5102200Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources
2023-09-06T02:50:52.5103110Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/rng
2023-09-06T02:50:52.5104280Z copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/rng
2023-09-06T02:50:52.5105440Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl
2023-09-06T02:50:52.5106440Z copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl
2023-09-06T02:50:52.5107610Z copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl
2023-09-06T02:50:52.5108640Z creating build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5109750Z copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5110930Z copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5112420Z copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5113640Z copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5114770Z copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5116180Z copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.macosx-10.9-universal2-cpython-311/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
2023-09-06T02:50:52.5116960Z running build_ext
2023-09-06T02:50:52.5117620Z building 'lxml.etree' extension
2023-09-06T02:50:52.5118960Z creating build/temp.macosx-10.9-universal2-cpython-311
2023-09-06T02:50:52.5119820Z creating build/temp.macosx-10.9-universal2-cpython-311/src
2023-09-06T02:50:52.5120930Z creating build/temp.macosx-10.9-universal2-cpython-311/src/lxml
2023-09-06T02:50:52.5123190Z clang -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -DCYTHON_CLINE_IN_TRACEBACK=0 -Isrc -Isrc/lxml/includes -I/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 -c src/lxml/etree.c -o build/temp.macosx-10.9-universal2-cpython-311/src/lxml/etree.o -w -flat_namespace
2023-09-06T02:50:52.5124420Z src/lxml/etree.c:262403:23: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5125170Z while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
2023-09-06T02:50:52.5125780Z ~~~~~~~~ ^
2023-09-06T02:50:52.5126540Z src/lxml/etree.c:262403:53: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5127360Z while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
2023-09-06T02:50:52.5127870Z ~~~~~~~~ ^
2023-09-06T02:50:52.5128570Z src/lxml/etree.c:262417:23: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5129710Z *type = exc_info->exc_type;
2023-09-06T02:50:52.5130240Z ~~~~~~~~ ^
2023-09-06T02:50:52.5130950Z src/lxml/etree.c:262419:21: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5131730Z *tb = exc_info->exc_traceback;
2023-09-06T02:50:52.5132320Z ~~~~~~~~ ^
2023-09-06T02:50:52.5133050Z src/lxml/etree.c:262433:26: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5133730Z tmp_type = exc_info->exc_type;
2023-09-06T02:50:52.5134190Z ~~~~~~~~ ^
2023-09-06T02:50:52.5134960Z src/lxml/etree.c:262435:24: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5135640Z tmp_tb = exc_info->exc_traceback;
2023-09-06T02:50:52.5136140Z ~~~~~~~~ ^
2023-09-06T02:50:52.5137210Z src/lxml/etree.c:262436:15: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5137990Z exc_info->exc_type = type;
2023-09-06T02:50:52.5138440Z ~~~~~~~~ ^
2023-09-06T02:50:52.5139190Z src/lxml/etree.c:262438:15: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5139850Z exc_info->exc_traceback = tb;
2023-09-06T02:50:52.5140380Z ~~~~~~~~ ^
2023-09-06T02:50:52.5141010Z src/lxml/etree.c:262520:30: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5141670Z tmp_type = exc_info->exc_type;
2023-09-06T02:50:52.5142150Z ~~~~~~~~ ^
2023-09-06T02:50:52.5142900Z src/lxml/etree.c:262522:28: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5143610Z tmp_tb = exc_info->exc_traceback;
2023-09-06T02:50:52.5144130Z ~~~~~~~~ ^
2023-09-06T02:50:52.5144910Z src/lxml/etree.c:262523:19: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5145560Z exc_info->exc_type = local_type;
2023-09-06T02:50:52.5146010Z ~~~~~~~~ ^
2023-09-06T02:50:52.5146680Z src/lxml/etree.c:262525:19: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5147400Z exc_info->exc_traceback = local_tb;
2023-09-06T02:50:52.5147840Z ~~~~~~~~ ^
2023-09-06T02:50:52.5148460Z src/lxml/etree.c:262711:26: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5149080Z tmp_type = exc_info->exc_type;
2023-09-06T02:50:52.5149520Z ~~~~~~~~ ^
2023-09-06T02:50:52.5150820Z src/lxml/etree.c:262713:24: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5151600Z tmp_tb = exc_info->exc_traceback;
2023-09-06T02:50:52.5152050Z ~~~~~~~~ ^
2023-09-06T02:50:52.5153000Z src/lxml/etree.c:262714:15: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5153630Z exc_info->exc_type = *type;
2023-09-06T02:50:52.5154070Z ~~~~~~~~ ^
2023-09-06T02:50:52.5154690Z src/lxml/etree.c:262716:15: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5155320Z exc_info->exc_traceback = *tb;
2023-09-06T02:50:52.5155730Z ~~~~~~~~ ^
2023-09-06T02:50:52.5156350Z src/lxml/etree.c:264915:20: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5156950Z t = exc_state->exc_type;
2023-09-06T02:50:52.5157370Z ~~~~~~~~~ ^
2023-09-06T02:50:52.5158020Z src/lxml/etree.c:264917:21: error: no member named 'exc_traceback' in 'struct _err_stackitem'
2023-09-06T02:50:52.5158640Z tb = exc_state->exc_traceback;
2023-09-06T02:50:52.5159070Z ~~~~~~~~~ ^
2023-09-06T02:50:52.5159690Z src/lxml/etree.c:264918:16: error: no member named 'exc_type' in 'struct _err_stackitem'
2023-09-06T02:50:52.5160710Z exc_state->exc_type = NULL;
2023-09-06T02:50:52.5161150Z ~~~~~~~~~ ^
2023-09-06T02:50:52.5161880Z fatal error: too many errors emitted, stopping now [-ferror-limit=]
2023-09-06T02:50:52.5162600Z 20 errors generated.
2023-09-06T02:50:52.5163270Z Compile failed: command '/usr/bin/clang' failed with exit code 1
2023-09-06T02:50:52.5163760Z creating var
2023-09-06T02:50:52.5164150Z creating var/folders
2023-09-06T02:50:52.5164570Z creating var/folders/24
2023-09-06T02:50:52.5165030Z creating var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn
2023-09-06T02:50:52.5165540Z creating var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T
2023-09-06T02:50:52.5166390Z cc -I/usr/include/libxml2 -c /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/xmlXPathInita36ds8so.c -o var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/xmlXPathInita36ds8so.o
2023-09-06T02:50:52.5167240Z cc var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/xmlXPathInita36ds8so.o -lxml2 -o a.out
2023-09-06T02:50:52.5167930Z error: command '/usr/bin/clang' failed with exit code 1
2023-09-06T02:50:52.5168400Z [end of output]
2023-09-06T02:50:52.5169090Z
2023-09-06T02:50:52.5169900Z note: This error originates from a subprocess, and is likely not a problem with pip.
2023-09-06T02:50:52.5170480Z ERROR: Failed building wheel for lxml
2023-09-06T02:50:52.9199290Z Successfully built psutil
2023-09-06T02:50:52.9201400Z Failed to build lxml
2023-09-06T02:50:52.9206610Z ERROR: Could not build wheels for lxml, which is required to install pyproject.toml-based projects
2023-09-06T02:50:53.3451210Z ##[error]Process completed with exit code 1.
2023-09-06T02:50:53.3594080Z Post job cleanup.
2023-09-06T02:50:53.5091820Z [command]/usr/local/bin/git version
2023-09-06T02:50:53.5208160Z git version 2.42.0
2023-09-06T02:50:53.5269710Z Copying '/Users/runner/.gitconfig' to '/Users/runner/work/_temp/413ea04f-95a2-4403-9b20-ed95cb5d8821/.gitconfig'
2023-09-06T02:50:53.5291600Z Temporarily overriding HOME='/Users/runner/work/_temp/413ea04f-95a2-4403-9b20-ed95cb5d8821' before making global git config changes
2023-09-06T02:50:53.5292670Z Adding repository directory to the temporary git global config as a safe directory
2023-09-06T02:50:53.5301550Z [command]/usr/local/bin/git config --global --add safe.directory /Users/runner/work/Tidal-Media-Downloader/Tidal-Media-Downloader
2023-09-06T02:50:53.5440780Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2023-09-06T02:50:53.5562090Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2023-09-06T02:50:53.6818700Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2023-09-06T02:50:53.6906700Z http.https://github.com/.extraheader
2023-09-06T02:50:53.6926900Z [command]/usr/local/bin/git config --local --unset-all http.https://github.com/.extraheader
2023-09-06T02:50:53.7057120Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2023-09-06T02:50:54.0072690Z Cleaning up orphan processes
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

+4
View File
@@ -0,0 +1,4 @@
cd TIDALDL-PY
twine upload dist/*
cd ..