@@ -68,7 +68,7 @@ public static class SimilarItemsHelper
68
68
/// <param name="includeInSearch">The include in search.</param>
69
69
/// <param name="getSimilarityScore">The get similarity score.</param>
70
70
/// <returns>ItemsResult.</returns>
71
- internal static ItemsResult GetSimilarItemsResult ( DtoOptions dtoOptions , IUserManager userManager , IItemRepository itemRepository , ILibraryManager libraryManager , IUserDataManager userDataRepository , IDtoService dtoService , ILogger logger , BaseGetSimilarItemsFromItem request , Func < BaseItem , bool > includeInSearch , Func < BaseItem , BaseItem , ILibraryManager , int > getSimilarityScore )
71
+ internal static ItemsResult GetSimilarItemsResult ( DtoOptions dtoOptions , IUserManager userManager , IItemRepository itemRepository , ILibraryManager libraryManager , IUserDataManager userDataRepository , IDtoService dtoService , ILogger logger , BaseGetSimilarItemsFromItem request , Func < BaseItem , bool > includeInSearch , Func < BaseItem , List < PersonInfo > , List < PersonInfo > , BaseItem , int > getSimilarityScore )
72
72
{
73
73
var user = ! string . IsNullOrWhiteSpace ( request . UserId ) ? userManager . GetUserById ( request . UserId ) : null ;
74
74
@@ -110,12 +110,17 @@ internal static ItemsResult GetSimilarItemsResult(DtoOptions dtoOptions, IUserMa
110
110
/// <param name="inputItems">The input items.</param>
111
111
/// <param name="getSimilarityScore">The get similarity score.</param>
112
112
/// <returns>IEnumerable{BaseItem}.</returns>
113
- internal static IEnumerable < BaseItem > GetSimilaritems ( BaseItem item , ILibraryManager libraryManager , IEnumerable < BaseItem > inputItems , Func < BaseItem , BaseItem , ILibraryManager , int > getSimilarityScore )
113
+ internal static IEnumerable < BaseItem > GetSimilaritems ( BaseItem item , ILibraryManager libraryManager , IEnumerable < BaseItem > inputItems , Func < BaseItem , List < PersonInfo > , List < PersonInfo > , BaseItem , int > getSimilarityScore )
114
114
{
115
115
var itemId = item . Id ;
116
116
inputItems = inputItems . Where ( i => i . Id != itemId ) ;
117
+ var itemPeople = libraryManager . GetPeople ( item ) ;
118
+ var allPeople = libraryManager . GetPeople ( new InternalPeopleQuery
119
+ {
120
+ AppearsInItemId = item . Id
121
+ } ) ;
117
122
118
- return inputItems . Select ( i => new Tuple < BaseItem , int > ( i , getSimilarityScore ( item , i , libraryManager ) ) )
123
+ return inputItems . Select ( i => new Tuple < BaseItem , int > ( i , getSimilarityScore ( item , itemPeople , allPeople , i ) ) )
119
124
. Where ( i => i . Item2 > 2 )
120
125
. OrderByDescending ( i => i . Item2 )
121
126
. Select ( i => i . Item1 ) ;
@@ -147,9 +152,11 @@ private static IEnumerable<string> GetKeywords(BaseItem item)
147
152
/// Gets the similiarity score.
148
153
/// </summary>
149
154
/// <param name="item1">The item1.</param>
155
+ /// <param name="item1People">The item1 people.</param>
156
+ /// <param name="allPeople">All people.</param>
150
157
/// <param name="item2">The item2.</param>
151
158
/// <returns>System.Int32.</returns>
152
- internal static int GetSimiliarityScore ( BaseItem item1 , BaseItem item2 , ILibraryManager libraryManager )
159
+ internal static int GetSimiliarityScore ( BaseItem item1 , List < PersonInfo > item1People , List < PersonInfo > allPeople , BaseItem item2 )
153
160
{
154
161
var points = 0 ;
155
162
@@ -170,11 +177,13 @@ internal static int GetSimiliarityScore(BaseItem item1, BaseItem item2, ILibrary
170
177
// Find common studios
171
178
points += item1 . Studios . Where ( i => item2 . Studios . Contains ( i , StringComparer . OrdinalIgnoreCase ) ) . Sum ( i => 3 ) ;
172
179
173
- var item2PeopleNames = libraryManager . GetPeople ( item2 ) . Select ( i => i . Name )
180
+ var item2PeopleNames = allPeople . Where ( i => i . ItemId == item2 . Id )
181
+ . Select ( i => i . Name )
182
+ . Where ( i => ! string . IsNullOrWhiteSpace ( i ) )
174
183
. DistinctNames ( )
175
184
. ToDictionary ( i => i , StringComparer . OrdinalIgnoreCase ) ;
176
185
177
- points += libraryManager . GetPeople ( item1 ) . Where ( i => item2PeopleNames . ContainsKey ( i . Name ) ) . Sum ( i =>
186
+ points += item1People . Where ( i => item2PeopleNames . ContainsKey ( i . Name ) ) . Sum ( i =>
178
187
{
179
188
if ( string . Equals ( i . Type , PersonType . Director , StringComparison . OrdinalIgnoreCase ) || string . Equals ( i . Role , PersonType . Director , StringComparison . OrdinalIgnoreCase ) )
180
189
{
0 commit comments