mirror of
https://git.sr.ht/~joren/streamrip-go
synced 2026-07-27 23:42:28 +02:00
fix: use all album artists for folder naming
This commit is contained in:
+41
-8
@@ -648,10 +648,7 @@ func (m *Main) ripAlbum(ctx context.Context, p provider.Client, source, albumID
|
|||||||
}
|
}
|
||||||
|
|
||||||
albumTitle := titleFromMetadata(albumMeta, albumID)
|
albumTitle := titleFromMetadata(albumMeta, albumID)
|
||||||
albumArtist := jsonutil.NestedString(albumMeta, "artist", "name")
|
albumArtist := extractAlbumArtist(albumMeta)
|
||||||
if albumArtist == "" {
|
|
||||||
albumArtist = "Unknown"
|
|
||||||
}
|
|
||||||
releaseDate := jsonutil.StringFromAny(albumMeta["release_date_original"])
|
releaseDate := jsonutil.StringFromAny(albumMeta["release_date_original"])
|
||||||
if releaseDate == "" {
|
if releaseDate == "" {
|
||||||
releaseDate = jsonutil.StringFromAny(albumMeta["release_date"])
|
releaseDate = jsonutil.StringFromAny(albumMeta["release_date"])
|
||||||
@@ -1224,10 +1221,7 @@ func (m *Main) trackOutputPath(source, id, title, ext string, d *provider.Downlo
|
|||||||
if albumID == "" {
|
if albumID == "" {
|
||||||
albumID = id
|
albumID = id
|
||||||
}
|
}
|
||||||
albumArtist := jsonutil.NestedString(trackMeta, "album", "artist", "name")
|
albumArtist := extractAlbumArtist(trackMetaAlbum(trackMeta))
|
||||||
if albumArtist == "" {
|
|
||||||
albumArtist = jsonutil.NestedString(trackMeta, "performer", "name")
|
|
||||||
}
|
|
||||||
albumYear := naming.YearFromDate(jsonutil.StringFromAny(trackMeta["release_date_original"]))
|
albumYear := naming.YearFromDate(jsonutil.StringFromAny(trackMeta["release_date_original"]))
|
||||||
if albumYear == "Unknown" {
|
if albumYear == "Unknown" {
|
||||||
albumYear = naming.YearFromDate(jsonutil.StringFromAny(trackMeta["release_date"]))
|
albumYear = naming.YearFromDate(jsonutil.StringFromAny(trackMeta["release_date"]))
|
||||||
@@ -1613,3 +1607,42 @@ func isFFmpegMissingError(err error) bool {
|
|||||||
}
|
}
|
||||||
return strings.Contains(strings.ToLower(err.Error()), "ffmpeg not found")
|
return strings.Contains(strings.ToLower(err.Error()), "ffmpeg not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func extractAlbumArtist(albumMeta map[string]any) string {
|
||||||
|
if artistsRaw, ok := albumMeta["artists"].([]any); ok {
|
||||||
|
names := make([]string, 0, len(artistsRaw))
|
||||||
|
for _, a := range artistsRaw {
|
||||||
|
artist, ok := a.(map[string]any)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if name := jsonutil.StringFromAny(artist["name"]); name != "" {
|
||||||
|
names = append(names, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(names) > 0 {
|
||||||
|
return displayArtistNames(names)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if names := stringSliceFromAny(albumMeta["artist_names"]); len(names) > 0 {
|
||||||
|
return displayArtistNames(names)
|
||||||
|
}
|
||||||
|
artist := jsonutil.NestedString(albumMeta, "artist", "name")
|
||||||
|
if artist != "" {
|
||||||
|
return artist
|
||||||
|
}
|
||||||
|
return "Unknown"
|
||||||
|
}
|
||||||
|
|
||||||
|
func displayArtistNames(names []string) string {
|
||||||
|
switch len(names) {
|
||||||
|
case 0:
|
||||||
|
return ""
|
||||||
|
case 1:
|
||||||
|
return names[0]
|
||||||
|
case 2:
|
||||||
|
return names[0] + " & " + names[1]
|
||||||
|
default:
|
||||||
|
return strings.Join(names[:len(names)-1], ", ") + " & " + names[len(names)-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user