nice
This commit is contained in:
parent
35905ea942
commit
99cd872227
13 changed files with 630 additions and 190 deletions
|
|
@ -10,46 +10,6 @@ PROTECTED_ARTISTS = {
|
|||
"The Good, The Bad & The Queen",
|
||||
}
|
||||
|
||||
def split_artists(artist_tag: str) -> list[str]:
|
||||
if not artist_tag:
|
||||
return []
|
||||
|
||||
placeholder_comma = "§COMMA§"
|
||||
placeholder_amp = "§AMP§"
|
||||
|
||||
protected_map = {}
|
||||
|
||||
# Protect known artist names
|
||||
for artist in PROTECTED_ARTISTS:
|
||||
protected = (
|
||||
artist
|
||||
.replace(",", placeholder_comma)
|
||||
.replace("&", placeholder_amp)
|
||||
)
|
||||
protected_map[protected] = artist
|
||||
artist_tag = artist_tag.replace(artist, protected)
|
||||
|
||||
# Split remaining separators
|
||||
parts = re.split(r"[,&]", artist_tag)
|
||||
|
||||
# Restore protected names and trim spaces
|
||||
result = []
|
||||
for part in parts:
|
||||
part = part.strip()
|
||||
if not part:
|
||||
continue
|
||||
|
||||
part = (
|
||||
part
|
||||
.replace(placeholder_comma, ",")
|
||||
.replace(placeholder_amp, "&")
|
||||
)
|
||||
|
||||
result.append(part)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class LocalParser:
|
||||
def __init__(self):
|
||||
self.track_map: dict[str, Track] = {}
|
||||
|
|
@ -60,9 +20,7 @@ class LocalParser:
|
|||
|
||||
def parse_artists(self, data: str) -> List[Artist]:
|
||||
if not data:
|
||||
data = "unknown"
|
||||
|
||||
data = split_artists(data)
|
||||
raise "No artist found"
|
||||
|
||||
artists = []
|
||||
|
||||
|
|
@ -87,7 +45,7 @@ class LocalParser:
|
|||
|
||||
def parse_album(self, data: str) -> Album:
|
||||
if not data:
|
||||
data = "unknown"
|
||||
raise "album is none"
|
||||
|
||||
name = data
|
||||
album_id = name
|
||||
|
|
@ -113,12 +71,15 @@ class LocalParser:
|
|||
|
||||
track.id = track_id
|
||||
track.title = data.get("name")
|
||||
track.artists = self.parse_artists(data.get("artist"))
|
||||
track.artists = self.parse_artists(data.get("artists"))
|
||||
track.album = self.parse_album(data.get("album"))
|
||||
track.local_path = data.get("path")
|
||||
track.duration_ms = data.get("duration")
|
||||
track.has_lyrics = data.get("has_lyrics")
|
||||
|
||||
if not track.album or not len(track.artists) or not track.title:
|
||||
raise "error parsing"
|
||||
|
||||
self.track_map[track.id] = track
|
||||
self.library.tracks.append(track)
|
||||
|
||||
|
|
@ -129,6 +90,8 @@ class LocalParser:
|
|||
|
||||
self.library.update_cache()
|
||||
|
||||
self.library.name = "Local"
|
||||
|
||||
return self.library
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue