Jelajahi Sumber

update db querying

Luke Pulverenti 9 tahun lalu
induk
melakukan
23fe6dc4be

+ 12 - 51
MediaBrowser.Api/Reports/ReportsService.cs

@@ -350,6 +350,18 @@ namespace MediaBrowser.Api.Reports
                 query.MaxParentalRating = _localization.GetRatingLevel(request.MinOfficialRating);
             }
 
+            // Artists
+            if (!string.IsNullOrEmpty(request.Artists))
+            {
+                query.ArtistNames = request.Artists.Split('|');
+            }
+
+            // Albums
+            if (!string.IsNullOrEmpty(request.Albums))
+            {
+                query.AlbumNames = request.Albums.Split('|');
+            }
+
             if (request.HasQueryLimit == false)
             {
                 query.StartIndex = null;
@@ -378,57 +390,6 @@ namespace MediaBrowser.Api.Reports
                 }
             }
 
-            // Artists
-            if (!string.IsNullOrEmpty(request.Artists))
-            {
-                var artists = request.Artists.Split('|');
-
-                var audio = i as IHasArtist;
-
-                if (!(audio != null && artists.Any(audio.HasAnyArtist)))
-                {
-                    return false;
-                }
-            }
-
-            // Albums
-            if (!string.IsNullOrEmpty(request.Albums))
-            {
-                var albums = request.Albums.Split('|');
-
-                var audio = i as Audio;
-
-                if (audio != null)
-                {
-                    if (!albums.Any(a => string.Equals(a, audio.Album, StringComparison.OrdinalIgnoreCase)))
-                    {
-                        return false;
-                    }
-                }
-
-                var album = i as MusicAlbum;
-
-                if (album != null)
-                {
-                    if (!albums.Any(a => string.Equals(a, album.Name, StringComparison.OrdinalIgnoreCase)))
-                    {
-                        return false;
-                    }
-                }
-
-                var musicVideo = i as MusicVideo;
-
-                if (musicVideo != null)
-                {
-                    if (!albums.Any(a => string.Equals(a, musicVideo.Album, StringComparison.OrdinalIgnoreCase)))
-                    {
-                        return false;
-                    }
-                }
-
-                return false;
-            }
-
             return true;
         }
 

+ 12 - 51
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -323,6 +323,18 @@ namespace MediaBrowser.Api.UserLibrary
                 query.MaxParentalRating = _localization.GetRatingLevel(request.MinOfficialRating);
             }
 
+            // Artists
+            if (!string.IsNullOrEmpty(request.Artists))
+            {
+                query.ArtistNames = request.Artists.Split('|');
+            }
+
+            // Albums
+            if (!string.IsNullOrEmpty(request.Albums))
+            {
+                query.AlbumNames = request.Albums.Split('|');
+            }
+
             return query;
         }
 
@@ -345,57 +357,6 @@ namespace MediaBrowser.Api.UserLibrary
                 }
             }
 
-            // Artists
-            if (!string.IsNullOrEmpty(request.Artists))
-            {
-                var artists = request.Artists.Split('|');
-
-                var audio = i as IHasArtist;
-
-                if (!(audio != null && artists.Any(audio.HasAnyArtist)))
-                {
-                    return false;
-                }
-            }
-
-            // Albums
-            if (!string.IsNullOrEmpty(request.Albums))
-            {
-                var albums = request.Albums.Split('|');
-
-                var audio = i as Audio;
-
-                if (audio != null)
-                {
-                    if (!albums.Any(a => string.Equals(a, audio.Album, StringComparison.OrdinalIgnoreCase)))
-                    {
-                        return false;
-                    }
-                }
-
-                var album = i as MusicAlbum;
-
-                if (album != null)
-                {
-                    if (!albums.Any(a => string.Equals(a, album.Name, StringComparison.OrdinalIgnoreCase)))
-                    {
-                        return false;
-                    }
-                }
-
-                var musicVideo = i as MusicVideo;
-
-                if (musicVideo != null)
-                {
-                    if (!albums.Any(a => string.Equals(a, musicVideo.Album, StringComparison.OrdinalIgnoreCase)))
-                    {
-                        return false;
-                    }
-                }
-
-                return false;
-            }
-
             return true;
         }
     }

+ 12 - 0
MediaBrowser.Controller/Entities/Folder.cs

@@ -1175,6 +1175,18 @@ namespace MediaBrowser.Controller.Entities
                 return true;
             }
 
+            if (query.AlbumNames.Length > 0)
+            {
+                Logger.Debug("Query requires post-filtering due to AlbumNames");
+                return true;
+            }
+
+            if (query.ArtistNames.Length > 0)
+            {
+                Logger.Debug("Query requires post-filtering due to ArtistNames");
+                return true;
+            }
+
             return false;
         }
 

+ 6 - 0
MediaBrowser.Controller/Entities/InternalItemsQuery.cs

@@ -128,8 +128,14 @@ namespace MediaBrowser.Controller.Entities
         public SeriesStatus[] SeriesStatuses { get; set; }
         public string AlbumArtistStartsWithOrGreater { get; set; }
 
+        public string[] AlbumNames { get; set; }
+        public string[] ArtistNames { get; set; }
+        
         public InternalItemsQuery()
         {
+            AlbumNames = new string[] { };
+            ArtistNames = new string[] { };
+            
             BlockUnratedItems = new UnratedItem[] { };
             Tags = new string[] { };
             OfficialRatings = new string[] { };

+ 47 - 0
MediaBrowser.Controller/Entities/UserViewBuilder.cs

@@ -1768,6 +1768,53 @@ namespace MediaBrowser.Controller.Entities
                 }
             }
 
+            // Artists
+            if (query.ArtistNames.Length > 0)
+            {
+                var audio = item as IHasArtist;
+
+                if (!(audio != null && query.ArtistNames.Any(audio.HasAnyArtist)))
+                {
+                    return false;
+                }
+            }
+
+            // Albums
+            if (query.AlbumNames.Length > 0)
+            {
+                var audio = item as Audio.Audio;
+
+                if (audio != null)
+                {
+                    if (!query.AlbumNames.Any(a => string.Equals(a, audio.Album, StringComparison.OrdinalIgnoreCase)))
+                    {
+                        return false;
+                    }
+                }
+
+                var album = item as MusicAlbum;
+
+                if (album != null)
+                {
+                    if (!query.AlbumNames.Any(a => string.Equals(a, album.Name, StringComparison.OrdinalIgnoreCase)))
+                    {
+                        return false;
+                    }
+                }
+
+                var musicVideo = item as MusicVideo;
+
+                if (musicVideo != null)
+                {
+                    if (!query.AlbumNames.Any(a => string.Equals(a, musicVideo.Album, StringComparison.OrdinalIgnoreCase)))
+                    {
+                        return false;
+                    }
+                }
+
+                return false;
+            }
+
             return true;
         }