From 85629866b6fdcc13f5a1ffec3875580c9c9ab5b7 Mon Sep 17 00:00:00 2001 From: zhaarey <157944548+zhaarey@users.noreply.github.com> Date: Thu, 6 Jun 2024 00:21:27 +0800 Subject: [PATCH] fix playlist dl --- config.yaml | 2 ++ main.go | 47 +++++++++++++++++++++++++++++++++-------------- main_atmos.go | 48 +++++++++++++++++++++++++++++++++--------------- main_select.go | 47 +++++++++++++++++++++++++++++++++-------------- 4 files changed, 101 insertions(+), 43 deletions(-) diff --git a/config.yaml b/config.yaml index 41e71ab..35bde13 100644 --- a/config.yaml +++ b/config.yaml @@ -14,6 +14,8 @@ atmos-max: 2768 #2768 2448 #{AlbumId} {AlbumName} {ArtistName} {ReleaseDate} {ReleaseYear} {UPC} {Copyright} {Quality} #example: {ReleaseYear} - {ArtistName} - {AlbumName}({AlbumId})({UPC})({Copyright}) album-folder-format: "{AlbumName}" +#{PlaylistId} {PlaylistName} {ArtistName} {Quality} +playlist-folder-format: "{PlaylistName}" #{SongId} {SongNumer} {SongName} {DiscNumber} {TrackNumber} {Quality} #example: Disk {DiscNumber} - Track {TrackNumber} {SongName} [{Quality}]" song-file-format: "{SongNumer}. {SongName}" diff --git a/main.go b/main.go index 989649f..fd1d2b6 100644 --- a/main.go +++ b/main.go @@ -46,6 +46,7 @@ type Config struct { AlacSaveFolder string `yaml:"alac-save-folder"` AtmosSaveFolder string `yaml:"atmos-save-folder"` AlbumFolderFormat string `yaml:"album-folder-format"` + PlaylistFolderFormat string `yaml:"playlist-folder-format"` ArtistFolderFormat string `yaml:"artist-folder-format"` SongFileFormat string `yaml:"song-file-format"` ExplicitChoice string `yaml:"explicit-choice"` @@ -1163,10 +1164,18 @@ func rip(albumId string, token string, storefront string, userToken string) erro } singerFolder:="" if config.ArtistFolderFormat != ""{ - singerFoldername := strings.NewReplacer( - "{ArtistName}", meta.Data[0].Attributes.ArtistName, - "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, - ).Replace(config.ArtistFolderFormat) + var singerFoldername string + if strings.Contains(albumId, "pl.") { + singerFoldername = strings.NewReplacer( + "{ArtistName}", "Apple Music", + "{ArtistId}", "", + ).Replace(config.ArtistFolderFormat) + }else{ + singerFoldername = strings.NewReplacer( + "{ArtistName}", meta.Data[0].Attributes.ArtistName, + "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, + ).Replace(config.ArtistFolderFormat) + } if strings.HasSuffix(singerFoldername, ".") { singerFoldername = strings.ReplaceAll(singerFoldername, ".", "") } @@ -1192,16 +1201,26 @@ func rip(albumId string, token string, storefront string, userToken string) erro fmt.Println("Failed to extract quality from manifest.\n", err) } } - albumFolder := strings.NewReplacer( - "{ReleaseDate}", meta.Data[0].Attributes.ReleaseDate, - "{ReleaseYear}", meta.Data[0].Attributes.ReleaseDate[:4], - "{ArtistName}", meta.Data[0].Attributes.ArtistName, - "{AlbumName}", meta.Data[0].Attributes.Name, - "{UPC}", meta.Data[0].Attributes.Upc, - "{Copyright}", meta.Data[0].Attributes.Copyright, - "{AlbumId}", albumId, - "{Quality}", Quality, - ).Replace(config.AlbumFolderFormat) + var albumFolder string + if strings.Contains(albumId, "pl.") { + albumFolder = strings.NewReplacer( + "{ArtistName}", "Apple Music", + "{PlaylistName}", meta.Data[0].Attributes.Name, + "{PlaylistId}", albumId, + "{Quality}",Quality, + ).Replace(config.PlaylistFolderFormat) + }else{ + albumFolder = strings.NewReplacer( + "{ReleaseDate}", meta.Data[0].Attributes.ReleaseDate, + "{ReleaseYear}", meta.Data[0].Attributes.ReleaseDate[:4], + "{ArtistName}", meta.Data[0].Attributes.ArtistName, + "{AlbumName}", meta.Data[0].Attributes.Name, + "{UPC}", meta.Data[0].Attributes.Upc, + "{Copyright}", meta.Data[0].Attributes.Copyright, + "{AlbumId}", albumId, + "{Quality}", Quality, + ).Replace(config.AlbumFolderFormat) + } if meta.Data[0].Attributes.IsMasteredForItunes{ if config.AppleMasterChoice != ""{ albumFolder = fmt.Sprintf("%s %s", albumFolder,config.AppleMasterChoice) diff --git a/main_atmos.go b/main_atmos.go index 37968aa..c983699 100644 --- a/main_atmos.go +++ b/main_atmos.go @@ -45,6 +45,7 @@ type Config struct { AlacSaveFolder string `yaml:"alac-save-folder"` AtmosSaveFolder string `yaml:"atmos-save-folder"` AlbumFolderFormat string `yaml:"album-folder-format"` + PlaylistFolderFormat string `yaml:"playlist-folder-format"` ArtistFolderFormat string `yaml:"artist-folder-format"` SongFileFormat string `yaml:"song-file-format"` ExplicitChoice string `yaml:"explicit-choice"` @@ -1123,10 +1124,18 @@ func rip(albumId string, token string, storefront string, userToken string) erro } singerFolder:="" if config.ArtistFolderFormat != ""{ - singerFoldername := strings.NewReplacer( - "{ArtistName}", meta.Data[0].Attributes.ArtistName, - "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, - ).Replace(config.ArtistFolderFormat) + var singerFoldername string + if strings.Contains(albumId, "pl.") { + singerFoldername = strings.NewReplacer( + "{ArtistName}", "Apple Music", + "{ArtistId}", "", + ).Replace(config.ArtistFolderFormat) + }else{ + singerFoldername = strings.NewReplacer( + "{ArtistName}", meta.Data[0].Attributes.ArtistName, + "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, + ).Replace(config.ArtistFolderFormat) + } if strings.HasSuffix(singerFoldername, ".") { singerFoldername = strings.ReplaceAll(singerFoldername, ".", "") } @@ -1134,16 +1143,26 @@ func rip(albumId string, token string, storefront string, userToken string) erro fmt.Println(singerFoldername) singerFolder = filepath.Join(config.AlacSaveFolder, forbiddenNames.ReplaceAllString(singerFoldername, "_")) } - albumFolder := strings.NewReplacer( - "{ReleaseDate}", meta.Data[0].Attributes.ReleaseDate, - "{ReleaseYear}", meta.Data[0].Attributes.ReleaseDate[:4], - "{ArtistName}", meta.Data[0].Attributes.ArtistName, - "{AlbumName}", meta.Data[0].Attributes.Name, - "{UPC}", meta.Data[0].Attributes.Upc, - "{Copyright}", meta.Data[0].Attributes.Copyright, - "{AlbumId}", albumId, - "{Quality}","", - ).Replace(config.AlbumFolderFormat) + var albumFolder string + if strings.Contains(albumId, "pl.") { + albumFolder = strings.NewReplacer( + "{ArtistName}", "Apple Music", + "{PlaylistName}", meta.Data[0].Attributes.Name, + "{PlaylistId}", albumId, + "{Quality}","Atmos", + ).Replace(config.PlaylistFolderFormat) + }else{ + albumFolder = strings.NewReplacer( + "{ReleaseDate}", meta.Data[0].Attributes.ReleaseDate, + "{ReleaseYear}", meta.Data[0].Attributes.ReleaseDate[:4], + "{ArtistName}", meta.Data[0].Attributes.ArtistName, + "{AlbumName}", meta.Data[0].Attributes.Name, + "{UPC}", meta.Data[0].Attributes.Upc, + "{Copyright}", meta.Data[0].Attributes.Copyright, + "{AlbumId}", albumId, + "{Quality}","Atmos", + ).Replace(config.AlbumFolderFormat) + } if meta.Data[0].Attributes.IsMasteredForItunes{ if config.AppleMasterChoice != ""{ albumFolder = fmt.Sprintf("%s %s", albumFolder,config.AppleMasterChoice) @@ -1159,7 +1178,6 @@ func rip(albumId string, token string, storefront string, userToken string) erro albumFolder = fmt.Sprintf("%s %s", albumFolder,config.CleanChoice) } } - albumFolder = fmt.Sprintf("%s [Atmos]", albumFolder) if strings.HasSuffix(albumFolder, ".") { albumFolder = strings.ReplaceAll(albumFolder, ".", "") } diff --git a/main_select.go b/main_select.go index d2c608e..4799bdf 100644 --- a/main_select.go +++ b/main_select.go @@ -46,6 +46,7 @@ type Config struct { AlacSaveFolder string `yaml:"alac-save-folder"` AtmosSaveFolder string `yaml:"atmos-save-folder"` AlbumFolderFormat string `yaml:"album-folder-format"` + PlaylistFolderFormat string `yaml:"playlist-folder-format"` ArtistFolderFormat string `yaml:"artist-folder-format"` SongFileFormat string `yaml:"song-file-format"` ExplicitChoice string `yaml:"explicit-choice"` @@ -1126,10 +1127,18 @@ func rip(albumId string, token string, storefront string, userToken string) erro } singerFolder:="" if config.ArtistFolderFormat != ""{ - singerFoldername := strings.NewReplacer( - "{ArtistName}", meta.Data[0].Attributes.ArtistName, - "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, - ).Replace(config.ArtistFolderFormat) + var singerFoldername string + if strings.Contains(albumId, "pl.") { + singerFoldername = strings.NewReplacer( + "{ArtistName}", "Apple Music", + "{ArtistId}", "", + ).Replace(config.ArtistFolderFormat) + }else{ + singerFoldername = strings.NewReplacer( + "{ArtistName}", meta.Data[0].Attributes.ArtistName, + "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, + ).Replace(config.ArtistFolderFormat) + } if strings.HasSuffix(singerFoldername, ".") { singerFoldername = strings.ReplaceAll(singerFoldername, ".", "") } @@ -1137,16 +1146,26 @@ func rip(albumId string, token string, storefront string, userToken string) erro fmt.Println(singerFoldername) singerFolder = filepath.Join(config.AlacSaveFolder, forbiddenNames.ReplaceAllString(singerFoldername, "_")) } - albumFolder := strings.NewReplacer( - "{ReleaseDate}", meta.Data[0].Attributes.ReleaseDate, - "{ReleaseYear}", meta.Data[0].Attributes.ReleaseDate[:4], - "{ArtistName}", meta.Data[0].Attributes.ArtistName, - "{AlbumName}", meta.Data[0].Attributes.Name, - "{UPC}", meta.Data[0].Attributes.Upc, - "{Copyright}", meta.Data[0].Attributes.Copyright, - "{AlbumId}", albumId, - "{Quality}","", - ).Replace(config.AlbumFolderFormat) + var albumFolder string + if strings.Contains(albumId, "pl.") { + albumFolder = strings.NewReplacer( + "{ArtistName}", "Apple Music", + "{PlaylistName}", meta.Data[0].Attributes.Name, + "{PlaylistId}", albumId, + "{Quality}","", + ).Replace(config.PlaylistFolderFormat) + }else{ + albumFolder = strings.NewReplacer( + "{ReleaseDate}", meta.Data[0].Attributes.ReleaseDate, + "{ReleaseYear}", meta.Data[0].Attributes.ReleaseDate[:4], + "{ArtistName}", meta.Data[0].Attributes.ArtistName, + "{AlbumName}", meta.Data[0].Attributes.Name, + "{UPC}", meta.Data[0].Attributes.Upc, + "{Copyright}", meta.Data[0].Attributes.Copyright, + "{AlbumId}", albumId, + "{Quality}", "", + ).Replace(config.AlbumFolderFormat) + } if meta.Data[0].Attributes.IsMasteredForItunes{ if config.AppleMasterChoice != ""{ albumFolder = fmt.Sprintf("%s %s", albumFolder,config.AppleMasterChoice)