diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 9338a8706..096cdf880 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -1622,7 +1622,7 @@ namespace MediaBrowser.Server.Implementations.Persistence return false; } - if (query.SimilarTo != null) + if (query.SimilarTo != null && query.User != null) { return true; } @@ -1757,11 +1757,6 @@ namespace MediaBrowser.Server.Implementations.Persistence { var groups = new List<string>(); - if (!string.IsNullOrWhiteSpace(query.GroupByAncestorOfType)) - { - groups.Add("(Select PresentationUniqueKey from TypedBaseItems B where B.Type = 'MediaBrowser.Controller.Entities.TV.Series' And B.Guid in (Select AncestorId from AncestorIds where ItemId=A.Guid))"); - } - if (EnableGroupByPresentationUniqueKey(query)) { groups.Add("PresentationUniqueKey"); @@ -1793,6 +1788,12 @@ namespace MediaBrowser.Server.Implementations.Persistence var list = new List<BaseItem>(); + // Hack for right now since we currently don't support filtering out these duplicates within a query + if (query.Limit.HasValue && query.EnableGroupByMetadataKey) + { + query.Limit = query.Limit.Value + 4; + } + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, _retriveItemColumns, cmd)) + GetFromText(); @@ -1845,9 +1846,57 @@ namespace MediaBrowser.Server.Implementations.Persistence } } + // Hack for right now since we currently don't support filtering out these duplicates within a query + if (query.EnableGroupByMetadataKey) + { + var limit = query.Limit ?? int.MaxValue; + limit -= 4; + var newList = new List<BaseItem>(); + + foreach (var item in list) + { + AddItem(newList, item); + + if (newList.Count >= limit) + { + break; + } + } + + list = newList; + } + return list; } + private void AddItem(List<BaseItem> items, BaseItem newItem) + { + var providerIds = newItem.ProviderIds.ToList(); + + for (var i = 0; i < items.Count; i++) + { + var item = items[i]; + + foreach (var providerId in providerIds) + { + if (providerId.Key == MetadataProviders.TmdbCollection.ToString()) + { + continue; + } + if (item.GetProviderId(providerId.Key) == providerId.Value) + { + if (newItem.SourceType == SourceType.Library) + { + items[i] = newItem; + } + return; + } + } + } + + items.Add(newItem); + } + private void LogQueryTime(string methodName, IDbCommand cmd, DateTime startDate) { var elapsed = (DateTime.UtcNow - startDate).TotalMilliseconds; @@ -3869,7 +3918,7 @@ namespace MediaBrowser.Server.Implementations.Persistence return counts; } - var allTypes = typeString.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries) + var allTypes = typeString.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries) .ToLookup(i => i).ToList(); foreach (var type in allTypes) |
