Compare commits
2 commits
e2330a15c4
...
7a75805423
Author | SHA1 | Date | |
---|---|---|---|
7a75805423 | |||
f8e214d0a2 |
5 changed files with 22 additions and 5 deletions
3
Makefile
3
Makefile
|
@ -14,3 +14,6 @@ run-frontend:
|
|||
|
||||
test:
|
||||
python3 -m unittest discover -vcs ./backend
|
||||
|
||||
clean:
|
||||
rm -rf backend/__pycache__ .ruff_cache
|
||||
|
|
|
@ -23,6 +23,9 @@ class Config:
|
|||
# Proxy URL for yt_proxied downloader (can be used for geo-restricted content)
|
||||
self.yt_proxy = os.getenv('YT_PROXY') or None
|
||||
|
||||
# Proxy for soundcloud
|
||||
self.sc_proxy = os.getenv('SC_PROXY') or None
|
||||
|
||||
self.save_lyrics = _parse_bool(os.getenv('SAVE_LYRICS'), True)
|
||||
self.save_cover = _parse_bool(os.getenv('SAVE_COVER'), True)
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ class InfoYouTubePP(PostProcessor):
|
|||
if not 'track' in information:
|
||||
information['track'] = information['title']
|
||||
if not 'artist' in information:
|
||||
information['artist'] = information['channel'].removesuffix(' - Topic')
|
||||
information['artist'] = information['uploader'].removesuffix(' - Topic')
|
||||
if not 'artists' in information:
|
||||
information['artists'] = [information['artist']]
|
||||
|
||||
|
|
|
@ -27,6 +27,16 @@ class _CreateYDL:
|
|||
ydl.params['proxy'] = proxy
|
||||
return ydl
|
||||
|
||||
@staticmethod
|
||||
def soundcloud() -> YoutubeDL:
|
||||
ydl = YoutubeDL({'format': 'ba[ext=mp3]/ba'})
|
||||
ydl.add_post_processor(id3pp.InfoYouTubePP(), when='pre_process')
|
||||
proxy = config.get().sc_proxy
|
||||
if proxy is not None:
|
||||
ydl.params['proxy'] = proxy
|
||||
ydl.add_post_processor(FFmpegExtractAudioPP(preferredcodec='mp3'), when='post_process')
|
||||
return ydl
|
||||
|
||||
@staticmethod
|
||||
def yandex() -> YoutubeDL:
|
||||
return YoutubeDL()
|
||||
|
@ -35,13 +45,14 @@ class _CreateYDL:
|
|||
create_ydl_fn = {
|
||||
'youtube': _CreateYDL.youtube,
|
||||
'yt_proxied': _CreateYDL.yt_proxied,
|
||||
'soundcloud': _CreateYDL.soundcloud,
|
||||
'yandex': _CreateYDL.yandex,
|
||||
}
|
||||
|
||||
ydl_fn_keys = create_ydl_fn.keys()
|
||||
|
||||
# need process=True for track title in extract_info output
|
||||
NP_YDLS = {'yandex'}
|
||||
NP_YDLS = {'yandex', 'soundcloud'}
|
||||
|
||||
|
||||
class YdlLogger:
|
||||
|
@ -73,9 +84,8 @@ class Downloader:
|
|||
def __init__(self, logger: YdlLogger | None = None) -> None:
|
||||
|
||||
self.ydls: dict[str, YoutubeDL | None] = {
|
||||
'youtube': None,
|
||||
'yt_proxied': None,
|
||||
'yandex': None,
|
||||
key: None
|
||||
for key in ydl_fn_keys
|
||||
}
|
||||
|
||||
self.cur_ydl: YoutubeDL | None = None
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
<select id="site-select">
|
||||
<option value="youtube" selected>YouTube</option>
|
||||
<option value="yt_proxied">YT proxied</option>
|
||||
<option value="soundcloud">SoundCloud</option>
|
||||
<option value="yandex">Yandex Music</option>
|
||||
</select>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Reference in a new issue