diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js index e1fe3a2b9..8399b8df1 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js @@ -66,7 +66,6 @@ class AddNewArtistSearchResult extends Component { const { foreignArtistId, artistName, - nameSlug, year, disambiguation, artistType, @@ -79,7 +78,7 @@ class AddNewArtistSearchResult extends Component { isSmallScreen } = this.props; - const linkProps = isExistingArtist ? { to: `/artist/${nameSlug}` } : { onPress: this.onPress }; + const linkProps = isExistingArtist ? { to: `/artist/${foreignArtistId}` } : { onPress: this.onPress }; let albums = '1 Album'; if (albumCount > 1) { @@ -193,7 +192,6 @@ class AddNewArtistSearchResult extends Component { AddNewArtistSearchResult.propTypes = { foreignArtistId: PropTypes.string.isRequired, artistName: PropTypes.string.isRequired, - nameSlug: PropTypes.string.isRequired, year: PropTypes.number, disambiguation: PropTypes.string, artistType: PropTypes.string, diff --git a/frontend/src/AlbumStudio/AlbumStudioRow.js b/frontend/src/AlbumStudio/AlbumStudioRow.js index 501d1c74e..74ab860b7 100644 --- a/frontend/src/AlbumStudio/AlbumStudioRow.js +++ b/frontend/src/AlbumStudio/AlbumStudioRow.js @@ -19,7 +19,6 @@ class AlbumStudioRow extends Component { const { artistId, status, - nameSlug, foreignArtistId, artistName, monitored, @@ -84,7 +83,6 @@ class AlbumStudioRow extends Component { AlbumStudioRow.propTypes = { artistId: PropTypes.number.isRequired, status: PropTypes.string.isRequired, - nameSlug: PropTypes.string.isRequired, foreignArtistId: PropTypes.string.isRequired, artistName: PropTypes.string.isRequired, monitored: PropTypes.bool.isRequired, diff --git a/frontend/src/AlbumStudio/AlbumStudioRowConnector.js b/frontend/src/AlbumStudio/AlbumStudioRowConnector.js index 6172d2c71..901f9407e 100644 --- a/frontend/src/AlbumStudio/AlbumStudioRowConnector.js +++ b/frontend/src/AlbumStudio/AlbumStudioRowConnector.js @@ -20,7 +20,6 @@ function createMapStateToProps() { ...artist, artistId: artist.id, artistName: artist.artistName, - nameSlug: artist.nameSlug, monitored: artist.monitored, status: artist.status, isSaving: artist.isSaving, diff --git a/frontend/src/Artist/Index/Table/ArtistIndexRow.js b/frontend/src/Artist/Index/Table/ArtistIndexRow.js index 752db1180..7328e3d35 100644 --- a/frontend/src/Artist/Index/Table/ArtistIndexRow.js +++ b/frontend/src/Artist/Index/Table/ArtistIndexRow.js @@ -66,7 +66,6 @@ class ArtistIndexRow extends Component { monitored, status, artistName, - nameSlug, foreignArtistId, artistType, qualityProfile, @@ -79,7 +78,6 @@ class ArtistIndexRow extends Component { trackCount, trackFileCount, totalTrackCount, - latestAlbum, path, sizeOnDisk, tags, @@ -361,7 +359,6 @@ ArtistIndexRow.propTypes = { monitored: PropTypes.bool.isRequired, status: PropTypes.string.isRequired, artistName: PropTypes.string.isRequired, - nameSlug: PropTypes.string.isRequired, foreignArtistId: PropTypes.string.isRequired, artistType: PropTypes.string, qualityProfile: PropTypes.object.isRequired, diff --git a/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js b/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js deleted file mode 100644 index 55c576dbd..000000000 --- a/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react'; -import getProgressBarKind from 'Utilities/Artist/getProgressBarKind'; -import ProgressBar from 'Components/ProgressBar'; -import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell'; -import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector'; -import QualityProfileNameConnector from 'Settings/Profiles/Quality/QualityProfileNameConnector'; -import ArtistNameLink from 'Artist/ArtistNameLink'; -import ArtistIndexItemConnector from 'Artist/Index/ArtistIndexItemConnector'; -import ArtistIndexActionsCell from './ArtistIndexActionsCell'; -import ArtistStatusCell from './ArtistStatusCell'; - -export default function artistIndexCellRenderers(cellProps) { - const { - cellKey, - dataKey, - rowData, - ...otherProps - } = cellProps; - - const { - id, - monitored, - status, - name, - nameSlug, - foreignArtistId, - qualityProfileId, - nextAiring, - previousAiring, - albumCount, - trackCount, - trackFileCount - } = rowData; - - const progress = trackCount ? trackFileCount / trackCount * 100 : 100; - - if (dataKey === 'status') { - return ( - - ); - } - - if (dataKey === 'sortName') { - return ( - - - - - ); - } - - if (dataKey === 'qualityProfileId') { - return ( - - - - ); - } - - if (dataKey === 'nextAiring') { - return ( - - ); - } - - if (dataKey === 'albumCount') { - return ( - - {albumCount} - - ); - } - - if (dataKey === 'trackProgress') { - return ( - - - - ); - } - - if (dataKey === 'actions') { - return ( - - ); - } -} diff --git a/src/Lidarr.Api.V1/Artist/ArtistResource.cs b/src/Lidarr.Api.V1/Artist/ArtistResource.cs index d8f53acb2..df3b60b57 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistResource.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistResource.cs @@ -63,7 +63,6 @@ namespace Lidarr.Api.V1.Artist public DateTime Added { get; set; } public AddArtistOptions AddOptions { get; set; } public Ratings Ratings { get; set; } - public string NameSlug { get; set; } //TODO: Add series statistics as a property of the series (instead of individual properties) } @@ -102,7 +101,6 @@ namespace Lidarr.Api.V1.Artist CleanName = model.CleanName, ForeignArtistId = model.ForeignArtistId, - NameSlug = model.NameSlug, RootFolderPath = model.RootFolderPath, Genres = model.Genres, Tags = model.Tags, @@ -142,7 +140,6 @@ namespace Lidarr.Api.V1.Artist ArtistType = resource.ArtistType, CleanName = resource.CleanName, ForeignArtistId = resource.ForeignArtistId, - NameSlug = resource.NameSlug, RootFolderPath = resource.RootFolderPath, Genres = resource.Genres, Tags = resource.Tags, diff --git a/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxyFixture.cs b/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxyFixture.cs index 42521b355..4c94d22ff 100644 --- a/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxyFixture.cs +++ b/src/NzbDrone.Core.Test/MetadataSource/SkyHook/SkyHookProxyFixture.cs @@ -67,15 +67,6 @@ namespace NzbDrone.Core.Test.MetadataSource.SkyHook Assert.Throws(() => Subject.GetArtistInfo("aaaaaa-aaa-aaaa-aaaa", 1)); } - [Test] - [Ignore("We don't return a dothack from Metadata")] - public void should_not_have_period_at_start_of_name_slug() - { - var details = Subject.GetArtistInfo("b6db95cd-88d9-492f-bbf6-a34e0e89b2e5", 1); - - details.Item1.NameSlug.Should().Be("dothack"); - } - private void ValidateArtist(Artist artist) { artist.Should().NotBeNull(); @@ -84,7 +75,6 @@ namespace NzbDrone.Core.Test.MetadataSource.SkyHook artist.SortName.Should().Be(Parser.Parser.NormalizeTitle(artist.Name)); artist.Overview.Should().NotBeNullOrWhiteSpace(); artist.Images.Should().NotBeEmpty(); - artist.NameSlug.Should().NotBeNullOrWhiteSpace(); //series.TvRageId.Should().BeGreaterThan(0); artist.ForeignArtistId.Should().NotBeNullOrWhiteSpace(); } diff --git a/src/NzbDrone.Core.Test/MusicTests/ArtistNameSlugValidatorFixture.cs b/src/NzbDrone.Core.Test/MusicTests/ArtistNameSlugValidatorFixture.cs deleted file mode 100644 index 1a96907d3..000000000 --- a/src/NzbDrone.Core.Test/MusicTests/ArtistNameSlugValidatorFixture.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using FizzWare.NBuilder; -using FluentAssertions; -using FluentValidation.Validators; -using NUnit.Framework; -using NzbDrone.Common.Extensions; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Music; -using NzbDrone.Test.Common; - -namespace NzbDrone.Core.Test.TvTests -{ - [TestFixture] - public class ArtistNameSlugValidatorFixture : CoreTest - { - private List _artist; - private TestValidator _validator; - - [SetUp] - public void Setup() - { - _artist = Builder.CreateListOfSize(1) - .Build() - .ToList(); - - _validator = new TestValidator - { - v => v.RuleFor(s => s.NameSlug).SetValidator(Subject) - }; - - Mocker.GetMock() - .Setup(s => s.GetAllArtists()) - .Returns(_artist); - } - - [Test] - public void should_not_be_valid_if_there_is_an_existing_artist_with_the_same_title_slug() - { - var series = Builder.CreateNew() - .With(s => s.Id = 100) - .With(s => s.NameSlug = _artist.First().NameSlug) - .Build(); - - _validator.Validate(series).IsValid.Should().BeFalse(); - } - - [Test] - public void should_be_valid_if_there_is_not_an_existing_artist_with_the_same_title_slug() - { - var series = Builder.CreateNew() - .With(s => s.NameSlug = "MyNameSlug") - .Build(); - - _validator.Validate(series).IsValid.Should().BeTrue(); - } - - [Test] - public void should_be_valid_if_there_is_an_existing_artist_with_a_null_title_slug() - { - _artist.First().NameSlug = null; - - var series = Builder.CreateNew() - .With(s => s.NameSlug = "MyNameSlug") - .Build(); - - _validator.Validate(series).IsValid.Should().BeTrue(); - } - - [Test] - public void should_be_valid_when_updating_an_existing_artist() - { - _validator.Validate(_artist.First().JsonClone()).IsValid.Should().BeTrue(); - } - } -} diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index cd62019d5..cc9023d6d 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -285,7 +285,6 @@ - diff --git a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs index 4a92f2541..b9b809a94 100644 --- a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs +++ b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs @@ -270,7 +270,6 @@ namespace NzbDrone.Core.MetadataSource.SkyHook artist.ForeignArtistId = resource.Id; artist.Genres = resource.Genres; artist.Overview = resource.Overview; - artist.NameSlug = Parser.Parser.CleanArtistName(artist.Name) + "-" + resource.Id.Substring(resource.Id.Length - 6); artist.CleanName = Parser.Parser.CleanArtistName(artist.Name); artist.SortName = Parser.Parser.NormalizeTitle(artist.Name); artist.Disambiguation = resource.Disambiguation; diff --git a/src/NzbDrone.Core/Music/AddArtistValidator.cs b/src/NzbDrone.Core/Music/AddArtistValidator.cs index 4a8f84967..6e208051c 100644 --- a/src/NzbDrone.Core/Music/AddArtistValidator.cs +++ b/src/NzbDrone.Core/Music/AddArtistValidator.cs @@ -17,8 +17,7 @@ namespace NzbDrone.Core.Music { public AddArtistValidator(RootFolderValidator rootFolderValidator, ArtistPathValidator artistPathValidator, - ArtistAncestorValidator artistAncestorValidator, - ArtistSlugValidator artistTitleSlugValidator) + ArtistAncestorValidator artistAncestorValidator) { RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure) .IsValidPath() @@ -26,7 +25,6 @@ namespace NzbDrone.Core.Music .SetValidator(artistPathValidator) .SetValidator(artistAncestorValidator); - RuleFor(c => c.NameSlug).SetValidator(artistTitleSlugValidator);// TODO: Check if we are going to use a slug or artistName } } } diff --git a/src/NzbDrone.Core/Music/Album.cs b/src/NzbDrone.Core/Music/Album.cs index 2cf795036..13ea3f1c6 100644 --- a/src/NzbDrone.Core/Music/Album.cs +++ b/src/NzbDrone.Core/Music/Album.cs @@ -12,6 +12,7 @@ namespace NzbDrone.Core.Music Genres = new List(); Images = new List(); Media = new List(); + Releases = new List(); } public const string RELEASE_DATE_FORMAT = "yyyy-MM-dd"; diff --git a/src/NzbDrone.Core/Music/Artist.cs b/src/NzbDrone.Core/Music/Artist.cs index 4bd2288c3..28b77ef69 100644 --- a/src/NzbDrone.Core/Music/Artist.cs +++ b/src/NzbDrone.Core/Music/Artist.cs @@ -30,7 +30,6 @@ namespace NzbDrone.Core.Music public int DiscogsId { get; set; } public string AMId { get; set; } public string Name { get; set; } - public string NameSlug { get; set; } public string CleanName { get; set; } public string SortName { get; set; } public string Overview { get; set; } diff --git a/src/NzbDrone.Core/Music/ArtistSlugValidator.cs b/src/NzbDrone.Core/Music/ArtistSlugValidator.cs deleted file mode 100644 index bbaa0c24b..000000000 --- a/src/NzbDrone.Core/Music/ArtistSlugValidator.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Linq; -using FluentValidation.Validators; -using NzbDrone.Common.Extensions; -using System; -using System.Collections.Generic; -using System.Text; - -namespace NzbDrone.Core.Music -{ - public class ArtistSlugValidator : PropertyValidator - { - private readonly IArtistService _artistService; - - public ArtistSlugValidator(IArtistService artistService) - : base("Name slug '{slug}' is in use by artist '{artistName}'") - { - _artistService = artistService; - } - - protected override bool IsValid(PropertyValidatorContext context) - { - if (context.PropertyValue == null) return true; - - dynamic instance = context.ParentContext.InstanceToValidate; - var instanceId = (int)instance.Id; - var slug = context.PropertyValue.ToString(); - - var conflictingArtist = _artistService.GetAllArtists() - .FirstOrDefault(s => s.NameSlug.IsNotNullOrWhiteSpace() && - s.NameSlug.Equals(context.PropertyValue.ToString()) && - s.Id != instanceId); - - if (conflictingArtist == null) - { - return true; - } - - context.MessageFormatter.AppendArgument("slug", slug); - context.MessageFormatter.AppendArgument("artistName", conflictingArtist.Name); - - return false; - } - } -} diff --git a/src/NzbDrone.Core/Music/RefreshArtistService.cs b/src/NzbDrone.Core/Music/RefreshArtistService.cs index 615a6f380..bf2947e84 100644 --- a/src/NzbDrone.Core/Music/RefreshArtistService.cs +++ b/src/NzbDrone.Core/Music/RefreshArtistService.cs @@ -74,7 +74,6 @@ namespace NzbDrone.Core.Music } artist.Name = artistInfo.Name; - artist.NameSlug = artistInfo.NameSlug; artist.Overview = artistInfo.Overview; artist.Status = artistInfo.Status; artist.CleanName = artistInfo.CleanName; diff --git a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs index 97a45f695..5549a8b39 100644 --- a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs +++ b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs @@ -38,7 +38,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_EventType", "Grab"); environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString()); environmentVariables.Add("Lidarr_Artist_Name", artist.Name); - environmentVariables.Add("Lidarr_Artist_MBId", artist.ForeignArtistId.ToString()); + environmentVariables.Add("Lidarr_Artist_MBId", artist.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.ArtistType); environmentVariables.Add("Lidarr_Release_AlbumCount", remoteAlbum.Albums.Count.ToString()); environmentVariables.Add("Lidarr_Release_AlbumReleaseDates", string.Join(",", remoteAlbum.Albums.Select(e => e.ReleaseDate))); @@ -67,7 +67,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString()); environmentVariables.Add("Lidarr_Artist_Name", artist.Name); environmentVariables.Add("Lidarr_Artist_Path", artist.Path); - environmentVariables.Add("Lidarr_Artist_MBId", artist.ForeignArtistId.ToString()); + environmentVariables.Add("Lidarr_Artist_MBId", artist.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.ArtistType); environmentVariables.Add("Lidarr_TrackFile_Id", trackFile.Id.ToString()); environmentVariables.Add("Lidarr_TrackFile_TrackCount", trackFile.Tracks.Value.Count.ToString()); @@ -102,7 +102,7 @@ namespace NzbDrone.Core.Notifications.CustomScript environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString()); environmentVariables.Add("Lidarr_Artist_Name", artist.Name); environmentVariables.Add("Lidarr_Artist_Path", artist.Path); - environmentVariables.Add("Lidarr_Artist_MBId", artist.ForeignArtistId.ToString()); + environmentVariables.Add("Lidarr_Artist_MBId", artist.ForeignArtistId); environmentVariables.Add("Lidarr_Artist_Type", artist.ArtistType); ExecuteScript(environmentVariables); diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 4fb98bbb1..dbdc0ba8a 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -795,7 +795,6 @@ -