mirror of
https://github.com/zhaarey/AppleMusicDecrypt.git
synced 2025-10-23 15:11:06 +00:00
fix: sanlitize the meta dict's hard-copy before format the path, otherwise strange album name such as 'xxx \ cccc' would not get cleaned by last process and crush the os.
This commit is contained in:
21
src/utils.py
21
src/utils.py
@@ -13,6 +13,8 @@ from src.exceptions import NotTimeSyncedLyricsException
|
|||||||
from src.models import PlaylistInfo
|
from src.models import PlaylistInfo
|
||||||
from src.types import *
|
from src.types import *
|
||||||
|
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|
||||||
def check_url(url):
|
def check_url(url):
|
||||||
pattern = regex.compile(
|
pattern = regex.compile(
|
||||||
@@ -146,17 +148,26 @@ def playlist_metadata_to_params(playlist: PlaylistInfo):
|
|||||||
return {"playlistName": playlist.data[0].attributes.name,
|
return {"playlistName": playlist.data[0].attributes.name,
|
||||||
"playlistCuratorName": playlist.data[0].attributes.curatorName}
|
"playlistCuratorName": playlist.data[0].attributes.curatorName}
|
||||||
|
|
||||||
|
def get_path_safe_dict(param: dict):
|
||||||
|
new_param = deepcopy(param)
|
||||||
|
for key, val in new_param.items():
|
||||||
|
if isinstance(val, str):
|
||||||
|
new_param[key] = get_valid_filename(str(val))
|
||||||
|
return new_param
|
||||||
|
|
||||||
def get_song_name_and_dir_path(codec: str, config: Download, metadata, playlist: PlaylistInfo = None):
|
def get_song_name_and_dir_path(codec: str, config: Download, metadata, playlist: PlaylistInfo = None):
|
||||||
if playlist:
|
if playlist:
|
||||||
|
safe_meta = get_path_safe_dict(metadata.model_dump())
|
||||||
|
safe_pl_meta = get_path_safe_dict(playlist_metadata_to_params(playlist))
|
||||||
song_name = config.playlistSongNameFormat.format(codec=codec, playlistSongIndex=metadata.playlistIndex,
|
song_name = config.playlistSongNameFormat.format(codec=codec, playlistSongIndex=metadata.playlistIndex,
|
||||||
**metadata.model_dump())
|
**safe_meta)
|
||||||
dir_path = Path(config.playlistDirPathFormat.format(codec=codec,
|
dir_path = Path(config.playlistDirPathFormat.format(codec=codec,
|
||||||
**metadata.model_dump(),
|
**safe_meta,
|
||||||
**playlist_metadata_to_params(playlist)))
|
**safe_pl_meta))
|
||||||
else:
|
else:
|
||||||
song_name = config.songNameFormat.format(codec=codec, **metadata.model_dump())
|
safe_meta = get_path_safe_dict(metadata.model_dump())
|
||||||
dir_path = Path(config.dirPathFormat.format(codec=codec, **metadata.model_dump()))
|
song_name = config.songNameFormat.format(codec=codec, **safe_meta)
|
||||||
|
dir_path = Path(config.dirPathFormat.format(codec=codec, **safe_meta))
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
song_name = get_valid_filename(song_name)
|
song_name = get_valid_filename(song_name)
|
||||||
dir_path = Path(*[get_valid_filename(part) if ":\\" not in part else part for part in dir_path.parts])
|
dir_path = Path(*[get_valid_filename(part) if ":\\" not in part else part for part in dir_path.parts])
|
||||||
|
|||||||
Reference in New Issue
Block a user