mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-19 13:10:13 -07:00
New: Add old ids, artist aliases and genres
This commit is contained in:
parent
5ac46270ed
commit
76db27e8c2
16 changed files with 91 additions and 14 deletions
|
@ -148,8 +148,8 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||||
var localAlbumRelease = new LocalAlbumRelease(localTracks);
|
var localAlbumRelease = new LocalAlbumRelease(localTracks);
|
||||||
|
|
||||||
Mocker.GetMock<IReleaseService>()
|
Mocker.GetMock<IReleaseService>()
|
||||||
.Setup(x => x.GetReleaseByForeignReleaseId("xxx"))
|
.Setup(x => x.GetReleaseByForeignReleaseId("xxx", true))
|
||||||
.Returns(release);
|
.Returns(release);
|
||||||
|
|
||||||
Subject.GetCandidatesFromTags(localAlbumRelease, null, null, null, false).ShouldBeEquivalentTo(
|
Subject.GetCandidatesFromTags(localAlbumRelease, null, null, null, false).ShouldBeEquivalentTo(
|
||||||
new List<CandidateAlbumRelease> { new CandidateAlbumRelease(release) }
|
new List<CandidateAlbumRelease> { new CandidateAlbumRelease(release) }
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
using FluentMigrator;
|
||||||
|
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migration
|
||||||
|
{
|
||||||
|
[Migration(32)]
|
||||||
|
public class old_ids_and_artist_alias : NzbDroneMigrationBase
|
||||||
|
{
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Alter.Table("ArtistMetadata").AddColumn("Aliases").AsString().WithDefaultValue("[]");
|
||||||
|
|
||||||
|
Alter.Table("ArtistMetadata").AddColumn("OldForeignArtistIds").AsString().WithDefaultValue("[]");
|
||||||
|
Alter.Table("Albums").AddColumn("OldForeignAlbumIds").AsString().WithDefaultValue("[]");
|
||||||
|
Alter.Table("AlbumReleases").AddColumn("OldForeignReleaseIds").AsString().WithDefaultValue("[]");
|
||||||
|
Alter.Table("Tracks").AddColumn("OldForeignRecordingIds").AsString().WithDefaultValue("[]");
|
||||||
|
Alter.Table("Tracks").AddColumn("OldForeignTrackIds").AsString().WithDefaultValue("[]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -275,7 +275,8 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Identification
|
||||||
if (releaseIds.Count == 1 && releaseIds[0].IsNotNullOrWhiteSpace())
|
if (releaseIds.Count == 1 && releaseIds[0].IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
_logger.Debug("Selecting release from consensus ForeignReleaseId [{0}]", releaseIds[0]);
|
_logger.Debug("Selecting release from consensus ForeignReleaseId [{0}]", releaseIds[0]);
|
||||||
tagMbidRelease = _releaseService.GetReleaseByForeignReleaseId(releaseIds[0]);
|
tagMbidRelease = _releaseService.GetReleaseByForeignReleaseId(releaseIds[0], true);
|
||||||
|
|
||||||
if (tagMbidRelease != null)
|
if (tagMbidRelease != null)
|
||||||
{
|
{
|
||||||
tagCandidate = GetCandidatesByRelease(new List<AlbumRelease> { tagMbidRelease }, includeExisting);
|
tagCandidate = GetCandidatesByRelease(new List<AlbumRelease> { tagMbidRelease }, includeExisting);
|
||||||
|
@ -555,7 +556,8 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Identification
|
||||||
var recordingId = localTrack.FileTrackInfo.RecordingMBId;
|
var recordingId = localTrack.FileTrackInfo.RecordingMBId;
|
||||||
if (recordingId.IsNotNullOrWhiteSpace())
|
if (recordingId.IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
dist.AddBool("recording_id", localTrack.FileTrackInfo.RecordingMBId != mbTrack.ForeignRecordingId);
|
dist.AddBool("recording_id", localTrack.FileTrackInfo.RecordingMBId != mbTrack.ForeignRecordingId &&
|
||||||
|
!mbTrack.OldForeignRecordingIds.Contains(localTrack.FileTrackInfo.RecordingMBId));
|
||||||
}
|
}
|
||||||
|
|
||||||
// for fingerprinted files
|
// for fingerprinted files
|
||||||
|
@ -657,8 +659,8 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Identification
|
||||||
var mbAlbumId = MostCommon(localTracks.Select(x => x.FileTrackInfo.ReleaseMBId));
|
var mbAlbumId = MostCommon(localTracks.Select(x => x.FileTrackInfo.ReleaseMBId));
|
||||||
if (mbAlbumId.IsNotNullOrWhiteSpace())
|
if (mbAlbumId.IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
dist.AddEquality("album_id", mbAlbumId, new List<string> { release.ForeignReleaseId });
|
dist.AddBool("album_id", mbAlbumId != release.ForeignReleaseId && !release.OldForeignReleaseIds.Contains(mbAlbumId));
|
||||||
_logger.Trace("album_id: {0} vs {1}; {2}", mbAlbumId, release.ForeignReleaseId, dist.NormalizedDistance());
|
_logger.Trace("album_id: {0} vs {1} or {2}; {3}", mbAlbumId, release.ForeignReleaseId, string.Join(", ", release.OldForeignReleaseIds), dist.NormalizedDistance());
|
||||||
}
|
}
|
||||||
|
|
||||||
// tracks
|
// tracks
|
||||||
|
|
|
@ -9,9 +9,11 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||||
public List<ArtistResource> Artists { get; set; }
|
public List<ArtistResource> Artists { get; set; }
|
||||||
public string Disambiguation { get; set; }
|
public string Disambiguation { get; set; }
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
public List<string> OldIds { get; set; }
|
||||||
public List<ImageResource> Images { get; set; }
|
public List<ImageResource> Images { get; set; }
|
||||||
public List<LinkResource> Links { get; set; }
|
public List<LinkResource> Links { get; set; }
|
||||||
|
public List<string> Genres { get; set; }
|
||||||
public RatingResource Rating { get; set; }
|
public RatingResource Rating { get; set; }
|
||||||
public DateTime? ReleaseDate { get; set; }
|
public DateTime? ReleaseDate { get; set; }
|
||||||
public List<ReleaseResource> Releases { get; set; }
|
public List<ReleaseResource> Releases { get; set; }
|
||||||
|
|
|
@ -17,9 +17,11 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||||
public string Type { get; set; }
|
public string Type { get; set; }
|
||||||
public string Disambiguation { get; set; }
|
public string Disambiguation { get; set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
public List<string> OldIds { get; set; }
|
||||||
public List<ImageResource> Images { get; set; }
|
public List<ImageResource> Images { get; set; }
|
||||||
public List<LinkResource> Links { get; set; }
|
public List<LinkResource> Links { get; set; }
|
||||||
public string ArtistName { get; set; }
|
public string ArtistName { get; set; }
|
||||||
|
public List<string> ArtistAliases { get; set; }
|
||||||
public List<AlbumResource> Albums { get; set; }
|
public List<AlbumResource> Albums { get; set; }
|
||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
public RatingResource Rating { get; set; }
|
public RatingResource Rating { get; set; }
|
||||||
|
|
|
@ -9,6 +9,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||||
public List<string> Country { get; set; }
|
public List<string> Country { get; set; }
|
||||||
public DateTime? ReleaseDate { get; set; }
|
public DateTime? ReleaseDate { get; set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
public List<string> OldIds { get; set; }
|
||||||
public List<string> Label { get; set; }
|
public List<string> Label { get; set; }
|
||||||
public List<MediumResource> Media { get; set; }
|
public List<MediumResource> Media { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||||
{
|
{
|
||||||
public class TrackResource
|
public class TrackResource
|
||||||
|
@ -10,7 +12,9 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
||||||
public string ArtistId { get; set; }
|
public string ArtistId { get; set; }
|
||||||
public int DurationMs { get; set; }
|
public int DurationMs { get; set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
public List<string> OldIds { get; set; }
|
||||||
public string RecordingId { get; set; }
|
public string RecordingId { get; set; }
|
||||||
|
public List<string> OldRecordingIds { get; set; }
|
||||||
public string TrackName { get; set; }
|
public string TrackName { get; set; }
|
||||||
public string TrackNumber { get; set; }
|
public string TrackNumber { get; set; }
|
||||||
public int TrackPosition { get; set; }
|
public int TrackPosition { get; set; }
|
||||||
|
|
|
@ -301,6 +301,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||||
{
|
{
|
||||||
Album album = new Album();
|
Album album = new Album();
|
||||||
album.ForeignAlbumId = resource.Id;
|
album.ForeignAlbumId = resource.Id;
|
||||||
|
album.OldForeignAlbumIds = resource.OldIds;
|
||||||
album.Title = resource.Title;
|
album.Title = resource.Title;
|
||||||
album.Overview = resource.Overview;
|
album.Overview = resource.Overview;
|
||||||
album.Disambiguation = resource.Disambiguation;
|
album.Disambiguation = resource.Disambiguation;
|
||||||
|
@ -315,6 +316,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||||
album.SecondaryTypes = resource.SecondaryTypes.Select(MapSecondaryTypes).ToList();
|
album.SecondaryTypes = resource.SecondaryTypes.Select(MapSecondaryTypes).ToList();
|
||||||
album.Ratings = MapRatings(resource.Rating);
|
album.Ratings = MapRatings(resource.Rating);
|
||||||
album.Links = resource.Links?.Select(MapLink).ToList();
|
album.Links = resource.Links?.Select(MapLink).ToList();
|
||||||
|
album.Genres = resource.Genres;
|
||||||
album.CleanTitle = Parser.Parser.CleanArtistName(album.Title);
|
album.CleanTitle = Parser.Parser.CleanArtistName(album.Title);
|
||||||
|
|
||||||
if (resource.Releases != null)
|
if (resource.Releases != null)
|
||||||
|
@ -331,6 +333,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||||
{
|
{
|
||||||
AlbumRelease release = new AlbumRelease();
|
AlbumRelease release = new AlbumRelease();
|
||||||
release.ForeignReleaseId = resource.Id;
|
release.ForeignReleaseId = resource.Id;
|
||||||
|
release.OldForeignReleaseIds = resource.OldIds;
|
||||||
release.Title = resource.Title;
|
release.Title = resource.Title;
|
||||||
release.Status = resource.Status;
|
release.Status = resource.Status;
|
||||||
release.Label = resource.Label;
|
release.Label = resource.Label;
|
||||||
|
@ -384,7 +387,9 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||||
ArtistMetadata = artistDict[resource.ArtistId],
|
ArtistMetadata = artistDict[resource.ArtistId],
|
||||||
Title = resource.TrackName,
|
Title = resource.TrackName,
|
||||||
ForeignTrackId = resource.Id,
|
ForeignTrackId = resource.Id,
|
||||||
|
OldForeignTrackIds = resource.OldIds,
|
||||||
ForeignRecordingId = resource.RecordingId,
|
ForeignRecordingId = resource.RecordingId,
|
||||||
|
OldForeignRecordingIds = resource.OldRecordingIds,
|
||||||
TrackNumber = resource.TrackNumber,
|
TrackNumber = resource.TrackNumber,
|
||||||
AbsoluteTrackNumber = resource.TrackPosition,
|
AbsoluteTrackNumber = resource.TrackPosition,
|
||||||
Duration = resource.DurationMs,
|
Duration = resource.DurationMs,
|
||||||
|
@ -400,7 +405,9 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
||||||
ArtistMetadata artist = new ArtistMetadata();
|
ArtistMetadata artist = new ArtistMetadata();
|
||||||
|
|
||||||
artist.Name = resource.ArtistName;
|
artist.Name = resource.ArtistName;
|
||||||
|
artist.Aliases = resource.ArtistAliases;
|
||||||
artist.ForeignArtistId = resource.Id;
|
artist.ForeignArtistId = resource.Id;
|
||||||
|
artist.OldForeignArtistIds = resource.OldIds;
|
||||||
artist.Genres = resource.Genres;
|
artist.Genres = resource.Genres;
|
||||||
artist.Overview = resource.Overview;
|
artist.Overview = resource.Overview;
|
||||||
artist.Disambiguation = resource.Disambiguation;
|
artist.Disambiguation = resource.Disambiguation;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Core.Datastore;
|
using NzbDrone.Core.Datastore;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Marr.Data;
|
using Marr.Data;
|
||||||
|
|
||||||
|
@ -16,6 +15,7 @@ namespace NzbDrone.Core.Music
|
||||||
Links = new List<Links>();
|
Links = new List<Links>();
|
||||||
Ratings = new Ratings();
|
Ratings = new Ratings();
|
||||||
Artist = new Artist();
|
Artist = new Artist();
|
||||||
|
OldForeignAlbumIds = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public const string RELEASE_DATE_FORMAT = "yyyy-MM-dd";
|
public const string RELEASE_DATE_FORMAT = "yyyy-MM-dd";
|
||||||
|
@ -24,6 +24,7 @@ namespace NzbDrone.Core.Music
|
||||||
// These are metadata entries
|
// These are metadata entries
|
||||||
public int ArtistMetadataId { get; set; }
|
public int ArtistMetadataId { get; set; }
|
||||||
public string ForeignAlbumId { get; set; }
|
public string ForeignAlbumId { get; set; }
|
||||||
|
public List<string> OldForeignAlbumIds { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
public string Disambiguation { get; set; }
|
public string Disambiguation { get; set; }
|
||||||
|
|
|
@ -15,10 +15,14 @@ namespace NzbDrone.Core.Music
|
||||||
Genres = new List<string>();
|
Genres = new List<string>();
|
||||||
Members = new List<Member>();
|
Members = new List<Member>();
|
||||||
Links = new List<Links>();
|
Links = new List<Links>();
|
||||||
|
OldForeignArtistIds = new List<string>();
|
||||||
|
Aliases = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ForeignArtistId { get; set; }
|
public string ForeignArtistId { get; set; }
|
||||||
|
public List<string> OldForeignArtistIds { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
public List<string> Aliases { get; set; }
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
public string Disambiguation { get; set; }
|
public string Disambiguation { get; set; }
|
||||||
public string Type { get; set; }
|
public string Type { get; set; }
|
||||||
|
@ -37,7 +41,9 @@ namespace NzbDrone.Core.Music
|
||||||
public void ApplyChanges(ArtistMetadata otherArtist)
|
public void ApplyChanges(ArtistMetadata otherArtist)
|
||||||
{
|
{
|
||||||
ForeignArtistId = otherArtist.ForeignArtistId;
|
ForeignArtistId = otherArtist.ForeignArtistId;
|
||||||
|
OldForeignArtistIds = otherArtist.OldForeignArtistIds;
|
||||||
Name = otherArtist.Name;
|
Name = otherArtist.Name;
|
||||||
|
Aliases = otherArtist.Aliases;
|
||||||
Overview = otherArtist.Overview.IsNullOrWhiteSpace() ? Overview : otherArtist.Overview;
|
Overview = otherArtist.Overview.IsNullOrWhiteSpace() ? Overview : otherArtist.Overview;
|
||||||
Disambiguation = otherArtist.Disambiguation;
|
Disambiguation = otherArtist.Disambiguation;
|
||||||
Type = otherArtist.Type;
|
Type = otherArtist.Type;
|
||||||
|
@ -58,7 +64,9 @@ namespace NzbDrone.Core.Music
|
||||||
|
|
||||||
if (Id == other.Id &&
|
if (Id == other.Id &&
|
||||||
ForeignArtistId == other.ForeignArtistId &&
|
ForeignArtistId == other.ForeignArtistId &&
|
||||||
|
(OldForeignArtistIds?.SequenceEqual(other.OldForeignArtistIds) ?? true) &&
|
||||||
Name == other.Name &&
|
Name == other.Name &&
|
||||||
|
(Aliases?.SequenceEqual(other.Aliases) ?? true) &&
|
||||||
Overview == other.Overview &&
|
Overview == other.Overview &&
|
||||||
Disambiguation == other.Disambiguation &&
|
Disambiguation == other.Disambiguation &&
|
||||||
Type == other.Type &&
|
Type == other.Type &&
|
||||||
|
@ -100,7 +108,9 @@ namespace NzbDrone.Core.Music
|
||||||
int hash = 17;
|
int hash = 17;
|
||||||
hash = hash * 23 + Id;
|
hash = hash * 23 + Id;
|
||||||
hash = hash * 23 + ForeignArtistId.GetHashCode();
|
hash = hash * 23 + ForeignArtistId.GetHashCode();
|
||||||
|
hash = hash * 23 + OldForeignArtistIds.GetHashCode();
|
||||||
hash = hash * 23 + Name?.GetHashCode() ?? 0;
|
hash = hash * 23 + Name?.GetHashCode() ?? 0;
|
||||||
|
hash = hash * 23 + Aliases?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + Overview?.GetHashCode() ?? 0;
|
hash = hash * 23 + Overview?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + Disambiguation?.GetHashCode() ?? 0;
|
hash = hash * 23 + Disambiguation?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + Type?.GetHashCode() ?? 0;
|
hash = hash * 23 + Type?.GetHashCode() ?? 0;
|
||||||
|
|
|
@ -143,6 +143,7 @@ namespace NzbDrone.Core.Music
|
||||||
forceUpdateFileTags |= album.Title != (albumInfo.Title ?? "Unknown");
|
forceUpdateFileTags |= album.Title != (albumInfo.Title ?? "Unknown");
|
||||||
updated |= forceUpdateFileTags;
|
updated |= forceUpdateFileTags;
|
||||||
|
|
||||||
|
album.OldForeignAlbumIds = albumInfo.OldForeignAlbumIds;
|
||||||
album.LastInfoSync = DateTime.UtcNow;
|
album.LastInfoSync = DateTime.UtcNow;
|
||||||
album.CleanTitle = albumInfo.CleanTitle;
|
album.CleanTitle = albumInfo.CleanTitle;
|
||||||
album.Title = albumInfo.Title ?? "Unknown";
|
album.Title = albumInfo.Title ?? "Unknown";
|
||||||
|
|
|
@ -10,9 +10,15 @@ namespace NzbDrone.Core.Music
|
||||||
{
|
{
|
||||||
public class AlbumRelease : ModelBase, IEquatable<AlbumRelease>
|
public class AlbumRelease : ModelBase, IEquatable<AlbumRelease>
|
||||||
{
|
{
|
||||||
|
public AlbumRelease()
|
||||||
|
{
|
||||||
|
OldForeignReleaseIds = new List<string>();
|
||||||
|
}
|
||||||
|
|
||||||
// These correspond to columns in the AlbumReleases table
|
// These correspond to columns in the AlbumReleases table
|
||||||
public int AlbumId { get; set; }
|
public int AlbumId { get; set; }
|
||||||
public string ForeignReleaseId { get; set; }
|
public string ForeignReleaseId { get; set; }
|
||||||
|
public List<string> OldForeignReleaseIds { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
public int Duration { get; set; }
|
public int Duration { get; set; }
|
||||||
|
@ -43,6 +49,7 @@ namespace NzbDrone.Core.Music
|
||||||
if (Id == other.Id &&
|
if (Id == other.Id &&
|
||||||
AlbumId == other.AlbumId &&
|
AlbumId == other.AlbumId &&
|
||||||
ForeignReleaseId == other.ForeignReleaseId &&
|
ForeignReleaseId == other.ForeignReleaseId &&
|
||||||
|
(OldForeignReleaseIds?.SequenceEqual(other.OldForeignReleaseIds) ?? true) &&
|
||||||
Title == other.Title &&
|
Title == other.Title &&
|
||||||
Status == other.Status &&
|
Status == other.Status &&
|
||||||
Duration == other.Duration &&
|
Duration == other.Duration &&
|
||||||
|
@ -86,6 +93,7 @@ namespace NzbDrone.Core.Music
|
||||||
hash = hash * 23 + Id;
|
hash = hash * 23 + Id;
|
||||||
hash = hash * 23 + AlbumId;
|
hash = hash * 23 + AlbumId;
|
||||||
hash = hash * 23 + ForeignReleaseId.GetHashCode();
|
hash = hash * 23 + ForeignReleaseId.GetHashCode();
|
||||||
|
hash = hash * 23 + OldForeignReleaseIds?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + Title?.GetHashCode() ?? 0;
|
hash = hash * 23 + Title?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + Status?.GetHashCode() ?? 0;
|
hash = hash * 23 + Status?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + Duration;
|
hash = hash * 23 + Duration;
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace NzbDrone.Core.Music
|
||||||
{
|
{
|
||||||
public interface IReleaseRepository : IBasicRepository<AlbumRelease>
|
public interface IReleaseRepository : IBasicRepository<AlbumRelease>
|
||||||
{
|
{
|
||||||
AlbumRelease FindByForeignReleaseId(string foreignReleaseId);
|
AlbumRelease FindByForeignReleaseId(string foreignReleaseId, bool checkRedirect = false);
|
||||||
List<AlbumRelease> FindByAlbum(int id);
|
List<AlbumRelease> FindByAlbum(int id);
|
||||||
List<AlbumRelease> FindByRecordingId(List<string> recordingIds);
|
List<AlbumRelease> FindByRecordingId(List<string> recordingIds);
|
||||||
List<AlbumRelease> GetReleasesForRefresh(int albumId, IEnumerable<string> foreignReleaseIds);
|
List<AlbumRelease> GetReleasesForRefresh(int albumId, IEnumerable<string> foreignReleaseIds);
|
||||||
|
@ -23,11 +23,19 @@ namespace NzbDrone.Core.Music
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlbumRelease FindByForeignReleaseId(string foreignReleaseId)
|
public AlbumRelease FindByForeignReleaseId(string foreignReleaseId, bool checkRedirect = false)
|
||||||
{
|
{
|
||||||
return Query
|
var release = Query
|
||||||
.Where(x => x.ForeignReleaseId == foreignReleaseId)
|
.Where(x => x.ForeignReleaseId == foreignReleaseId)
|
||||||
.SingleOrDefault();
|
.SingleOrDefault();
|
||||||
|
|
||||||
|
if (release == null && checkRedirect)
|
||||||
|
{
|
||||||
|
release = Query.Where(x => x.OldForeignReleaseIds.Contains(foreignReleaseId))
|
||||||
|
.SingleOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return release;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<AlbumRelease> GetReleasesForRefresh(int albumId, IEnumerable<string> foreignReleaseIds)
|
public List<AlbumRelease> GetReleasesForRefresh(int albumId, IEnumerable<string> foreignReleaseIds)
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace NzbDrone.Core.Music
|
||||||
public interface IReleaseService
|
public interface IReleaseService
|
||||||
{
|
{
|
||||||
AlbumRelease GetRelease(int id);
|
AlbumRelease GetRelease(int id);
|
||||||
AlbumRelease GetReleaseByForeignReleaseId(string foreignReleaseId);
|
AlbumRelease GetReleaseByForeignReleaseId(string foreignReleaseId, bool checkRedirect = false);
|
||||||
void InsertMany(List<AlbumRelease> releases);
|
void InsertMany(List<AlbumRelease> releases);
|
||||||
void UpdateMany(List<AlbumRelease> releases);
|
void UpdateMany(List<AlbumRelease> releases);
|
||||||
void DeleteMany(List<AlbumRelease> releases);
|
void DeleteMany(List<AlbumRelease> releases);
|
||||||
|
@ -35,9 +35,9 @@ namespace NzbDrone.Core.Music
|
||||||
return _releaseRepository.Get(id);
|
return _releaseRepository.Get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlbumRelease GetReleaseByForeignReleaseId(string foreignReleaseId)
|
public AlbumRelease GetReleaseByForeignReleaseId(string foreignReleaseId, bool checkRedirect = false)
|
||||||
{
|
{
|
||||||
return _releaseRepository.FindByForeignReleaseId(foreignReleaseId);
|
return _releaseRepository.FindByForeignReleaseId(foreignReleaseId, checkRedirect);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InsertMany(List<AlbumRelease> releases)
|
public void InsertMany(List<AlbumRelease> releases)
|
||||||
|
|
|
@ -4,6 +4,8 @@ using Marr.Data;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using System;
|
using System;
|
||||||
using NzbDrone.Common.Serializer;
|
using NzbDrone.Common.Serializer;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Music
|
namespace NzbDrone.Core.Music
|
||||||
{
|
{
|
||||||
|
@ -11,11 +13,15 @@ namespace NzbDrone.Core.Music
|
||||||
{
|
{
|
||||||
public Track()
|
public Track()
|
||||||
{
|
{
|
||||||
|
OldForeignTrackIds = new List<string>();
|
||||||
|
OldForeignRecordingIds = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// These are model fields
|
// These are model fields
|
||||||
public string ForeignTrackId { get; set; }
|
public string ForeignTrackId { get; set; }
|
||||||
|
public List<string> OldForeignTrackIds { get; set; }
|
||||||
public string ForeignRecordingId { get; set; }
|
public string ForeignRecordingId { get; set; }
|
||||||
|
public List<string> OldForeignRecordingIds { get; set; }
|
||||||
public int AlbumReleaseId { get; set; }
|
public int AlbumReleaseId { get; set; }
|
||||||
public int ArtistMetadataId { get; set; }
|
public int ArtistMetadataId { get; set; }
|
||||||
public string TrackNumber { get; set; }
|
public string TrackNumber { get; set; }
|
||||||
|
@ -53,7 +59,9 @@ namespace NzbDrone.Core.Music
|
||||||
|
|
||||||
if (Id == other.Id &&
|
if (Id == other.Id &&
|
||||||
ForeignTrackId == other.ForeignTrackId &&
|
ForeignTrackId == other.ForeignTrackId &&
|
||||||
|
(OldForeignTrackIds?.SequenceEqual(other.OldForeignTrackIds) ?? true) &&
|
||||||
ForeignRecordingId == other.ForeignRecordingId &&
|
ForeignRecordingId == other.ForeignRecordingId &&
|
||||||
|
(OldForeignRecordingIds?.SequenceEqual(other.OldForeignRecordingIds) ?? true) &&
|
||||||
AlbumReleaseId == other.AlbumReleaseId &&
|
AlbumReleaseId == other.AlbumReleaseId &&
|
||||||
ArtistMetadataId == other.ArtistMetadataId &&
|
ArtistMetadataId == other.ArtistMetadataId &&
|
||||||
TrackNumber == other.TrackNumber &&
|
TrackNumber == other.TrackNumber &&
|
||||||
|
@ -96,7 +104,9 @@ namespace NzbDrone.Core.Music
|
||||||
int hash = 17;
|
int hash = 17;
|
||||||
hash = hash * 23 + Id;
|
hash = hash * 23 + Id;
|
||||||
hash = hash * 23 + ForeignTrackId.GetHashCode();
|
hash = hash * 23 + ForeignTrackId.GetHashCode();
|
||||||
|
hash = hash * 23 + OldForeignTrackIds?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + ForeignRecordingId.GetHashCode();
|
hash = hash * 23 + ForeignRecordingId.GetHashCode();
|
||||||
|
hash = hash * 23 + OldForeignRecordingIds?.GetHashCode() ?? 0;
|
||||||
hash = hash * 23 + AlbumReleaseId;
|
hash = hash * 23 + AlbumReleaseId;
|
||||||
hash = hash * 23 + ArtistMetadataId;
|
hash = hash * 23 + ArtistMetadataId;
|
||||||
hash = hash * 23 + TrackNumber?.GetHashCode() ?? 0;
|
hash = hash * 23 + TrackNumber?.GetHashCode() ?? 0;
|
||||||
|
|
|
@ -172,6 +172,7 @@
|
||||||
<Compile Include="Datastore\Migration\028_clean_artistmetadata_table.cs" />
|
<Compile Include="Datastore\Migration\028_clean_artistmetadata_table.cs" />
|
||||||
<Compile Include="Datastore\Migration\030_add_mediafilerepository_mtime.cs" />
|
<Compile Include="Datastore\Migration\030_add_mediafilerepository_mtime.cs" />
|
||||||
<Compile Include="Datastore\Migration\031_add_artistmetadataid_constraint.cs" />
|
<Compile Include="Datastore\Migration\031_add_artistmetadataid_constraint.cs" />
|
||||||
|
<Compile Include="Datastore\Migration\032_old_ids_and_artist_alias.cs" />
|
||||||
<Compile Include="Datastore\Migration\Framework\MigrationContext.cs" />
|
<Compile Include="Datastore\Migration\Framework\MigrationContext.cs" />
|
||||||
<Compile Include="Datastore\Migration\Framework\MigrationController.cs" />
|
<Compile Include="Datastore\Migration\Framework\MigrationController.cs" />
|
||||||
<Compile Include="Datastore\Migration\Framework\MigrationDbFactory.cs" />
|
<Compile Include="Datastore\Migration\Framework\MigrationDbFactory.cs" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue