mirror of
https://git.unlock-music.dev/um/cli.git
synced 2025-08-28 08:23:14 +08:00
Merge pull request 'Fix: Artist metadata is lost for NCM files with mixed-type artist arrays' (#131) from solitudechn/cli:fix/handle-mixed-type-artist into main
Reviewed-on: https://git.unlock-music.dev/um/cli/pulls/131
This commit is contained in:
commit
589e573b55
@ -43,23 +43,42 @@ func (m *ncmMetaMusic) GetAlbumImageURL() string {
|
|||||||
return m.AlbumPic
|
return m.AlbumPic
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ncmMetaMusic) GetArtists() []string {
|
|
||||||
m.logger.Debug("ncm artists", zap.Any("artists", m.Artist))
|
|
||||||
|
|
||||||
var artists []string = nil
|
func (m *ncmMetaMusic) GetArtists() []string {
|
||||||
if jsonArtists, ok := m.Artist.([][]string); ok {
|
m.logger.Debug("ncm artists raw", zap.Any("artists", m.Artist))
|
||||||
for _, artist := range jsonArtists {
|
var artists []string
|
||||||
for _, name := range artist {
|
switch v := m.Artist.(type) {
|
||||||
artists = append(artists, name)
|
|
||||||
|
// Case 1: Handles the format [['artistA'], ['artistB']]
|
||||||
|
case [][]string:
|
||||||
|
for _, artistSlice := range v {
|
||||||
|
artists = append(artists, artistSlice...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Case 2: Handles the simple format "artistA"
|
||||||
|
// Ref: https://git.unlock-music.dev/um/cli/issues/78
|
||||||
|
case string:
|
||||||
|
artists = []string{v}
|
||||||
|
|
||||||
|
// Case 3: Handles the mixed-type format [['artistA', 12345], ['artistB', 67890]]
|
||||||
|
// This is the key fix for correctly parsing artist info from certain files.
|
||||||
|
case []interface{}:
|
||||||
|
for _, item := range v {
|
||||||
|
if innerSlice, ok := item.([]interface{}); ok {
|
||||||
|
if len(innerSlice) > 0 {
|
||||||
|
// Assume the first element is the artist's name.
|
||||||
|
if artistName, ok := innerSlice[0].(string); ok {
|
||||||
|
artists = append(artists, artistName)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if artist, ok := m.Artist.(string); ok {
|
|
||||||
// #78: artist is a string type.
|
default:
|
||||||
// https://git.unlock-music.dev/um/cli/issues/78
|
// Log a warning if the artist type is unexpected and not handled.
|
||||||
artists = []string{artist}
|
|
||||||
} else {
|
|
||||||
m.logger.Warn("unexpected artist type", zap.Any("artists", m.Artist))
|
m.logger.Warn("unexpected artist type", zap.Any("artists", m.Artist))
|
||||||
}
|
}
|
||||||
|
|
||||||
return artists
|
return artists
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user