From 0291df3193f6fd23806a6ec1e87bf1aa7ed49c25 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 8 Jul 2015 12:10:34 -0400 Subject: 3.0.5666.2 --- .../Intros/DefaultIntroProvider.cs | 24 +++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs') diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs index f19668d5d..db9841f9d 100644 --- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs +++ b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs @@ -71,6 +71,12 @@ namespace MediaBrowser.Server.Implementations.Intros var candidates = new List(); + var itemPeople = _libraryManager.GetPeople(item); + var allPeople = _libraryManager.GetPeople(new InternalPeopleQuery + { + AppearsInItemId = item.Id + }); + if (config.EnableIntrosFromMoviesInLibrary) { var itemsWithTrailers = user.RootFolder @@ -94,6 +100,8 @@ namespace MediaBrowser.Server.Implementations.Intros Type = ItemWithTrailerType.ItemWithTrailer, User = user, WatchingItem = item, + WatchingItemPeople = itemPeople, + AllPeople = allPeople, Random = random, LibraryManager = _libraryManager })); @@ -135,6 +143,8 @@ namespace MediaBrowser.Server.Implementations.Intros Type = ItemWithTrailerType.ChannelTrailer, User = user, WatchingItem = item, + WatchingItemPeople = itemPeople, + AllPeople = allPeople, Random = random, LibraryManager = _libraryManager })); @@ -241,7 +251,7 @@ namespace MediaBrowser.Server.Implementations.Intros return true; } - internal static int GetSimiliarityScore(BaseItem item1, BaseItem item2, Random random, ILibraryManager libraryManager) + internal static int GetSimiliarityScore(BaseItem item1, List item1People, List allPeople, BaseItem item2, Random random, ILibraryManager libraryManager) { var points = 0; @@ -262,11 +272,13 @@ namespace MediaBrowser.Server.Implementations.Intros // Find common studios points += item1.Studios.Where(i => item2.Studios.Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 5); - var item2PeopleNames = libraryManager.GetPeople(item2).Select(i => i.Name) - .Distinct(StringComparer.OrdinalIgnoreCase) + var item2PeopleNames = allPeople.Where(i => i.ItemId == item2.Id) + .Select(i => i.Name) + .Where(i => !string.IsNullOrWhiteSpace(i)) + .DistinctNames() .ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - points += libraryManager.GetPeople(item1).Where(i => item2PeopleNames.ContainsKey(i.Name)).Sum(i => + points += item1People.Where(i => item2PeopleNames.ContainsKey(i.Name)).Sum(i => { if (string.Equals(i.Type, PersonType.Director, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Role, PersonType.Director, StringComparison.OrdinalIgnoreCase)) { @@ -341,6 +353,8 @@ namespace MediaBrowser.Server.Implementations.Intros internal ItemWithTrailerType Type; internal User User; internal BaseItem WatchingItem; + internal List WatchingItemPeople; + internal List AllPeople; internal Random Random; internal ILibraryManager LibraryManager; @@ -364,7 +378,7 @@ namespace MediaBrowser.Server.Implementations.Intros { if (!_score.HasValue) { - _score = GetSimiliarityScore(WatchingItem, Item, Random, LibraryManager); + _score = GetSimiliarityScore(WatchingItem, WatchingItemPeople, AllPeople, Item, Random, LibraryManager); } return _score.Value; } -- cgit v1.2.3