From da77b058172e1c7cdeb6dadd6106ea3fdd739544 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 21 May 2017 03:25:49 -0400 Subject: [PATCH] update data queries --- Emby.Dlna/ContentDirectory/ControlHandler.cs | 22 ++++-- Emby.Drawing/ImageProcessor.cs | 21 ++++- .../Channels/ChannelManager.cs | 4 +- .../Data/SqliteItemRepository.cs | 73 +++++++++-------- Emby.Server.Implementations/Dto/DtoService.cs | 28 ++++--- .../FileOrganization/EpisodeFileOrganizer.cs | 7 +- .../Library/LibraryManager.cs | 12 ++- .../Library/LocalTrailerPostScanTask.cs | 7 +- .../Library/MusicManager.cs | 48 +++++------ .../Library/SearchEngine.cs | 13 ++- .../Library/UserViewManager.cs | 10 ++- .../LiveTv/EmbyTV/EmbyTV.cs | 18 +++-- .../LiveTv/EmbyTV/EncodedRecorder.cs | 17 ++-- .../LiveTv/LiveTvDtoService.cs | 30 +++++-- .../LiveTv/LiveTvManager.cs | 61 ++++++-------- .../Playlists/PlaylistImageProvider.cs | 7 +- .../Playlists/PlaylistManager.cs | 19 +++-- .../ScheduledTasks/ChapterImagesTask.cs | 5 +- .../Session/SessionManager.cs | 19 ++++- .../TV/SeriesPostScanTask.cs | 7 +- .../TV/TVSeriesManager.cs | 18 +++-- .../CollectionFolderImageProvider.cs | 7 +- .../UserViews/DynamicImageProvider.cs | 9 ++- MediaBrowser.Api/BaseApiService.cs | 10 --- MediaBrowser.Api/GamesService.cs | 18 ++++- MediaBrowser.Api/Images/ImageService.cs | 2 + MediaBrowser.Api/Library/LibraryService.cs | 24 +++++- MediaBrowser.Api/LiveTv/LiveTvService.cs | 5 +- MediaBrowser.Api/Movies/MoviesService.cs | 18 ++++- MediaBrowser.Api/Music/InstantMixService.cs | 52 +++++++----- MediaBrowser.Api/TvShowsService.cs | 18 ++--- .../UserLibrary/BaseItemsByNameService.cs | 3 +- MediaBrowser.Api/UserLibrary/ItemsService.cs | 8 +- .../UserLibrary/UserLibraryService.cs | 10 +-- .../Drawing/ImageProcessingOptions.cs | 2 + MediaBrowser.Controller/Dto/DtoOptions.cs | 21 +++-- .../Entities/Audio/MusicArtist.cs | 14 ---- .../Entities/Audio/MusicGenre.cs | 10 --- MediaBrowser.Controller/Entities/BaseItem.cs | 79 ++++++++++++++----- MediaBrowser.Controller/Entities/Folder.cs | 26 ++++-- MediaBrowser.Controller/Entities/GameGenre.cs | 10 --- MediaBrowser.Controller/Entities/Genre.cs | 10 --- .../Entities/IItemByName.cs | 7 -- .../Entities/InternalItemsQuery.cs | 33 ++++---- MediaBrowser.Controller/Entities/Person.cs | 16 ---- MediaBrowser.Controller/Entities/Studio.cs | 10 --- MediaBrowser.Controller/Entities/TV/Season.cs | 19 +++-- MediaBrowser.Controller/Entities/TV/Series.cs | 28 ++++--- MediaBrowser.Controller/Entities/UserView.cs | 8 +- .../Entities/UserViewBuilder.cs | 11 +-- MediaBrowser.Controller/Entities/Year.cs | 20 ----- .../Library/IMusicManager.cs | 18 ++--- .../Library/IUserViewManager.cs | 3 +- .../LiveTv/ILiveTvManager.cs | 11 +-- MediaBrowser.Controller/Playlists/Playlist.cs | 24 +++--- .../TV/ITVSeriesManager.cs | 10 +-- MediaBrowser.Model/Querying/ItemFields.cs | 11 ++- .../Manager/ProviderManager.cs | 7 +- .../MediaInfo/SubtitleScheduledTask.cs | 4 +- .../People/TvdbPersonImageProvider.cs | 7 +- .../TV/TheTVDB/TvdbPrescanTask.cs | 13 ++- MediaBrowser.XbmcMetadata/EntryPoint.cs | 4 +- 62 files changed, 620 insertions(+), 446 deletions(-) diff --git a/Emby.Dlna/ContentDirectory/ControlHandler.cs b/Emby.Dlna/ContentDirectory/ControlHandler.cs index 2251a8f58c..a5229c4faa 100644 --- a/Emby.Dlna/ContentDirectory/ControlHandler.cs +++ b/Emby.Dlna/ContentDirectory/ControlHandler.cs @@ -23,6 +23,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Xml; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Globalization; @@ -459,10 +460,16 @@ namespace Emby.Dlna.ContentDirectory IsMissing = false, ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name }, IsFolder = isFolder, - MediaTypes = mediaTypes.ToArray() + MediaTypes = mediaTypes.ToArray(), + DtoOptions = GetDtoOptions() }); } + private DtoOptions GetDtoOptions() + { + return new DtoOptions(true); + } + private async Task> GetUserItems(BaseItem item, StubType? stubType, User user, SortCriteria sort, int? startIndex, int? limit) { if (item is MusicGenre) @@ -513,7 +520,8 @@ namespace Emby.Dlna.ContentDirectory IsMissing = false, PresetViews = new[] {CollectionType.Movies, CollectionType.TvShows, CollectionType.Music}, ExcludeItemTypes = new[] {typeof (Game).Name, typeof (Book).Name}, - IsPlaceHolder = false + IsPlaceHolder = false, + DtoOptions = GetDtoOptions() }; SetSorting(query, sort, folder.IsPreSorted); @@ -532,7 +540,8 @@ namespace Emby.Dlna.ContentDirectory ArtistIds = new[] { item.Id.ToString("N") }, IncludeItemTypes = new[] { typeof(MusicAlbum).Name }, Limit = limit, - StartIndex = startIndex + StartIndex = startIndex, + DtoOptions = GetDtoOptions() }; SetSorting(query, sort, false); @@ -551,7 +560,8 @@ namespace Emby.Dlna.ContentDirectory GenreIds = new[] {item.Id.ToString("N")}, IncludeItemTypes = new[] {typeof (MusicAlbum).Name}, Limit = limit, - StartIndex = startIndex + StartIndex = startIndex, + DtoOptions = GetDtoOptions() }; SetSorting(query, sort, false); @@ -595,8 +605,8 @@ namespace Emby.Dlna.ContentDirectory IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Series).Name, typeof(Trailer).Name }, SortBy = new[] { ItemSortBy.SortName }, Limit = limit, - StartIndex = startIndex - + StartIndex = startIndex, + DtoOptions = GetDtoOptions() }); var serverItems = itemsResult.Items.Select(i => new ServerItem(i)) diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs index 92382aa47a..d5a3b73c27 100644 --- a/Emby.Drawing/ImageProcessor.cs +++ b/Emby.Drawing/ImageProcessor.cs @@ -179,10 +179,15 @@ namespace Emby.Drawing } var originalImage = options.Image; + IHasImages item = options.Item; if (!originalImage.IsLocalFile) { - originalImage = await _libraryManager().ConvertImageToLocal(options.Item, originalImage, options.ImageIndex).ConfigureAwait(false); + if (item == null) + { + item = _libraryManager().GetItemById(options.ItemId); + } + originalImage = await _libraryManager().ConvertImageToLocal(item, originalImage, options.ImageIndex).ConfigureAwait(false); } var originalImagePath = originalImage.Path; @@ -195,13 +200,18 @@ namespace Emby.Drawing if (options.Enhancers.Count > 0) { + if (item == null) + { + item = _libraryManager().GetItemById(options.ItemId); + } + var tuple = await GetEnhancedImage(new ItemImageInfo { DateModified = dateModified, Type = originalImage.Type, Path = originalImagePath - }, options.Item, options.ImageIndex, options.Enhancers).ConfigureAwait(false); + }, item, options.ImageIndex, options.Enhancers).ConfigureAwait(false); originalImagePath = tuple.Item1; dateModified = tuple.Item2; @@ -237,7 +247,12 @@ namespace Emby.Drawing var tmpPath = Path.ChangeExtension(Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString("N")), Path.GetExtension(cacheFilePath)); _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(tmpPath)); - var resultPath =_imageEncoder.EncodeImage(originalImagePath, dateModified, tmpPath, AutoOrient(options.Item), quality, options, outputFormat); + if (item == null && string.Equals(options.ItemType, typeof(Photo).Name, StringComparison.OrdinalIgnoreCase)) + { + item = _libraryManager().GetItemById(options.ItemId); + } + + var resultPath =_imageEncoder.EncodeImage(originalImagePath, dateModified, tmpPath, AutoOrient(item), quality, options, outputFormat); if (string.Equals(resultPath, originalImagePath, StringComparison.OrdinalIgnoreCase)) { diff --git a/Emby.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs index 0cdd934b7a..067260dfd9 100644 --- a/Emby.Server.Implementations/Channels/ChannelManager.cs +++ b/Emby.Server.Implementations/Channels/ChannelManager.cs @@ -460,12 +460,12 @@ namespace Emby.Server.Implementations.Channels public IEnumerable GetAllChannelFeatures() { - return _libraryManager.GetItemList(new InternalItemsQuery + return _libraryManager.GetItemIds(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(Channel).Name }, SortBy = new[] { ItemSortBy.SortName } - }).Select(i => GetChannelFeatures(i.Id.ToString("N"))); + }).Select(i => GetChannelFeatures(i.ToString("N"))); } public ChannelFeatures GetChannelFeatures(string id) diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 51aee444e4..49bf9e39c5 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -207,8 +207,6 @@ namespace Emby.Server.Implementations.Data AddColumn(db, "TypedBaseItems", "DateCreated", "DATETIME", existingColumnNames); AddColumn(db, "TypedBaseItems", "DateModified", "DATETIME", existingColumnNames); - AddColumn(db, "TypedBaseItems", "ForcedSortName", "Text", existingColumnNames); - AddColumn(db, "TypedBaseItems", "IsSeries", "BIT", existingColumnNames); AddColumn(db, "TypedBaseItems", "IsLive", "BIT", existingColumnNames); AddColumn(db, "TypedBaseItems", "IsNews", "BIT", existingColumnNames); @@ -426,7 +424,7 @@ namespace Emby.Server.Implementations.Data "OfficialRating", "HomePageUrl", "DisplayMediaType", - "ForcedSortName", + "SortName", "RunTimeTicks", "VoteCount", "DateCreated", @@ -549,7 +547,6 @@ namespace Emby.Server.Implementations.Data "DisplayMediaType", "DateCreated", "DateModified", - "ForcedSortName", "PreferredMetadataLanguage", "PreferredMetadataCountryCode", "IsHD", @@ -826,8 +823,6 @@ namespace Emby.Server.Implementations.Data saveItemStatement.TryBind("@DateCreated", item.DateCreated); saveItemStatement.TryBind("@DateModified", item.DateModified); - saveItemStatement.TryBind("@ForcedSortName", item.ForcedSortName); - saveItemStatement.TryBind("@PreferredMetadataLanguage", item.PreferredMetadataLanguage); saveItemStatement.TryBind("@PreferredMetadataCountryCode", item.PreferredMetadataCountryCode); saveItemStatement.TryBind("@IsHD", item.IsHD); @@ -1237,7 +1232,7 @@ namespace Emby.Server.Implementations.Data foreach (var row in statement.ExecuteQuery()) { - return GetItem(row); + return GetItem(row, new InternalItemsQuery()); } } @@ -1246,11 +1241,6 @@ namespace Emby.Server.Implementations.Data } } - private BaseItem GetItem(IReadOnlyList reader) - { - return GetItem(reader, new InternalItemsQuery()); - } - private bool TypeRequiresDeserialization(Type type) { if (_config.Configuration.SkipDeserializationForBasicTypes) @@ -1535,11 +1525,14 @@ namespace Emby.Server.Implementations.Data } index++; - if (!reader.IsDBNull(index)) + if (query.HasField(ItemFields.ExternalEtag)) { - item.ExternalEtag = reader.GetString(index); + if (!reader.IsDBNull(index)) + { + item.ExternalEtag = reader.GetString(index); + } + index++; } - index++; if (!reader.IsDBNull(index)) { @@ -1614,7 +1607,7 @@ namespace Emby.Server.Implementations.Data { if (!reader.IsDBNull(index)) { - item.ForcedSortName = reader.GetString(index); + item.SortName = reader.GetString(index); } index++; } @@ -1821,29 +1814,41 @@ namespace Emby.Server.Implementations.Data } index++; - if (!reader.IsDBNull(index)) + if (query.HasField(ItemFields.PresentationUniqueKey)) { - item.PresentationUniqueKey = reader.GetString(index); + if (!reader.IsDBNull(index)) + { + item.PresentationUniqueKey = reader.GetString(index); + } + index++; } - index++; - if (!reader.IsDBNull(index)) + if (query.HasField(ItemFields.InheritedParentalRatingValue)) { - item.InheritedParentalRatingValue = reader.GetInt32(index); + if (!reader.IsDBNull(index)) + { + item.InheritedParentalRatingValue = reader.GetInt32(index); + } + index++; } - index++; - if (!reader.IsDBNull(index)) + if (query.HasField(ItemFields.Tags)) { - item.InheritedTags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); + if (!reader.IsDBNull(index)) + { + item.InheritedTags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); + } + index++; } - index++; - if (!reader.IsDBNull(index)) + if (query.HasField(ItemFields.ExternalSeriesId)) { - item.ExternalSeriesId = reader.GetString(index); + if (!reader.IsDBNull(index)) + { + item.ExternalSeriesId = reader.GetString(index); + } + index++; } - index++; if (query.HasField(ItemFields.Taglines)) { @@ -2240,12 +2245,16 @@ namespace Emby.Server.Implementations.Data } if (field == ItemFields.SortName) { - return new[] { "ForcedSortName" }; + return new[] { "SortName" }; } if (field == ItemFields.Taglines) { return new[] { "Tagline" }; } + if (field == ItemFields.Tags) + { + return new[] { "Tags", "InheritedTags" }; + } return new[] { field.ToString() }; } @@ -4916,7 +4925,9 @@ namespace Emby.Server.Implementations.Data var columns = _retriveItemColumns.ToList(); columns.AddRange(itemCountColumns.Select(i => i.Item2).ToArray()); - var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, columns.ToArray())) + GetFromText(); + columns = GetFinalColumnsToSelect(query, columns.ToArray()).ToList(); + + var commandText = "select " + string.Join(",", columns.ToArray()) + GetFromText(); commandText += GetJoinUserDataText(query); var innerQuery = new InternalItemsQuery(query.User) @@ -5042,7 +5053,7 @@ namespace Emby.Server.Implementations.Data foreach (var row in statement.ExecuteQuery()) { - var item = GetItem(row); + var item = GetItem(row, query); if (item != null) { var countStartColumn = columns.Count - 1; diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs index ec4f552a60..bb46e60063 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -127,7 +127,11 @@ namespace Emby.Server.Implementations.Dto { var libraryItems = byName.GetTaggedItems(new InternalItemsQuery(user) { - Recursive = true + Recursive = true, + DtoOptions = new DtoOptions(false) + { + EnableImages = false + } }); SetItemByNameInfo(item, dto, libraryItems.ToList(), user); @@ -177,7 +181,11 @@ namespace Emby.Server.Implementations.Dto { if (options.Fields.Contains(ItemFields.ItemCounts)) { - SetItemByNameInfo(item, dto, GetTaggedItems(byName, user), user); + SetItemByNameInfo(item, dto, GetTaggedItems(byName, user, new DtoOptions(false) + { + EnableImages = false + + }), user); } FillSyncInfo(dto, item, options, user, syncDictionary); @@ -189,11 +197,12 @@ namespace Emby.Server.Implementations.Dto return dto; } - private List GetTaggedItems(IItemByName byName, User user) + private List GetTaggedItems(IItemByName byName, User user, DtoOptions options) { var items = byName.GetTaggedItems(new InternalItemsQuery(user) { - Recursive = true + Recursive = true, + DtoOptions = options }).ToList(); @@ -595,16 +604,17 @@ namespace Emby.Server.Implementations.Dto { if (!string.IsNullOrEmpty(item.Album)) { - var parentAlbum = _libraryManager.GetItemList(new InternalItemsQuery + var parentAlbumIds = _libraryManager.GetItemIds(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(MusicAlbum).Name }, - Name = item.Album + Name = item.Album, + Limit = 1 - }).FirstOrDefault(); + }); - if (parentAlbum != null) + if (parentAlbumIds.Count > 0) { - dto.AlbumId = GetDtoId(parentAlbum); + dto.AlbumId = parentAlbumIds[0].ToString("N"); } } diff --git a/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs index 86c8c5f68e..7371b4fdbc 100644 --- a/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs +++ b/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs @@ -16,6 +16,7 @@ using System.Threading; using System.Threading.Tasks; using Emby.Server.Implementations.Library; using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; @@ -588,7 +589,8 @@ namespace Emby.Server.Implementations.FileOrganization var series = _libraryManager.GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(Series).Name }, - Recursive = true + Recursive = true, + DtoOptions = new DtoOptions(true) }) .Cast() .Select(i => NameUtils.GetMatchScore(nameWithoutYear, yearInName, i)) @@ -607,7 +609,8 @@ namespace Emby.Server.Implementations.FileOrganization { IncludeItemTypes = new[] { typeof(Series).Name }, Recursive = true, - Name = info.ItemName + Name = info.ItemName, + DtoOptions = new DtoOptions(true) }).Cast().FirstOrDefault(); } diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index c8151ec864..a423db9d6f 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -41,6 +41,7 @@ using SortOrder = MediaBrowser.Model.Entities.SortOrder; using VideoResolver = MediaBrowser.Naming.Video.VideoResolver; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Tasks; @@ -313,7 +314,8 @@ namespace Emby.Server.Implementations.Library { IncludeItemTypes = new[] { typeof(Season).Name }, Recursive = true, - IndexNumber = 0 + IndexNumber = 0, + DtoOptions = new DtoOptions(true) }).Cast() .Where(i => !string.Equals(i.Name, newName, StringComparison.Ordinal)) @@ -342,7 +344,7 @@ namespace Emby.Server.Implementations.Library } if (item is IItemByName) { - if (!(item is MusicArtist) && !(item is Studio)) + if (!(item is MusicArtist)) { return; } @@ -868,7 +870,8 @@ namespace Emby.Server.Implementations.Library IsFolder = isFolder, SortBy = new[] { ItemSortBy.DateCreated }, SortOrder = SortOrder.Descending, - Limit = 1 + Limit = 1, + DtoOptions = new DtoOptions(true) }; return GetItemList(query) @@ -981,7 +984,8 @@ namespace Emby.Server.Implementations.Library var existing = GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(T).Name }, - Name = name + Name = name, + DtoOptions = new DtoOptions(true) }).Cast() .OrderBy(i => i.IsAccessedByName ? 1 : 0) diff --git a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs index 7424ed5e5e..e64980dff8 100644 --- a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs +++ b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs @@ -6,6 +6,7 @@ using System; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -27,7 +28,8 @@ namespace Emby.Server.Implementations.Library var items = _libraryManager.GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(BoxSet).Name, typeof(Game).Name, typeof(Movie).Name, typeof(Series).Name }, - Recursive = true + Recursive = true, + DtoOptions = new DtoOptions(true) }).OfType().ToList(); @@ -40,7 +42,8 @@ namespace Emby.Server.Implementations.Library { IncludeItemTypes = new[] { typeof(Trailer).Name }, TrailerTypes = trailerTypes, - Recursive = true + Recursive = true, + DtoOptions = new DtoOptions(false) }).ToArray(); diff --git a/Emby.Server.Implementations/Library/MusicManager.cs b/Emby.Server.Implementations/Library/MusicManager.cs index b15c011254..f0d07cc3c4 100644 --- a/Emby.Server.Implementations/Library/MusicManager.cs +++ b/Emby.Server.Implementations/Library/MusicManager.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Playlists; using System; using System.Collections.Generic; using System.Linq; +using MediaBrowser.Controller.Dto; using MediaBrowser.Model.Querying; namespace Emby.Server.Implementations.Library @@ -18,47 +19,48 @@ namespace Emby.Server.Implementations.Library _libraryManager = libraryManager; } - public IEnumerable