Parcourir la source

Add support for query negation

Matt Montgomery il y a 4 ans
Parent
commit
185476c08a
1 fichiers modifiés avec 21 ajouts et 6 suppressions
  1. 21 6
      Emby.Server.Implementations/Data/SqliteItemRepository.cs

+ 21 - 6
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -4517,19 +4517,19 @@ namespace Emby.Server.Implementations.Data
                 }
             }
 
-            if (query.HasImdbId.HasValue && query.HasImdbId.Value)
+            if (query.HasImdbId.HasValue)
             {
-                whereClauses.Add("ProviderIds like '%imdb=%'");
+                whereClauses.Add(GetProviderIdClause(query.HasImdbId.Value, "imdb"));
             }
 
-            if (query.HasTmdbId.HasValue && query.HasTmdbId.Value)
+            if (query.HasTmdbId.HasValue)
             {
-                whereClauses.Add("ProviderIds like '%tmdb=%'");
+                whereClauses.Add(GetProviderIdClause(query.HasTmdbId.Value, "tmdb"));
             }
 
-            if (query.HasTvdbId.HasValue && query.HasTvdbId.Value)
+            if (query.HasTvdbId.HasValue)
             {
-                whereClauses.Add("ProviderIds like '%tvdb=%'");
+                whereClauses.Add(GetProviderIdClause(query.HasTvdbId.Value, "tvdb"));
             }
 
             var includedItemByNameTypes = GetItemByNameTypesInQuery(query).SelectMany(MapIncludeItemTypes).ToList();
@@ -4769,6 +4769,21 @@ namespace Emby.Server.Implementations.Data
             return whereClauses;
         }
 
+        /// <summary>
+        /// Formats a where clause for the specified provider.
+        /// </summary>
+        /// <param name="includeResults">Whether or not to include items with this provider's ids.</param>
+        /// <param name="provider">Provider name.</param>
+        /// <returns>Formatted SQL clause.</returns>
+        private string GetProviderIdClause(bool includeResults, string provider)
+        {
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "ProviderIds {0} like '%{1}=%'",
+                includeResults ? string.Empty : "not",
+                provider);
+        }
+
         private List<string> GetItemByNameTypesInQuery(InternalItemsQuery query)
         {
             var list = new List<string>();