From 8f284cadea794debeb0d537a3cf59dfc14383786 Mon Sep 17 00:00:00 2001 From: itouakirai Date: Wed, 5 Mar 2025 07:44:27 +0800 Subject: [PATCH] fix: mv tag panic,artist cover miss --- main.go | 36 ++++++++++++++++++------------------ utils/task/track.go | 10 ++++++++-- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/main.go b/main.go index fef1302..0f038c0 100644 --- a/main.go +++ b/main.go @@ -406,7 +406,10 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) { var err error counter.Total++ fmt.Printf("Track %d of %d: %s\n", track.TaskNum, track.TaskTotal, track.Type) - + //提前获取到的播放列表下track所在的专辑信息 + if track.PreType == "playlists" && Config.UseSongInfoForPlaylist { + track.GetAlbumData(token) + } //mv dl dev if track.Type == "music-videos" { if len(mediaUserToken) <= 50 { @@ -419,10 +422,6 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) { counter.Success++ return } - //提前获取到的播放列表下track所在的专辑信息 - if track.PreType == "playlists" && Config.UseSongInfoForPlaylist { - track.GetAlbumData(token) - } err := mvDownloader(track.ID, track.SaveDir, token, track.Storefront, mediaUserToken, track) if err != nil { fmt.Println("\u26A0 Failed to dl MV:", err) @@ -436,7 +435,7 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) { if dl_aac && Config.AacType == "aac-lc" { needDlAacLc = true } - if track.WebM3u8 == "" { + if track.WebM3u8 == "" && !needDlAacLc { if dl_atmos { fmt.Println("Unavailable") counter.Unavailable++ @@ -549,7 +548,7 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) { _, err := runv3.Run(track.ID, trackPath, token, mediaUserToken, false) if err != nil { fmt.Println("Failed to dl aac-lc:", err) - if err.Error() == "Unavailable"{ + if err.Error() == "Unavailable" { counter.Unavailable++ return } @@ -600,10 +599,6 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) { } } track.SavePath = trackPath - //提前获取到的播放列表下track所在的专辑信息 - if track.PreType == "playlists" && Config.UseSongInfoForPlaylist { - track.GetAlbumData(token) - } err = writeMP4Tags(track, lrc) if err != nil { fmt.Println("\u26A0 Failed to write tags in media:", err) @@ -724,7 +719,7 @@ func ripStation(albumId string, token string, storefront string, mediaUserToken "{SongNumer}", "01", "{SongName}", LimitString(station.Name), "{DiscNumber}", "1", - "{TrackNumber}", "01", + "{TrackNumber}", "1", "{Quality}", "256Kbps", "{Tag}", "", "{Codec}", "AAC", @@ -985,7 +980,15 @@ func ripAlbum(albumId string, token string, storefront string, mediaUserToken st os.MkdirAll(albumFolderPath, os.ModePerm) // Create album folder album.SaveName = albumFolderName fmt.Println(albumFolderName) - //先省略封面相关的获取 + //get artist cover + if Config.SaveArtistCover { + if len(meta.Data[0].Relationships.Artists.Data) > 0 { + _, err = writeCover(singerFolder, "folder", meta.Data[0].Relationships.Artists.Data[0].Attributes.Artwork.Url) + if err != nil { + fmt.Println("Failed to write artist cover.") + } + } + } //get playlist cover covPath, err := writeCover(albumFolderPath, "cover", meta.Data[0].Attributes.Artwork.URL) if err != nil { @@ -1405,9 +1408,7 @@ func writeMP4Tags(track *task.Track, lrc string) error { t.AlbumArtist = track.PlaylistData.Attributes.ArtistName t.AlbumArtistSort = track.PlaylistData.Attributes.ArtistName } else if (track.PreType == "playlists" || track.PreType == "stations") && Config.UseSongInfoForPlaylist { - //使用提前获取到的播放列表下track所在的专辑信息 - len := len(track.AlbumData.Relationships.Tracks.Data) - t.DiscTotal = int16(track.AlbumData.Relationships.Tracks.Data[len-1].Attributes.DiscNumber) + t.DiscTotal = int16(track.DiscTotal) t.TrackTotal = int16(track.AlbumData.Attributes.TrackCount) t.AlbumArtist = track.AlbumData.Attributes.ArtistName t.AlbumArtistSort = track.AlbumData.Attributes.ArtistName @@ -1693,8 +1694,7 @@ func mvDownloader(adamID string, saveDir string, token string, storefront string //tags = append(tags, fmt.Sprintf("UPC=%s", track.PlaylistData.Attributes.Upc)) } else if track.PreType == "playlists" && Config.UseSongInfoForPlaylist { tags = append(tags, fmt.Sprintf("album=%s", track.AlbumData.Attributes.Name)) - len := len(track.AlbumData.Relationships.Tracks.Data) - tags = append(tags, fmt.Sprintf("disk=%d/%d", track.Resp.Attributes.DiscNumber, track.AlbumData.Relationships.Tracks.Data[len-1].Attributes.DiscNumber)) + tags = append(tags, fmt.Sprintf("disk=%d/%d", track.Resp.Attributes.DiscNumber, track.DiscTotal)) tags = append(tags, fmt.Sprintf("track=%d", track.Resp.Attributes.TrackNumber)) tags = append(tags, fmt.Sprintf("tracknum=%d/%d", track.Resp.Attributes.TrackNumber, track.AlbumData.Attributes.TrackCount)) tags = append(tags, fmt.Sprintf("album_artist=%s", track.AlbumData.Attributes.ArtistName)) diff --git a/utils/task/track.go b/utils/task/track.go index d37079f..cb5e87b 100644 --- a/utils/task/track.go +++ b/utils/task/track.go @@ -38,7 +38,13 @@ func (t *Track) GetAlbumData(token string) error { return err } t.AlbumData = resp.Data[0] - //len := len(resp.Data[0].Relationships.Tracks.Data) - //t.DiscTotal = resp.Data[0].Relationships.Tracks.Data[len-1].Attributes.DiscNumber + //尝试获取该track所在album的disk总数 + if len(resp.Data) > 0 { + len := len(resp.Data[0].Relationships.Tracks.Data) + if len > 0 { + t.DiscTotal = resp.Data[0].Relationships.Tracks.Data[len-1].Attributes.DiscNumber + } + } + return nil }