diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js index d50df776a..d7bc79650 100644 --- a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js +++ b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js @@ -47,7 +47,9 @@ const artistTokens = [ { token: '{Artist CleanName}', example: 'Artist Name' }, - { token: '{Artist Disambiguation}', example: 'Disambiguation' } + { token: '{Artist Disambiguation}', example: 'Disambiguation' }, + + { token: '{Artist Genre}', example: 'Pop' } ]; const albumTokens = [ @@ -59,7 +61,9 @@ const albumTokens = [ { token: '{Album Type}', example: 'Album Type' }, - { token: '{Album Disambiguation}', example: 'Disambiguation' } + { token: '{Album Disambiguation}', example: 'Disambiguation' }, + + { token: '{Album Genre}', example: 'Rock' } ]; const mediumTokens = [ diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs index 1311ecceb..ec91f3fbd 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs @@ -10,6 +10,7 @@ using NzbDrone.Core.Music; using NzbDrone.Core.Organizer; using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; +using TagLib; namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests { @@ -37,7 +38,8 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .With(s => s.Metadata = new ArtistMetadata { Disambiguation = "US Rock Band", - Name = "Linkin Park" + Name = "Linkin Park", + Genres = new List { "Rock" } }) .Build(); @@ -66,6 +68,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .With(s => s.Title = "Hybrid Theory") .With(s => s.AlbumType = "Album") .With(s => s.Disambiguation = "The Best Album") + .With(s => s.Genres = new List { "Rock" }) .Build(); _mixAlbum = Builder @@ -205,6 +208,15 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .Should().Be("US Rock Band"); } + [Test] + public void should_replace_artist_genre() + { + _namingConfig.StandardTrackFormat = "{Artist Genre}"; + + Subject.BuildTrackFileName(new List { _track1 }, _artist, _album, _trackFile) + .Should().Be("Rock"); + } + [Test] public void should_replace_Album_space_Title() { @@ -232,6 +244,15 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .Should().Be("The Best Album"); } + [Test] + public void should_replace_album_genre() + { + _namingConfig.StandardTrackFormat = "{Album Genre}"; + + Subject.BuildTrackFileName(new List { _track1 }, _artist, _album, _trackFile) + .Should().Be("Rock"); + } + [Test] public void should_replace_Album_underscore_Title() { diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index fa9d19708..6a112e1d9 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -267,6 +267,7 @@ namespace NzbDrone.Core.Organizer tokenHandlers["{Artist Name}"] = m => artist.Name; tokenHandlers["{Artist CleanName}"] = m => CleanTitle(artist.Name); tokenHandlers["{Artist NameThe}"] = m => TitleThe(artist.Name); + tokenHandlers["{Artist Genre}"] = m => artist.Metadata.Value.Genres?.FirstOrDefault() ?? string.Empty; tokenHandlers["{Artist NameFirstCharacter}"] = m => TitleThe(artist.Name).Substring(0, 1).FirstCharToUpper(); if (artist.Metadata.Value.Disambiguation != null) @@ -281,6 +282,7 @@ namespace NzbDrone.Core.Organizer tokenHandlers["{Album CleanTitle}"] = m => CleanTitle(album.Title); tokenHandlers["{Album TitleThe}"] = m => TitleThe(album.Title); tokenHandlers["{Album Type}"] = m => album.AlbumType; + tokenHandlers["{Album Genre}"] = m => album.Genres.FirstOrDefault() ?? string.Empty; if (album.Disambiguation != null) { diff --git a/src/NzbDrone.Core/Organizer/FileNameSampleService.cs b/src/NzbDrone.Core/Organizer/FileNameSampleService.cs index 7c7fb9165..538ed7369 100644 --- a/src/NzbDrone.Core/Organizer/FileNameSampleService.cs +++ b/src/NzbDrone.Core/Organizer/FileNameSampleService.cs @@ -32,7 +32,8 @@ namespace NzbDrone.Core.Organizer var artistMetadata = new ArtistMetadata { Name = "The Artist Name", - Disambiguation = "US Rock Band" + Disambiguation = "US Rock Band", + Genres = new List { "Pop" } }; _standardArtist = new Artist @@ -46,6 +47,7 @@ namespace NzbDrone.Core.Organizer ReleaseDate = System.DateTime.Today, AlbumType = "Album", Disambiguation = "The Best Album", + Genres = new List { "Rock" } }; _singleRelease = new AlbumRelease