From 351cfef7a70ef311801be0bc9eb9e3891265d22b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 3 Feb 2014 23:04:19 -0500 Subject: [PATCH] use conditional caching on some json responses --- MediaBrowser.Api/AlbumsService.cs | 2 +- MediaBrowser.Api/BaseApiService.cs | 21 ++++++--- MediaBrowser.Api/ConfigurationService.cs | 4 +- .../DefaultTheme/DefaultThemeService.cs | 8 ++-- MediaBrowser.Api/DisplayPreferencesService.cs | 2 +- MediaBrowser.Api/EnvironmentService.cs | 10 ++--- MediaBrowser.Api/GamesService.cs | 6 +-- MediaBrowser.Api/Images/ImageService.cs | 4 +- MediaBrowser.Api/Images/RemoteImageService.cs | 6 +-- MediaBrowser.Api/InstantMixService.cs | 8 ++-- .../Library/FileOrganizationService.cs | 2 +- MediaBrowser.Api/Library/LibraryService.cs | 4 +- .../Library/LibraryStructureService.cs | 4 +- MediaBrowser.Api/LibraryService.cs | 16 +++---- MediaBrowser.Api/LiveTv/LiveTvService.cs | 32 ++++++------- MediaBrowser.Api/LocalizationService.cs | 6 +-- MediaBrowser.Api/MoviesService.cs | 2 +- MediaBrowser.Api/NewsService.cs | 2 +- MediaBrowser.Api/PluginService.cs | 4 +- MediaBrowser.Api/SearchService.cs | 2 +- MediaBrowser.Api/TrailersService.cs | 2 +- MediaBrowser.Api/TvShowsService.cs | 4 +- .../UserLibrary/GameGenresService.cs | 4 +- MediaBrowser.Api/UserLibrary/GenresService.cs | 4 +- MediaBrowser.Api/UserLibrary/ItemsService.cs | 2 +- .../UserLibrary/MusicGenresService.cs | 4 +- .../UserLibrary/PersonsService.cs | 4 +- .../UserLibrary/StudiosService.cs | 4 +- .../UserLibrary/UserLibraryService.cs | 14 +++--- MediaBrowser.Api/UserLibrary/YearsService.cs | 4 +- MediaBrowser.Api/UserService.cs | 4 +- MediaBrowser.Api/VideosService.cs | 2 +- MediaBrowser.Controller/Entities/BaseItem.cs | 9 ++++ .../Entities/CollectionFolder.cs | 4 +- MediaBrowser.Controller/Entities/Folder.cs | 2 +- .../Net/IHttpResultFactory.cs | 14 +++++- .../BoxSets/BoxSetMetadataService.cs | 6 +-- .../CollectionFolderImageProvider.cs | 4 +- .../Manager/MetadataService.cs | 13 +++--- .../Music/AlbumMetadataService.cs | 4 +- .../Music/ArtistMetadataService.cs | 4 +- .../TV/SeriesMetadataService.cs | 4 +- .../TV/TvdbSeriesProvider.cs | 45 ++++++++++++++++--- .../EntryPoints/LibraryChangedNotifier.cs | 2 +- .../HttpServer/HttpResultFactory.cs | 34 +++++++++----- .../IO/LibraryMonitor.cs | 3 +- .../Library/LibraryManager.cs | 7 ++- .../ApplicationHost.cs | 2 +- 48 files changed, 216 insertions(+), 138 deletions(-) diff --git a/MediaBrowser.Api/AlbumsService.cs b/MediaBrowser.Api/AlbumsService.cs index b8a830711a..5787ad180c 100644 --- a/MediaBrowser.Api/AlbumsService.cs +++ b/MediaBrowser.Api/AlbumsService.cs @@ -59,7 +59,7 @@ namespace MediaBrowser.Api request, item => item is MusicAlbum, GetAlbumSimilarityScore); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index 556f3b57d5..2dd1c77e1e 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -21,7 +21,7 @@ namespace MediaBrowser.Api /// /// The logger. public ILogger Logger { get; set; } - + /// /// Gets or sets the HTTP result factory. /// @@ -58,15 +58,26 @@ namespace MediaBrowser.Api /// The cache key. /// The last date modified. /// Duration of the cache. - /// The factory fn. + /// The factory function. /// System.Object. - /// cacheKey - protected object ToOptimizedResultUsingCache(Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func factoryFn) - where T : class + protected object ToOptimizedResultUsingCache(Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func factoryFn) + where T : class { return ResultFactory.GetOptimizedResultUsingCache(Request, cacheKey, lastDateModified, cacheDuration, factoryFn); } + /// + /// To the optimized serialized result using cache. + /// + /// + /// The result. + /// System.Object. + protected object ToOptimizedSerializedResultUsingCache(T result) + where T : class + { + return ResultFactory.GetOptimizedSerializedResultUsingCache(Request, result); + } + /// /// To the cached result. /// diff --git a/MediaBrowser.Api/ConfigurationService.cs b/MediaBrowser.Api/ConfigurationService.cs index 206d0c265f..b2a5fa7a73 100644 --- a/MediaBrowser.Api/ConfigurationService.cs +++ b/MediaBrowser.Api/ConfigurationService.cs @@ -99,12 +99,12 @@ namespace MediaBrowser.Api public object Get(GetDefaultMetadataOptions request) { - return ToOptimizedResult(new MetadataOptions()); + return ToOptimizedSerializedResultUsingCache(new MetadataOptions()); } public object Get(GetMetadataPlugins request) { - return ToOptimizedResult(_providerManager.GetAllMetadataPlugins().ToList()); + return ToOptimizedSerializedResultUsingCache(_providerManager.GetAllMetadataPlugins().ToList()); } } } diff --git a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs index 75ef7e54e4..6a91897f2f 100644 --- a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs +++ b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs @@ -215,7 +215,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); - return ToOptimizedResult(view); + return ToOptimizedSerializedResultUsingCache(view); } public object Get(GetGamesView request) @@ -268,7 +268,7 @@ namespace MediaBrowser.Api.DefaultTheme .Take(1) .ToList(); - return ToOptimizedResult(view); + return ToOptimizedSerializedResultUsingCache(view); } public object Get(GetTvView request) @@ -394,7 +394,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); - return ToOptimizedResult(view); + return ToOptimizedSerializedResultUsingCache(view); } public object Get(GetMovieView request) @@ -569,7 +569,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); - return ToOptimizedResult(view); + return ToOptimizedSerializedResultUsingCache(view); } private IEnumerable FilterItemsForBackdropDisplay(IEnumerable items) diff --git a/MediaBrowser.Api/DisplayPreferencesService.cs b/MediaBrowser.Api/DisplayPreferencesService.cs index 39b335316b..f22dc9e39e 100644 --- a/MediaBrowser.Api/DisplayPreferencesService.cs +++ b/MediaBrowser.Api/DisplayPreferencesService.cs @@ -88,7 +88,7 @@ namespace MediaBrowser.Api var result = _displayPreferencesManager.GetDisplayPreferences(displayPreferencesId, request.UserId, request.Client); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index aac7085207..cb104072bd 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -135,10 +135,10 @@ namespace MediaBrowser.Api if (path.StartsWith(networkPrefix, StringComparison.OrdinalIgnoreCase) && path.LastIndexOf(UncSeparator) == 1) { - return ToOptimizedResult(GetNetworkShares(path).OrderBy(i => i.Path).ToList()); + return ToOptimizedSerializedResultUsingCache(GetNetworkShares(path).OrderBy(i => i.Path).ToList()); } - return ToOptimizedResult(GetFileSystemEntries(request).OrderBy(i => i.Path).ToList()); + return ToOptimizedSerializedResultUsingCache(GetFileSystemEntries(request).OrderBy(i => i.Path).ToList()); } public object Get(GetNetworkShares request) @@ -147,7 +147,7 @@ namespace MediaBrowser.Api var shares = GetNetworkShares(path).OrderBy(i => i.Path).ToList(); - return ToOptimizedResult(shares); + return ToOptimizedSerializedResultUsingCache(shares); } /// @@ -159,7 +159,7 @@ namespace MediaBrowser.Api { var result = GetDrives().ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -189,7 +189,7 @@ namespace MediaBrowser.Api .OrderBy(i => i.Path) .ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs index ef4fed3d36..d3b7cbe41b 100644 --- a/MediaBrowser.Api/GamesService.cs +++ b/MediaBrowser.Api/GamesService.cs @@ -113,7 +113,7 @@ namespace MediaBrowser.Api .Select(i => GetSummary(i, user)) .ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); @@ -134,7 +134,7 @@ namespace MediaBrowser.Api }) .ToList(); - return ToOptimizedResult(lookup); + return ToOptimizedSerializedResultUsingCache(lookup); } /// @@ -182,7 +182,7 @@ namespace MediaBrowser.Api request, item => item is Game, SimilarItemsHelper.GetSimiliarityScore); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } } diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 728ceeea96..514e856550 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -361,14 +361,14 @@ namespace MediaBrowser.Api.Images var result = GetItemImageInfos(item); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetItemByNameImageInfos request) { var result = GetItemByNameImageInfos(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/Images/RemoteImageService.cs b/MediaBrowser.Api/Images/RemoteImageService.cs index 37bf0c1cae..deba146e8c 100644 --- a/MediaBrowser.Api/Images/RemoteImageService.cs +++ b/MediaBrowser.Api/Images/RemoteImageService.cs @@ -176,7 +176,7 @@ namespace MediaBrowser.Api.Images var result = GetImageProviders(item); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetItemByNameRemoteImageProviders request) @@ -188,7 +188,7 @@ namespace MediaBrowser.Api.Images var result = GetImageProviders(item); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } private List GetImageProviders(BaseItem item) @@ -202,7 +202,7 @@ namespace MediaBrowser.Api.Images var result = GetRemoteImageResult(item, request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetItemByNameRemoteImages request) diff --git a/MediaBrowser.Api/InstantMixService.cs b/MediaBrowser.Api/InstantMixService.cs index c11f38123d..624137677c 100644 --- a/MediaBrowser.Api/InstantMixService.cs +++ b/MediaBrowser.Api/InstantMixService.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.Api var result = GetInstantMixResult(request, item.Genres); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetInstantMixFromAlbum request) @@ -73,7 +73,7 @@ namespace MediaBrowser.Api var result = GetInstantMixResult(request, genres); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetInstantMixFromMusicGenre request) @@ -82,7 +82,7 @@ namespace MediaBrowser.Api var result = GetInstantMixResult(request, new[] { genre.Name }); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetInstantMixFromArtist request) @@ -99,7 +99,7 @@ namespace MediaBrowser.Api var result = GetInstantMixResult(request, genres); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } private ItemsResult GetInstantMixResult(BaseGetSimilarItems request, IEnumerable genres) diff --git a/MediaBrowser.Api/Library/FileOrganizationService.cs b/MediaBrowser.Api/Library/FileOrganizationService.cs index 44fad6a859..01531a7ae6 100644 --- a/MediaBrowser.Api/Library/FileOrganizationService.cs +++ b/MediaBrowser.Api/Library/FileOrganizationService.cs @@ -95,7 +95,7 @@ namespace MediaBrowser.Api.Library StartIndex = request.StartIndex }); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public void Delete(DeleteOriginalFile request) diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index f3d5824da2..79b2651d5a 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -77,7 +77,7 @@ namespace MediaBrowser.Api.Library { try { - return c.ResolveArgs.PhysicalLocations; + return c.PhysicalLocations; } catch (Exception ex) { @@ -90,7 +90,7 @@ namespace MediaBrowser.Api.Library }) .ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs index 8ea472da30..f08d79c0db 100644 --- a/MediaBrowser.Api/Library/LibraryStructureService.cs +++ b/MediaBrowser.Api/Library/LibraryStructureService.cs @@ -251,7 +251,7 @@ namespace MediaBrowser.Api.Library { var result = _libraryManager.GetDefaultVirtualFolders().OrderBy(i => i.Name).ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } else { @@ -259,7 +259,7 @@ namespace MediaBrowser.Api.Library var result = _libraryManager.GetVirtualFolders(user).OrderBy(i => i.Name).ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index d9442b63d5..584bbf9a1a 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -284,7 +284,7 @@ namespace MediaBrowser.Api { var result = GetAncestors(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -337,7 +337,7 @@ namespace MediaBrowser.Api try { return i.LocationType == LocationType.FileSystem && - i.ResolveArgs.PhysicalLocations.Contains(item.Path); + i.PhysicalLocations.Contains(item.Path); } catch (Exception ex) { @@ -360,7 +360,7 @@ namespace MediaBrowser.Api { var result = GetCriticReviews(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -405,7 +405,7 @@ namespace MediaBrowser.Api UniqueTypes = items.Select(i => i.GetClientTypeName()).Distinct().ToList() }; - return ToOptimizedResult(counts); + return ToOptimizedSerializedResultUsingCache(counts); } private IEnumerable FilterItems(IEnumerable items, GetItemCounts request, Guid userId) @@ -552,7 +552,7 @@ namespace MediaBrowser.Api }); - return ToOptimizedResult(new AllThemeMediaResult + return ToOptimizedSerializedResultUsingCache(new AllThemeMediaResult { ThemeSongsResult = themeSongs, ThemeVideosResult = themeVideos, @@ -570,7 +570,7 @@ namespace MediaBrowser.Api { var result = GetThemeSongs(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } private ThemeMediaResult GetThemeSongs(GetThemeSongs request) @@ -638,7 +638,7 @@ namespace MediaBrowser.Api { var result = GetThemeVideos(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public ThemeMediaResult GetThemeVideos(GetThemeVideos request) @@ -748,7 +748,7 @@ namespace MediaBrowser.Api }) .ToList(); - return ToOptimizedResult(lookup); + return ToOptimizedSerializedResultUsingCache(lookup); } public ThemeMediaResult GetSoundtrackSongs(string id, Guid? userId, bool inheritFromParent) diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index 9d827226c9..569e4b52b9 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -304,7 +304,7 @@ namespace MediaBrowser.Api.LiveTv { var info = _liveTvManager.GetLiveTvInfo(CancellationToken.None).Result; - return ToOptimizedResult(info); + return ToOptimizedSerializedResultUsingCache(info); } public object Get(GetChannels request) @@ -318,7 +318,7 @@ namespace MediaBrowser.Api.LiveTv }, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetChannel request) @@ -327,7 +327,7 @@ namespace MediaBrowser.Api.LiveTv var result = _liveTvManager.GetChannel(request.Id, CancellationToken.None, user).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetPrograms request) @@ -360,7 +360,7 @@ namespace MediaBrowser.Api.LiveTv var result = _liveTvManager.GetPrograms(query, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetRecommendedPrograms request) @@ -375,7 +375,7 @@ namespace MediaBrowser.Api.LiveTv var result = _liveTvManager.GetRecommendedPrograms(query, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Post(GetPrograms request) @@ -398,7 +398,7 @@ namespace MediaBrowser.Api.LiveTv }, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetRecording request) @@ -407,14 +407,14 @@ namespace MediaBrowser.Api.LiveTv var result = _liveTvManager.GetRecording(request.Id, CancellationToken.None, user).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetTimer request) { var result = _liveTvManager.GetTimer(request.Id, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetTimers request) @@ -426,7 +426,7 @@ namespace MediaBrowser.Api.LiveTv }, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public void Delete(DeleteRecording request) @@ -465,14 +465,14 @@ namespace MediaBrowser.Api.LiveTv }, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetSeriesTimer request) { var result = _liveTvManager.GetSeriesTimer(request.Id, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public void Delete(CancelSeriesTimer request) @@ -499,13 +499,13 @@ namespace MediaBrowser.Api.LiveTv { var result = _liveTvManager.GetNewTimerDefaults(CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } else { var result = _liveTvManager.GetNewTimerDefaults(request.ProgramId, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } @@ -515,7 +515,7 @@ namespace MediaBrowser.Api.LiveTv var result = _liveTvManager.GetProgram(request.Id, CancellationToken.None, user).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public void Post(CreateSeriesTimer request) @@ -544,7 +544,7 @@ namespace MediaBrowser.Api.LiveTv }, CancellationToken.None).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public object Get(GetRecordingGroup request) @@ -556,7 +556,7 @@ namespace MediaBrowser.Api.LiveTv var group = result.Items.FirstOrDefault(i => string.Equals(i.Id, request.Id, StringComparison.OrdinalIgnoreCase)); - return ToOptimizedResult(group); + return ToOptimizedSerializedResultUsingCache(group); } public object Get(GetGuideInfo request) diff --git a/MediaBrowser.Api/LocalizationService.cs b/MediaBrowser.Api/LocalizationService.cs index 54ac8591ea..b3f6cbd976 100644 --- a/MediaBrowser.Api/LocalizationService.cs +++ b/MediaBrowser.Api/LocalizationService.cs @@ -62,7 +62,7 @@ namespace MediaBrowser.Api { var result = _localization.GetParentalRatings().ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -74,7 +74,7 @@ namespace MediaBrowser.Api { var result = _localization.GetCountries().ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -86,7 +86,7 @@ namespace MediaBrowser.Api { var result = _localization.GetCultures().ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } diff --git a/MediaBrowser.Api/MoviesService.cs b/MediaBrowser.Api/MoviesService.cs index 1b36ec8915..2a99bca8b0 100644 --- a/MediaBrowser.Api/MoviesService.cs +++ b/MediaBrowser.Api/MoviesService.cs @@ -76,7 +76,7 @@ namespace MediaBrowser.Api request, item => item is Movie || (item is Trailer && request.IncludeTrailers), SimilarItemsHelper.GetSimiliarityScore); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } } diff --git a/MediaBrowser.Api/NewsService.cs b/MediaBrowser.Api/NewsService.cs index efafc9d3f3..99a4d4fa7e 100644 --- a/MediaBrowser.Api/NewsService.cs +++ b/MediaBrowser.Api/NewsService.cs @@ -42,7 +42,7 @@ namespace MediaBrowser.Api }); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } } diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs index de9c89666c..e66f432df8 100644 --- a/MediaBrowser.Api/PluginService.cs +++ b/MediaBrowser.Api/PluginService.cs @@ -166,7 +166,7 @@ namespace MediaBrowser.Api { var result = _appHost.Plugins.OrderBy(p => p.Name).Select(p => p.GetPluginInfo()).ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -199,7 +199,7 @@ namespace MediaBrowser.Api LegacyKey = _securityManager.LegacyKey }; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index 8626709a3b..330d7c46f3 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -110,7 +110,7 @@ namespace MediaBrowser.Api { var result = GetSearchHintsAsync(request).Result; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/TrailersService.cs b/MediaBrowser.Api/TrailersService.cs index 7d137646cc..ca465b5e32 100644 --- a/MediaBrowser.Api/TrailersService.cs +++ b/MediaBrowser.Api/TrailersService.cs @@ -69,7 +69,7 @@ namespace MediaBrowser.Api request, item => item is Movie || item is Trailer, SimilarItemsHelper.GetSimiliarityScore); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } } diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index 9521f82cce..629f9b2333 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -183,7 +183,7 @@ namespace MediaBrowser.Api request, item => item is Series, SimilarItemsHelper.GetSimiliarityScore); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -210,7 +210,7 @@ namespace MediaBrowser.Api Items = returnItems }; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } public IEnumerable GetNextUpEpisodes(GetNextUpEpisodes request) diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs index 79ee27df62..d282ee091d 100644 --- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -91,7 +91,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index ded9544f8e..092c638822 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -62,7 +62,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -96,7 +96,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 16243ba6bb..101a379ea7 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -268,7 +268,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItems(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs index 945ac5a670..3f960ccbe9 100644 --- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -91,7 +91,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 03e710ae81..32700d21ab 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -74,7 +74,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -108,7 +108,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index 8b1eeec0f8..cf4e333e1b 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -62,7 +62,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -96,7 +96,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index d3995ae2b2..c2abc6ad11 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Dto; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -7,6 +8,7 @@ using MediaBrowser.Controller.Session; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Serialization; using ServiceStack; using System; using System.Collections.Generic; @@ -411,7 +413,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetAsync(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } private List GetAsync(GetSpecialFeatures request) @@ -477,7 +479,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetAsync(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } private List GetAsync(GetLocalTrailers request) @@ -521,7 +523,7 @@ namespace MediaBrowser.Api.UserLibrary var result = _dtoService.GetBaseItemDto(item, fields, user); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -540,7 +542,7 @@ namespace MediaBrowser.Api.UserLibrary var result = _dtoService.GetBaseItemDto(item, fields, user); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -570,7 +572,7 @@ namespace MediaBrowser.Api.UserLibrary TotalRecordCount = dtos.Length }; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index 3c54d5b369..7024d52563 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -62,7 +62,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -96,7 +96,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 254fa6ff1e..80260c83cb 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -225,7 +225,7 @@ namespace MediaBrowser.Api .Select(_dtoService.GetUserDto) .ToList(); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// @@ -244,7 +244,7 @@ namespace MediaBrowser.Api var result = _dtoService.GetUserDto(user); - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } /// diff --git a/MediaBrowser.Api/VideosService.cs b/MediaBrowser.Api/VideosService.cs index d67c290229..fb58e58b7b 100644 --- a/MediaBrowser.Api/VideosService.cs +++ b/MediaBrowser.Api/VideosService.cs @@ -69,7 +69,7 @@ namespace MediaBrowser.Api TotalRecordCount = items.Length }; - return ToOptimizedResult(result); + return ToOptimizedSerializedResultUsingCache(result); } } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 5a041860bb..650a9bad09 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -253,6 +253,15 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public IEnumerable PhysicalLocations + { + get + { + return ResolveArgs.PhysicalLocations; + } + } + /// /// Resets the resolve args. /// diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 0d6bed90b9..6220bc4d51 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -84,7 +84,7 @@ namespace MediaBrowser.Controller.Entities try { - locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + locationsDicionary = PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); } catch (IOException ex) { @@ -116,7 +116,7 @@ namespace MediaBrowser.Controller.Entities try { - locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + locationsDicionary = PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); } catch (IOException ex) { diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 94db048647..02da2fe618 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -1079,7 +1079,7 @@ namespace MediaBrowser.Controller.Entities if (i.LocationType != LocationType.Remote) { - if (i.ResolveArgs.PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)) + if (i.PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)) { return true; } diff --git a/MediaBrowser.Controller/Net/IHttpResultFactory.cs b/MediaBrowser.Controller/Net/IHttpResultFactory.cs index 0614db12e6..b7dff96cd9 100644 --- a/MediaBrowser.Controller/Net/IHttpResultFactory.cs +++ b/MediaBrowser.Controller/Net/IHttpResultFactory.cs @@ -50,7 +50,7 @@ namespace MediaBrowser.Controller.Net /// The factory function that creates the response object. /// The response headers. /// System.Object. - object GetOptimizedResultUsingCache(IRequest requestContext, Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func factoryFn, IDictionary responseHeaders = null) + object GetOptimizedResultUsingCache(IRequest requestContext, Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func factoryFn, IDictionary responseHeaders = null) where T : class; /// @@ -65,7 +65,7 @@ namespace MediaBrowser.Controller.Net /// Type of the content. /// The response headers. /// System.Object. - object GetCachedResult(IRequest requestContext, Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func factoryFn, string contentType, IDictionary responseHeaders = null) + object GetCachedResult(IRequest requestContext, Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func factoryFn, string contentType, IDictionary responseHeaders = null) where T : class; /// @@ -94,5 +94,15 @@ namespace MediaBrowser.Controller.Net /// if set to true [is head request]. /// System.Object. object GetStaticFileResult(IRequest requestContext, string path, FileShare fileShare = FileShare.Read, IDictionary responseHeaders = null, bool isHeadRequest = false); + + /// + /// Gets the optimized serialized result using cache. + /// + /// + /// The request. + /// The result. + /// System.Object. + object GetOptimizedSerializedResultUsingCache(IRequest request, T result) + where T : class; } } diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs index 2d0fed02d1..e4701a1161 100644 --- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs +++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs @@ -1,12 +1,10 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Providers.Manager; @@ -48,9 +46,9 @@ namespace MediaBrowser.Providers.BoxSets return _libraryManager.UpdateItem(item, reason, cancellationToken); } - protected override ItemUpdateType AfterMetadataRefresh(BoxSet item) + protected override ItemUpdateType BeforeSave(BoxSet item) { - var updateType = base.AfterMetadataRefresh(item); + var updateType = base.BeforeSave(item); if (!item.LockedFields.Contains(MetadataFields.OfficialRating)) { diff --git a/MediaBrowser.Providers/CollectionFolderImageProvider.cs b/MediaBrowser.Providers/CollectionFolderImageProvider.cs index 12f13262d1..e4ea36dd12 100644 --- a/MediaBrowser.Providers/CollectionFolderImageProvider.cs +++ b/MediaBrowser.Providers/CollectionFolderImageProvider.cs @@ -31,14 +31,14 @@ namespace MediaBrowser.Providers protected override FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension) { - return item.ResolveArgs.PhysicalLocations + return item.PhysicalLocations .Select(i => GetImageFromLocation(i, filenameWithoutExtension)) .FirstOrDefault(i => i != null); } protected override Guid GetFileSystemStamp(IEnumerable items) { - var files = items.SelectMany(i => i.ResolveArgs.PhysicalLocations) + var files = items.SelectMany(i => i.PhysicalLocations) .Select(i => new DirectoryInfo(i)) .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) .Where(i => diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 349a4de97c..da82dcb3fb 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -100,8 +100,6 @@ namespace MediaBrowser.Providers.Manager refreshResult.SetDateLastMetadataRefresh(DateTime.UtcNow); refreshResult.AddImageProvidersRefreshed(result.Providers); } - - updateType = updateType | AfterMetadataRefresh(itemOfType); } // Next run remote image providers, but only if local image providers didn't throw an exception @@ -120,6 +118,8 @@ namespace MediaBrowser.Providers.Manager } } + updateType = updateType | BeforeSave(itemOfType); + var providersHadChanges = updateType > ItemUpdateType.Unspecified; if (refreshOptions.ForceSave || providersHadChanges) @@ -149,20 +149,21 @@ namespace MediaBrowser.Providers.Manager } /// - /// Afters the metadata refresh. + /// Befores the metadata refresh. /// /// The item. - protected virtual ItemUpdateType AfterMetadataRefresh(TItemType item) + /// ItemUpdateType. + protected virtual ItemUpdateType BeforeMetadataRefresh(TItemType item) { return ItemUpdateType.Unspecified; } /// - /// Befores the metadata refresh. + /// Befores the save. /// /// The item. /// ItemUpdateType. - protected virtual ItemUpdateType BeforeMetadataRefresh(TItemType item) + protected virtual ItemUpdateType BeforeSave(TItemType item) { return ItemUpdateType.Unspecified; } diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 8b9ebdc702..024e44cad2 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -47,9 +47,9 @@ namespace MediaBrowser.Providers.Music return _libraryManager.UpdateItem(item, reason, cancellationToken); } - protected override ItemUpdateType AfterMetadataRefresh(MusicAlbum item) + protected override ItemUpdateType BeforeSave(MusicAlbum item) { - var updateType = base.AfterMetadataRefresh(item); + var updateType = base.BeforeSave(item); var songs = item.RecursiveChildren.OfType private string _seasonZeroDisplayName; + private bool _wizardCompleted; /// /// Records the configuration values. /// @@ -278,6 +279,7 @@ namespace MediaBrowser.Server.Implementations.Library { _seasonZeroDisplayName = configuration.SeasonZeroDisplayName; _itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath; + _wizardCompleted = configuration.IsStartupWizardCompleted; } /// @@ -298,6 +300,7 @@ namespace MediaBrowser.Server.Implementations.Library var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName; var seasonZeroNameChanged = !string.Equals(_seasonZeroDisplayName, newSeasonZeroName, StringComparison.CurrentCulture); + var wizardChanged = config.IsStartupWizardCompleted != _wizardCompleted; RecordConfigurationValues(config); @@ -308,7 +311,7 @@ namespace MediaBrowser.Server.Implementations.Library await UpdateSeasonZeroNames(newSeasonZeroName, CancellationToken.None).ConfigureAwait(false); } - if (seasonZeroNameChanged || ibnPathChanged) + if (seasonZeroNameChanged || ibnPathChanged || wizardChanged) { _taskManager.CancelIfRunningAndQueue(); } @@ -1479,7 +1482,7 @@ namespace MediaBrowser.Server.Implementations.Library try { - return i.ResolveArgs.PhysicalLocations.Contains(item.Path); + return i.PhysicalLocations.Contains(item.Path); } catch (IOException ex) { diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 88a928795a..323a636740 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -250,7 +250,7 @@ namespace MediaBrowser.ServerApplication { await base.RegisterResources(progress).ConfigureAwait(false); - RegisterSingleInstance(new HttpResultFactory(LogManager, FileSystemManager)); + RegisterSingleInstance(new HttpResultFactory(LogManager, FileSystemManager, JsonSerializer)); RegisterSingleInstance(this); RegisterSingleInstance(ApplicationPaths);