mirror of
https://github.com/yaronzz/Tidal-Media-Downloader.git
synced 2026-06-13 20:25:07 +03:00
Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b56f83f938 | |||
| 754444c214 | |||
| 104a43100b | |||
| 62d83b5975 | |||
| 251af9e745 | |||
| 0751c37b35 | |||
| 4f32b14441 | |||
| 97928ef207 | |||
| 9edd5967f0 | |||
| 8449b85d81 | |||
| 2f4ad82421 | |||
| 513be57c3d | |||
| 3eb11252c2 | |||
| b972f7cda8 | |||
| b1b643109c | |||
| c15ad63542 | |||
| 09321db35e | |||
| 132e516250 | |||
| a771c598ae | |||
| db76e84123 | |||
| 7eb4419177 | |||
| df3c405667 | |||
| 951fd102ad | |||
| 252076f6dd | |||
| 11828a0e8e | |||
| 93f363f405 | |||
| 12a96d8a46 | |||
| 238b2da4b3 | |||
| 76313d68c9 | |||
| 4e8751ceb1 | |||
| 2dfcbad8f0 | |||
| 07d18ce2d6 | |||
| 7fdd307176 | |||
| 11805382cc | |||
| 044a847e78 | |||
| 6e49253e99 | |||
| 0c83717469 | |||
| 7f1afb27f1 | |||
| 18efb49213 | |||
| a275275cb6 | |||
| 7e5b6d22c4 | |||
| 96742046ba | |||
| 3199dcedc6 | |||
| 2cf59b3195 | |||
| be84a3631a | |||
| 9ce35af72f | |||
| 9d904a0fea | |||
| 5e05afd775 | |||
| dece506d58 | |||
| c2cc170988 | |||
| 3cab9ea295 | |||
| 5cf094d227 | |||
| 2e1e15ed3f | |||
| 7434470216 | |||
| 2ce2a310ae | |||
| dfc7af7796 | |||
| 63bf063dd3 | |||
| 3e8a3436b4 | |||
| e08e5efc88 | |||
| 7f3758e18c | |||
| 3e2d74a37f | |||
| 69ccd65025 | |||
| 81b82e6c29 | |||
| 346befda6d | |||
| 450102bfea | |||
| a966b3d93d | |||
| 55df515256 | |||
| 242747719a | |||
| e3c5886a02 | |||
| 33c49b83db | |||
| ed13b9b92d | |||
| e45f649e46 | |||
| 0172301769 | |||
| a7aa38e563 | |||
| fd97a2b966 | |||
| e1ee47b93c | |||
| 61b9dd3af8 | |||
| 628a42b058 | |||
| 2c392f0e22 | |||
| dc57d4d01d |
@@ -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.'
|
||||
|
||||
@@ -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: |
|
||||
|
||||
Vendored
+2
-1
@@ -34,7 +34,8 @@
|
||||
"-o",
|
||||
"e:\\test",
|
||||
"-q",
|
||||
"0"
|
||||
"0",
|
||||
"-g"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<br>
|
||||
<a href="https://github.com/yaronzz/Tidal-Media-Downloader-PRO">[GUI-REPOSITORY]</a>
|
||||
<br>
|
||||
|
||||

|
||||
|
||||
|
||||
<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%;" />
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 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.
@@ -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
|
||||
@@ -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
@@ -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', ]}
|
||||
)
|
||||
|
||||
@@ -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__':
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -16,6 +16,7 @@ class AudioQuality(Enum):
|
||||
High = 1
|
||||
HiFi = 2
|
||||
Master = 3
|
||||
Max = 4
|
||||
|
||||
|
||||
class VideoQuality(Enum):
|
||||
|
||||
@@ -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
@@ -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__':
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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 = "开始启动登录..."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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 !"
|
||||
|
||||
|
||||
@@ -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!"
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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 = "로그인 중..."
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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'
|
||||
@@ -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..."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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 = "Входим в сервис..."
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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ı..."
|
||||
|
||||
@@ -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 = "Початок процесу авторизації..."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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" +
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
- Fix:no 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
|
||||
|
||||
@@ -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/*
|
||||
@@ -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 ..
|
||||
@@ -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 [36;1mpip3 install wheel[0m
|
||||
2023-09-06T02:50:10.0534250Z [36;1mpip3 install pyinstaller[0m
|
||||
2023-09-06T02:50:10.0534470Z [36;1mpip3 install PyQt5[0m
|
||||
2023-09-06T02:50:10.0534690Z [36;1mpip3 install cython[0m
|
||||
2023-09-06T02:50:10.0534960Z [36;1mpython3 -m pip install --upgrade pip setuptools wheel[0m
|
||||
2023-09-06T02:50:10.0535280Z [36;1mpip3 install -r requirements.txt --upgrade[0m
|
||||
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
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.9 KiB |
Reference in New Issue
Block a user