From 556b34d0005dce04d6a798334fd37ba284cef3fd Mon Sep 17 00:00:00 2001 From: Thomas Gillen Date: Sat, 19 Sep 2015 22:25:19 +0100 Subject: Re-designed item identity providers --- MediaBrowser.Controller/Entities/BaseItem.cs | 6 +-- MediaBrowser.Controller/Entities/IHasMetadata.cs | 7 +-- .../MediaBrowser.Controller.csproj | 5 -- .../Providers/EpisodeIdentity.cs | 12 ----- MediaBrowser.Controller/Providers/EpisodeInfo.cs | 18 +------ .../Providers/IHasIdentities.cs | 14 ----- MediaBrowser.Controller/Providers/IItemIdentity.cs | 7 --- .../Providers/IItemIdentityConverter.cs | 2 +- .../Providers/IItemIdentityProvider.cs | 2 +- .../Providers/IProviderManager.cs | 12 ++--- .../Providers/ItemIdentifier.cs | 63 +++++----------------- .../Providers/ItemIdentities.cs | 15 ++---- .../Providers/SeasonIdentity.cs | 11 ---- MediaBrowser.Controller/Providers/SeasonInfo.cs | 18 +------ .../Providers/SeriesIdentity.cs | 9 ---- MediaBrowser.Controller/Providers/SeriesInfo.cs | 20 +------ 16 files changed, 30 insertions(+), 191 deletions(-) delete mode 100644 MediaBrowser.Controller/Providers/EpisodeIdentity.cs delete mode 100644 MediaBrowser.Controller/Providers/IHasIdentities.cs delete mode 100644 MediaBrowser.Controller/Providers/IItemIdentity.cs delete mode 100644 MediaBrowser.Controller/Providers/SeasonIdentity.cs delete mode 100644 MediaBrowser.Controller/Providers/SeriesIdentity.cs (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 25e742e7cc..d413bda9b1 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -38,7 +38,6 @@ namespace MediaBrowser.Controller.Entities ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); LockedFields = new List(); ImageInfos = new List(); - Identities = new List(); } /// @@ -336,10 +335,7 @@ namespace MediaBrowser.Controller.Entities public bool IsLocked { get; set; } public bool IsUnidentified { get; set; } - - [IgnoreDataMember] - public List Identities { get; set; } - + /// /// Gets or sets the locked fields. /// diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs index 158bcb6d19..9d54541f19 100644 --- a/MediaBrowser.Controller/Entities/IHasMetadata.cs +++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs @@ -49,12 +49,7 @@ namespace MediaBrowser.Controller.Entities /// /// true if this instance is unidentified; otherwise, false. bool IsUnidentified { get; set; } - - /// - /// Gets the item identities. - /// - List Identities { get; set; } - + /// /// Afters the metadata refresh. /// diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index ea6e98ea62..a3e00359f5 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -268,7 +268,6 @@ - @@ -282,14 +281,12 @@ - - @@ -314,9 +311,7 @@ - - diff --git a/MediaBrowser.Controller/Providers/EpisodeIdentity.cs b/MediaBrowser.Controller/Providers/EpisodeIdentity.cs deleted file mode 100644 index 53f469e955..0000000000 --- a/MediaBrowser.Controller/Providers/EpisodeIdentity.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace MediaBrowser.Controller.Providers -{ - public class EpisodeIdentity : IItemIdentity - { - public string Type { get; set; } - - public string SeriesId { get; set; } - public int? SeasonIndex { get; set; } - public int IndexNumber { get; set; } - public int? IndexNumberEnd { get; set; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/EpisodeInfo.cs b/MediaBrowser.Controller/Providers/EpisodeInfo.cs index 88a7cbab7f..28abd636a2 100644 --- a/MediaBrowser.Controller/Providers/EpisodeInfo.cs +++ b/MediaBrowser.Controller/Providers/EpisodeInfo.cs @@ -1,15 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers { - public class EpisodeInfo : ItemLookupInfo, IHasIdentities + public class EpisodeInfo : ItemLookupInfo { - private List _identities = new List(); - public Dictionary SeriesProviderIds { get; set; } public int? IndexNumberEnd { get; set; } @@ -19,16 +14,5 @@ namespace MediaBrowser.Controller.Providers { SeriesProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); } - - public IEnumerable Identities - { - get { return _identities; } - } - - public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) - { - var identifier = new ItemIdentifier(); - _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList(); - } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IHasIdentities.cs b/MediaBrowser.Controller/Providers/IHasIdentities.cs deleted file mode 100644 index 36f940dd31..0000000000 --- a/MediaBrowser.Controller/Providers/IHasIdentities.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.Providers -{ - public interface IHasIdentities - where TIdentity : IItemIdentity - { - IEnumerable Identities { get; } - - Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken); - } -} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IItemIdentity.cs b/MediaBrowser.Controller/Providers/IItemIdentity.cs deleted file mode 100644 index cab189c84f..0000000000 --- a/MediaBrowser.Controller/Providers/IItemIdentity.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MediaBrowser.Controller.Providers -{ - public interface IItemIdentity - { - string Type { get; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs b/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs index 30e96b9e51..bfdd1dbf3a 100644 --- a/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs +++ b/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs @@ -1,4 +1,4 @@ namespace MediaBrowser.Controller.Providers { - public interface IItemIdentityConverter : IHasOrder { } + public interface IItemIdentityConverter { } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs b/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs index 9d437c208b..6b403bb55f 100644 --- a/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs +++ b/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs @@ -1,4 +1,4 @@ namespace MediaBrowser.Controller.Providers { - public interface IItemIdentityProvider : IHasOrder { } + public interface IItemIdentityProvider { } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs index d6fc39c5f5..57e4ff3200 100644 --- a/MediaBrowser.Controller/Providers/IProviderManager.cs +++ b/MediaBrowser.Controller/Providers/IProviderManager.cs @@ -195,18 +195,16 @@ namespace MediaBrowser.Controller.Providers /// Gets the item identity providers. /// /// The type of the t lookup information. - /// The type of the t identity. /// IEnumerable<IItemIdentityProvider<TLookupInfo, TIdentity>>. - IEnumerable> GetItemIdentityProviders() - where TLookupInfo : ItemLookupInfo - where TIdentity : IItemIdentity; + IEnumerable> GetItemIdentityProviders() + where TLookupInfo : ItemLookupInfo; /// /// Gets the item identity converters. /// - /// The type of the t identity. + /// The type of the t lookup information. /// IEnumerable<IItemIdentityConverter<TIdentity>>. - IEnumerable> GetItemIdentityConverters() - where TIdentity : IItemIdentity; + IEnumerable> GetItemIdentityConverters() + where TLookupInfo : ItemLookupInfo; } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ItemIdentifier.cs b/MediaBrowser.Controller/Providers/ItemIdentifier.cs index 13e4f137f9..bbc6dd76cd 100644 --- a/MediaBrowser.Controller/Providers/ItemIdentifier.cs +++ b/MediaBrowser.Controller/Providers/ItemIdentifier.cs @@ -1,73 +1,36 @@ -using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers { - public class ItemIdentifier + public static class ItemIdentifier where TLookupInfo : ItemLookupInfo - where TIdentity : IItemIdentity { - public async Task> FindIdentities(TLookupInfo item, IProviderManager providerManager, CancellationToken cancellationToken) + public static async Task FindIdentities(TLookupInfo item, IProviderManager providerManager, CancellationToken cancellationToken) { - var providers = providerManager.GetItemIdentityProviders(); - var converters = providerManager.GetItemIdentityConverters(); - - var identities = new List(); - + var providers = providerManager.GetItemIdentityProviders(); + var converters = providerManager.GetItemIdentityConverters().ToList(); + foreach (var provider in providers) { - var result = new IdentityPair - { - Identity = await provider.FindIdentity(item), - Order = provider.Order - }; - - if (!Equals(result.Identity, default(TIdentity))) - { - identities.Add(result); - } + await provider.Identify(item); } - var convertersAvailable = new List>(converters); - bool changesMade; + bool changesMade = true; - do + while (changesMade) { changesMade = false; - for (int i = convertersAvailable.Count - 1; i >= 0; i--) + foreach (var converter in converters) { - var converter = convertersAvailable[i]; - var input = identities.FirstOrDefault(id => id.Identity.Type == converter.SourceType); - var existing = identities.Where(id => id.Identity.Type == converter.ResultType); - - if (input != null && !existing.Any(id => id.Order <= converter.Order)) + if (await converter.Convert(item)) { - var result = new IdentityPair - { - Identity = await converter.Convert(input.Identity).ConfigureAwait(false), - Order = converter.Order - }; - - if (!Equals(result.Identity, default(TIdentity))) - { - identities.Add(result); - convertersAvailable.RemoveAt(i); - changesMade = true; - } + changesMade = true; } } - } while (changesMade); - - return identities.OrderBy(id => id.Order).Select(id => id.Identity); - } - - private class IdentityPair - { - public TIdentity Identity; - public int Order; + } } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ItemIdentities.cs b/MediaBrowser.Controller/Providers/ItemIdentities.cs index 939fd3b8ff..48316d0f44 100644 --- a/MediaBrowser.Controller/Providers/ItemIdentities.cs +++ b/MediaBrowser.Controller/Providers/ItemIdentities.cs @@ -2,20 +2,15 @@ namespace MediaBrowser.Controller.Providers { - public interface IItemIdentityProvider : IItemIdentityProvider + public interface IItemIdentityProvider : IItemIdentityProvider where TLookupInfo : ItemLookupInfo - where TIdentity : IItemIdentity { - Task FindIdentity(TLookupInfo info); + Task Identify(TLookupInfo info); } - public interface IItemIdentityConverter : IItemIdentityConverter - where TIdentity : IItemIdentity + public interface IItemIdentityConverter : IItemIdentityConverter + where TLookupInfo : ItemLookupInfo { - Task Convert(TIdentity identity); - - string SourceType { get; } - - string ResultType { get; } + Task Convert(TLookupInfo info); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeasonIdentity.cs b/MediaBrowser.Controller/Providers/SeasonIdentity.cs deleted file mode 100644 index 1e6b9b65a3..0000000000 --- a/MediaBrowser.Controller/Providers/SeasonIdentity.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MediaBrowser.Controller.Providers -{ - public class SeasonIdentity : IItemIdentity - { - public string Type { get; set; } - - public string SeriesId { get; set; } - - public int SeasonIndex { get; set; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeasonInfo.cs b/MediaBrowser.Controller/Providers/SeasonInfo.cs index 17bcd3f772..2c785d7d71 100644 --- a/MediaBrowser.Controller/Providers/SeasonInfo.cs +++ b/MediaBrowser.Controller/Providers/SeasonInfo.cs @@ -1,15 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers { - public class SeasonInfo : ItemLookupInfo, IHasIdentities + public class SeasonInfo : ItemLookupInfo { - private List _identities = new List(); - public Dictionary SeriesProviderIds { get; set; } public int? AnimeSeriesIndex { get; set; } @@ -17,16 +12,5 @@ namespace MediaBrowser.Controller.Providers { SeriesProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); } - - public IEnumerable Identities - { - get { return _identities; } - } - - public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) - { - var identifier = new ItemIdentifier(); - _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList(); - } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeriesIdentity.cs b/MediaBrowser.Controller/Providers/SeriesIdentity.cs deleted file mode 100644 index 326d340275..0000000000 --- a/MediaBrowser.Controller/Providers/SeriesIdentity.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MediaBrowser.Controller.Providers -{ - public class SeriesIdentity : IItemIdentity - { - public string Type { get; set; } - - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeriesInfo.cs b/MediaBrowser.Controller/Providers/SeriesInfo.cs index fc1119cd25..387865de23 100644 --- a/MediaBrowser.Controller/Providers/SeriesInfo.cs +++ b/MediaBrowser.Controller/Providers/SeriesInfo.cs @@ -1,25 +1,7 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.Providers { - public class SeriesInfo : ItemLookupInfo, IHasIdentities + public class SeriesInfo : ItemLookupInfo { - private List _identities = new List(); - public int? AnimeSeriesIndex { get; set; } - - public IEnumerable Identities - { - get { return _identities; } - } - - public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) - { - var identifier = new ItemIdentifier(); - _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList(); - } } } \ No newline at end of file -- cgit v1.2.3