From 740a10a4e3f85ffcfd26ec18263d4c78d4b14ecc Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 10 Sep 2013 14:56:00 -0400 Subject: de-normalize item by name data. create counts during library scan for fast access. --- MediaBrowser.Controller/Entities/Audio/Artist.cs | 16 ++++++- MediaBrowser.Controller/Entities/Audio/Audio.cs | 2 +- .../Entities/Audio/IHasAlbumArtist.cs | 5 ++ .../Entities/Audio/IHasMusicGenres.cs | 9 ++++ .../Entities/Audio/MusicAlbum.cs | 30 ++++++------ .../Entities/Audio/MusicGenre.cs | 15 +++++- MediaBrowser.Controller/Entities/BaseItem.cs | 53 ++++++++++++++++++++++ MediaBrowser.Controller/Entities/GameGenre.cs | 15 +++++- MediaBrowser.Controller/Entities/Genre.cs | 15 +++++- MediaBrowser.Controller/Entities/IItemByName.cs | 8 +++- MediaBrowser.Controller/Entities/MusicVideo.cs | 5 +- MediaBrowser.Controller/Entities/Person.cs | 15 +++++- MediaBrowser.Controller/Entities/Studio.cs | 15 +++++- MediaBrowser.Controller/Entities/Video.cs | 5 ++ MediaBrowser.Controller/Entities/Year.cs | 15 +++++- MediaBrowser.Controller/Library/ILibraryManager.cs | 32 +++++++++++++ .../MediaBrowser.Controller.csproj | 2 + .../Providers/IDynamicInfoProvider.cs | 10 ++++ 18 files changed, 240 insertions(+), 27 deletions(-) create mode 100644 MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs create mode 100644 MediaBrowser.Controller/Providers/IDynamicInfoProvider.cs (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/Audio/Artist.cs b/MediaBrowser.Controller/Entities/Audio/Artist.cs index 274356b30..3d2d41fb7 100644 --- a/MediaBrowser.Controller/Entities/Audio/Artist.cs +++ b/MediaBrowser.Controller/Entities/Audio/Artist.cs @@ -1,11 +1,20 @@ - +using MediaBrowser.Model.Dto; +using System; +using System.Collections.Generic; + namespace MediaBrowser.Controller.Entities.Audio { /// /// Class Artist /// - public class Artist : BaseItem, IItemByName + public class Artist : BaseItem, IItemByName, IHasMusicGenres { + public Artist() + { + ItemCounts = new ItemByNameCounts(); + UserItemCounts = new Dictionary(); + } + public string LastFmImageUrl { get; set; } /// @@ -17,5 +26,8 @@ namespace MediaBrowser.Controller.Entities.Audio return "Artist-" + Name; } + public ItemByNameCounts ItemCounts { get; set; } + + public Dictionary UserItemCounts { get; set; } } } diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index ff632c981..beb25f1f2 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities.Audio /// /// Class Audio /// - public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist + public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres { public Audio() { diff --git a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs index d9dac077f..77bd3fd66 100644 --- a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs @@ -5,4 +5,9 @@ namespace MediaBrowser.Controller.Entities.Audio { string AlbumArtist { get; } } + + public interface IHasArtist + { + bool HasArtist(string name); + } } diff --git a/MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs b/MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs new file mode 100644 index 000000000..fdf939e35 --- /dev/null +++ b/MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Entities.Audio +{ + public interface IHasMusicGenres + { + List Genres { get; } + } +} diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index 834fc6943..46b4bc73c 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Runtime.Serialization; namespace MediaBrowser.Controller.Entities.Audio @@ -6,10 +7,15 @@ namespace MediaBrowser.Controller.Entities.Audio /// /// Class MusicAlbum /// - public class MusicAlbum : Folder, IHasAlbumArtist + public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres { + public MusicAlbum() + { + Artists = new string[] { }; + } + public string LastFmImageUrl { get; set; } - + /// /// Songs will group into us so don't also include us in the index /// @@ -60,23 +66,17 @@ namespace MediaBrowser.Controller.Entities.Audio /// true if the specified artist has artist; otherwise, false. public bool HasArtist(string artist) { - return RecursiveChildren.OfType