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 @@
-