use conditional caching on some json responses

This commit is contained in:
Luke Pulverenti 2014-02-03 23:04:19 -05:00
parent 48b9f657a4
commit 351cfef7a7
48 changed files with 221 additions and 143 deletions

View File

@ -59,7 +59,7 @@ namespace MediaBrowser.Api
request, item => item is MusicAlbum, request, item => item is MusicAlbum,
GetAlbumSimilarityScore); GetAlbumSimilarityScore);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -21,7 +21,7 @@ namespace MediaBrowser.Api
/// </summary> /// </summary>
/// <value>The logger.</value> /// <value>The logger.</value>
public ILogger Logger { get; set; } public ILogger Logger { get; set; }
/// <summary> /// <summary>
/// Gets or sets the HTTP result factory. /// Gets or sets the HTTP result factory.
/// </summary> /// </summary>
@ -58,15 +58,26 @@ namespace MediaBrowser.Api
/// <param name="cacheKey">The cache key.</param> /// <param name="cacheKey">The cache key.</param>
/// <param name="lastDateModified">The last date modified.</param> /// <param name="lastDateModified">The last date modified.</param>
/// <param name="cacheDuration">Duration of the cache.</param> /// <param name="cacheDuration">Duration of the cache.</param>
/// <param name="factoryFn">The factory fn.</param> /// <param name="factoryFn">The factory function.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
/// <exception cref="System.ArgumentNullException">cacheKey</exception> protected object ToOptimizedResultUsingCache<T>(Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn)
protected object ToOptimizedResultUsingCache<T>(Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn) where T : class
where T : class
{ {
return ResultFactory.GetOptimizedResultUsingCache(Request, cacheKey, lastDateModified, cacheDuration, factoryFn); return ResultFactory.GetOptimizedResultUsingCache(Request, cacheKey, lastDateModified, cacheDuration, factoryFn);
} }
/// <summary>
/// To the optimized serialized result using cache.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="result">The result.</param>
/// <returns>System.Object.</returns>
protected object ToOptimizedSerializedResultUsingCache<T>(T result)
where T : class
{
return ResultFactory.GetOptimizedSerializedResultUsingCache(Request, result);
}
/// <summary> /// <summary>
/// To the cached result. /// To the cached result.
/// </summary> /// </summary>

View File

@ -99,12 +99,12 @@ namespace MediaBrowser.Api
public object Get(GetDefaultMetadataOptions request) public object Get(GetDefaultMetadataOptions request)
{ {
return ToOptimizedResult(new MetadataOptions()); return ToOptimizedSerializedResultUsingCache(new MetadataOptions());
} }
public object Get(GetMetadataPlugins request) public object Get(GetMetadataPlugins request)
{ {
return ToOptimizedResult(_providerManager.GetAllMetadataPlugins().ToList()); return ToOptimizedSerializedResultUsingCache(_providerManager.GetAllMetadataPlugins().ToList());
} }
} }
} }

View File

@ -215,7 +215,7 @@ namespace MediaBrowser.Api.DefaultTheme
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
return ToOptimizedResult(view); return ToOptimizedSerializedResultUsingCache(view);
} }
public object Get(GetGamesView request) public object Get(GetGamesView request)
@ -268,7 +268,7 @@ namespace MediaBrowser.Api.DefaultTheme
.Take(1) .Take(1)
.ToList(); .ToList();
return ToOptimizedResult(view); return ToOptimizedSerializedResultUsingCache(view);
} }
public object Get(GetTvView request) public object Get(GetTvView request)
@ -394,7 +394,7 @@ namespace MediaBrowser.Api.DefaultTheme
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
return ToOptimizedResult(view); return ToOptimizedSerializedResultUsingCache(view);
} }
public object Get(GetMovieView request) public object Get(GetMovieView request)
@ -569,7 +569,7 @@ namespace MediaBrowser.Api.DefaultTheme
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToList(); .ToList();
return ToOptimizedResult(view); return ToOptimizedSerializedResultUsingCache(view);
} }
private IEnumerable<BaseItem> FilterItemsForBackdropDisplay(IEnumerable<BaseItem> items) private IEnumerable<BaseItem> FilterItemsForBackdropDisplay(IEnumerable<BaseItem> items)

View File

@ -88,7 +88,7 @@ namespace MediaBrowser.Api
var result = _displayPreferencesManager.GetDisplayPreferences(displayPreferencesId, request.UserId, request.Client); var result = _displayPreferencesManager.GetDisplayPreferences(displayPreferencesId, request.UserId, request.Client);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -135,10 +135,10 @@ namespace MediaBrowser.Api
if (path.StartsWith(networkPrefix, StringComparison.OrdinalIgnoreCase) && path.LastIndexOf(UncSeparator) == 1) 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) public object Get(GetNetworkShares request)
@ -147,7 +147,7 @@ namespace MediaBrowser.Api
var shares = GetNetworkShares(path).OrderBy(i => i.Path).ToList(); var shares = GetNetworkShares(path).OrderBy(i => i.Path).ToList();
return ToOptimizedResult(shares); return ToOptimizedSerializedResultUsingCache(shares);
} }
/// <summary> /// <summary>
@ -159,7 +159,7 @@ namespace MediaBrowser.Api
{ {
var result = GetDrives().ToList(); var result = GetDrives().ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -189,7 +189,7 @@ namespace MediaBrowser.Api
.OrderBy(i => i.Path) .OrderBy(i => i.Path)
.ToList(); .ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -113,7 +113,7 @@ namespace MediaBrowser.Api
.Select(i => GetSummary(i, user)) .Select(i => GetSummary(i, user))
.ToList(); .ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
@ -134,7 +134,7 @@ namespace MediaBrowser.Api
}) })
.ToList(); .ToList();
return ToOptimizedResult(lookup); return ToOptimizedSerializedResultUsingCache(lookup);
} }
/// <summary> /// <summary>
@ -182,7 +182,7 @@ namespace MediaBrowser.Api
request, item => item is Game, request, item => item is Game,
SimilarItemsHelper.GetSimiliarityScore); SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }
} }

View File

@ -361,14 +361,14 @@ namespace MediaBrowser.Api.Images
var result = GetItemImageInfos(item); var result = GetItemImageInfos(item);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetItemByNameImageInfos request) public object Get(GetItemByNameImageInfos request)
{ {
var result = GetItemByNameImageInfos(request); var result = GetItemByNameImageInfos(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -176,7 +176,7 @@ namespace MediaBrowser.Api.Images
var result = GetImageProviders(item); var result = GetImageProviders(item);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetItemByNameRemoteImageProviders request) public object Get(GetItemByNameRemoteImageProviders request)
@ -188,7 +188,7 @@ namespace MediaBrowser.Api.Images
var result = GetImageProviders(item); var result = GetImageProviders(item);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
private List<ImageProviderInfo> GetImageProviders(BaseItem item) private List<ImageProviderInfo> GetImageProviders(BaseItem item)
@ -202,7 +202,7 @@ namespace MediaBrowser.Api.Images
var result = GetRemoteImageResult(item, request); var result = GetRemoteImageResult(item, request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetItemByNameRemoteImages request) public object Get(GetItemByNameRemoteImages request)

View File

@ -57,7 +57,7 @@ namespace MediaBrowser.Api
var result = GetInstantMixResult(request, item.Genres); var result = GetInstantMixResult(request, item.Genres);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetInstantMixFromAlbum request) public object Get(GetInstantMixFromAlbum request)
@ -73,7 +73,7 @@ namespace MediaBrowser.Api
var result = GetInstantMixResult(request, genres); var result = GetInstantMixResult(request, genres);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetInstantMixFromMusicGenre request) public object Get(GetInstantMixFromMusicGenre request)
@ -82,7 +82,7 @@ namespace MediaBrowser.Api
var result = GetInstantMixResult(request, new[] { genre.Name }); var result = GetInstantMixResult(request, new[] { genre.Name });
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetInstantMixFromArtist request) public object Get(GetInstantMixFromArtist request)
@ -99,7 +99,7 @@ namespace MediaBrowser.Api
var result = GetInstantMixResult(request, genres); var result = GetInstantMixResult(request, genres);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
private ItemsResult GetInstantMixResult(BaseGetSimilarItems request, IEnumerable<string> genres) private ItemsResult GetInstantMixResult(BaseGetSimilarItems request, IEnumerable<string> genres)

View File

@ -95,7 +95,7 @@ namespace MediaBrowser.Api.Library
StartIndex = request.StartIndex StartIndex = request.StartIndex
}); });
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public void Delete(DeleteOriginalFile request) public void Delete(DeleteOriginalFile request)

View File

@ -77,7 +77,7 @@ namespace MediaBrowser.Api.Library
{ {
try try
{ {
return c.ResolveArgs.PhysicalLocations; return c.PhysicalLocations;
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -90,7 +90,7 @@ namespace MediaBrowser.Api.Library
}) })
.ToList(); .ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -251,7 +251,7 @@ namespace MediaBrowser.Api.Library
{ {
var result = _libraryManager.GetDefaultVirtualFolders().OrderBy(i => i.Name).ToList(); var result = _libraryManager.GetDefaultVirtualFolders().OrderBy(i => i.Name).ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
else else
{ {
@ -259,7 +259,7 @@ namespace MediaBrowser.Api.Library
var result = _libraryManager.GetVirtualFolders(user).OrderBy(i => i.Name).ToList(); var result = _libraryManager.GetVirtualFolders(user).OrderBy(i => i.Name).ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }

View File

@ -284,7 +284,7 @@ namespace MediaBrowser.Api
{ {
var result = GetAncestors(request); var result = GetAncestors(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -337,7 +337,7 @@ namespace MediaBrowser.Api
try try
{ {
return i.LocationType == LocationType.FileSystem && return i.LocationType == LocationType.FileSystem &&
i.ResolveArgs.PhysicalLocations.Contains(item.Path); i.PhysicalLocations.Contains(item.Path);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -360,7 +360,7 @@ namespace MediaBrowser.Api
{ {
var result = GetCriticReviews(request); var result = GetCriticReviews(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -405,7 +405,7 @@ namespace MediaBrowser.Api
UniqueTypes = items.Select(i => i.GetClientTypeName()).Distinct().ToList() UniqueTypes = items.Select(i => i.GetClientTypeName()).Distinct().ToList()
}; };
return ToOptimizedResult(counts); return ToOptimizedSerializedResultUsingCache(counts);
} }
private IEnumerable<T> FilterItems<T>(IEnumerable<T> items, GetItemCounts request, Guid userId) private IEnumerable<T> FilterItems<T>(IEnumerable<T> items, GetItemCounts request, Guid userId)
@ -552,7 +552,7 @@ namespace MediaBrowser.Api
}); });
return ToOptimizedResult(new AllThemeMediaResult return ToOptimizedSerializedResultUsingCache(new AllThemeMediaResult
{ {
ThemeSongsResult = themeSongs, ThemeSongsResult = themeSongs,
ThemeVideosResult = themeVideos, ThemeVideosResult = themeVideos,
@ -570,7 +570,7 @@ namespace MediaBrowser.Api
{ {
var result = GetThemeSongs(request); var result = GetThemeSongs(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
private ThemeMediaResult GetThemeSongs(GetThemeSongs request) private ThemeMediaResult GetThemeSongs(GetThemeSongs request)
@ -638,7 +638,7 @@ namespace MediaBrowser.Api
{ {
var result = GetThemeVideos(request); var result = GetThemeVideos(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public ThemeMediaResult GetThemeVideos(GetThemeVideos request) public ThemeMediaResult GetThemeVideos(GetThemeVideos request)
@ -748,7 +748,7 @@ namespace MediaBrowser.Api
}) })
.ToList(); .ToList();
return ToOptimizedResult(lookup); return ToOptimizedSerializedResultUsingCache(lookup);
} }
public ThemeMediaResult GetSoundtrackSongs(string id, Guid? userId, bool inheritFromParent) public ThemeMediaResult GetSoundtrackSongs(string id, Guid? userId, bool inheritFromParent)

View File

@ -304,7 +304,7 @@ namespace MediaBrowser.Api.LiveTv
{ {
var info = _liveTvManager.GetLiveTvInfo(CancellationToken.None).Result; var info = _liveTvManager.GetLiveTvInfo(CancellationToken.None).Result;
return ToOptimizedResult(info); return ToOptimizedSerializedResultUsingCache(info);
} }
public object Get(GetChannels request) public object Get(GetChannels request)
@ -318,7 +318,7 @@ namespace MediaBrowser.Api.LiveTv
}, CancellationToken.None).Result; }, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetChannel request) public object Get(GetChannel request)
@ -327,7 +327,7 @@ namespace MediaBrowser.Api.LiveTv
var result = _liveTvManager.GetChannel(request.Id, CancellationToken.None, user).Result; var result = _liveTvManager.GetChannel(request.Id, CancellationToken.None, user).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetPrograms request) public object Get(GetPrograms request)
@ -360,7 +360,7 @@ namespace MediaBrowser.Api.LiveTv
var result = _liveTvManager.GetPrograms(query, CancellationToken.None).Result; var result = _liveTvManager.GetPrograms(query, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetRecommendedPrograms request) public object Get(GetRecommendedPrograms request)
@ -375,7 +375,7 @@ namespace MediaBrowser.Api.LiveTv
var result = _liveTvManager.GetRecommendedPrograms(query, CancellationToken.None).Result; var result = _liveTvManager.GetRecommendedPrograms(query, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Post(GetPrograms request) public object Post(GetPrograms request)
@ -398,7 +398,7 @@ namespace MediaBrowser.Api.LiveTv
}, CancellationToken.None).Result; }, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetRecording request) public object Get(GetRecording request)
@ -407,14 +407,14 @@ namespace MediaBrowser.Api.LiveTv
var result = _liveTvManager.GetRecording(request.Id, CancellationToken.None, user).Result; var result = _liveTvManager.GetRecording(request.Id, CancellationToken.None, user).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetTimer request) public object Get(GetTimer request)
{ {
var result = _liveTvManager.GetTimer(request.Id, CancellationToken.None).Result; var result = _liveTvManager.GetTimer(request.Id, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetTimers request) public object Get(GetTimers request)
@ -426,7 +426,7 @@ namespace MediaBrowser.Api.LiveTv
}, CancellationToken.None).Result; }, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public void Delete(DeleteRecording request) public void Delete(DeleteRecording request)
@ -465,14 +465,14 @@ namespace MediaBrowser.Api.LiveTv
}, CancellationToken.None).Result; }, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetSeriesTimer request) public object Get(GetSeriesTimer request)
{ {
var result = _liveTvManager.GetSeriesTimer(request.Id, CancellationToken.None).Result; var result = _liveTvManager.GetSeriesTimer(request.Id, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public void Delete(CancelSeriesTimer request) public void Delete(CancelSeriesTimer request)
@ -499,13 +499,13 @@ namespace MediaBrowser.Api.LiveTv
{ {
var result = _liveTvManager.GetNewTimerDefaults(CancellationToken.None).Result; var result = _liveTvManager.GetNewTimerDefaults(CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
else else
{ {
var result = _liveTvManager.GetNewTimerDefaults(request.ProgramId, CancellationToken.None).Result; 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; var result = _liveTvManager.GetProgram(request.Id, CancellationToken.None, user).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public void Post(CreateSeriesTimer request) public void Post(CreateSeriesTimer request)
@ -544,7 +544,7 @@ namespace MediaBrowser.Api.LiveTv
}, CancellationToken.None).Result; }, CancellationToken.None).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetRecordingGroup request) 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)); 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) public object Get(GetGuideInfo request)

View File

@ -62,7 +62,7 @@ namespace MediaBrowser.Api
{ {
var result = _localization.GetParentalRatings().ToList(); var result = _localization.GetParentalRatings().ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -74,7 +74,7 @@ namespace MediaBrowser.Api
{ {
var result = _localization.GetCountries().ToList(); var result = _localization.GetCountries().ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -86,7 +86,7 @@ namespace MediaBrowser.Api
{ {
var result = _localization.GetCultures().ToList(); var result = _localization.GetCultures().ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }

View File

@ -76,7 +76,7 @@ namespace MediaBrowser.Api
request, item => item is Movie || (item is Trailer && request.IncludeTrailers), request, item => item is Movie || (item is Trailer && request.IncludeTrailers),
SimilarItemsHelper.GetSimiliarityScore); SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }
} }

View File

@ -42,7 +42,7 @@ namespace MediaBrowser.Api
}); });
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }
} }

View File

@ -166,7 +166,7 @@ namespace MediaBrowser.Api
{ {
var result = _appHost.Plugins.OrderBy(p => p.Name).Select(p => p.GetPluginInfo()).ToList(); var result = _appHost.Plugins.OrderBy(p => p.Name).Select(p => p.GetPluginInfo()).ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -199,7 +199,7 @@ namespace MediaBrowser.Api
LegacyKey = _securityManager.LegacyKey LegacyKey = _securityManager.LegacyKey
}; };
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -110,7 +110,7 @@ namespace MediaBrowser.Api
{ {
var result = GetSearchHintsAsync(request).Result; var result = GetSearchHintsAsync(request).Result;
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -69,7 +69,7 @@ namespace MediaBrowser.Api
request, item => item is Movie || item is Trailer, request, item => item is Movie || item is Trailer,
SimilarItemsHelper.GetSimiliarityScore); SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }
} }

View File

@ -183,7 +183,7 @@ namespace MediaBrowser.Api
request, item => item is Series, request, item => item is Series,
SimilarItemsHelper.GetSimiliarityScore); SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -210,7 +210,7 @@ namespace MediaBrowser.Api
Items = returnItems Items = returnItems
}; };
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public IEnumerable<Episode> GetNextUpEpisodes(GetNextUpEpisodes request) public IEnumerable<Episode> GetNextUpEpisodes(GetNextUpEpisodes request)

View File

@ -57,7 +57,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItem(request); var result = GetItem(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -91,7 +91,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetResult(request); var result = GetResult(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -62,7 +62,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItem(request); var result = GetItem(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -96,7 +96,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetResult(request); var result = GetResult(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -268,7 +268,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItems(request); var result = GetItems(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -57,7 +57,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItem(request); var result = GetItem(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -91,7 +91,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetResult(request); var result = GetResult(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -74,7 +74,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItem(request); var result = GetItem(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -108,7 +108,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetResult(request); var result = GetResult(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -62,7 +62,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItem(request); var result = GetItem(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -96,7 +96,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetResult(request); var result = GetResult(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -1,4 +1,5 @@
using MediaBrowser.Controller.Dto; using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
@ -7,6 +8,7 @@ using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Serialization;
using ServiceStack; using ServiceStack;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -411,7 +413,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetAsync(request); var result = GetAsync(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
private List<BaseItemDto> GetAsync(GetSpecialFeatures request) private List<BaseItemDto> GetAsync(GetSpecialFeatures request)
@ -477,7 +479,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetAsync(request); var result = GetAsync(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
private List<BaseItemDto> GetAsync(GetLocalTrailers request) private List<BaseItemDto> GetAsync(GetLocalTrailers request)
@ -521,7 +523,7 @@ namespace MediaBrowser.Api.UserLibrary
var result = _dtoService.GetBaseItemDto(item, fields, user); var result = _dtoService.GetBaseItemDto(item, fields, user);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -540,7 +542,7 @@ namespace MediaBrowser.Api.UserLibrary
var result = _dtoService.GetBaseItemDto(item, fields, user); var result = _dtoService.GetBaseItemDto(item, fields, user);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -570,7 +572,7 @@ namespace MediaBrowser.Api.UserLibrary
TotalRecordCount = dtos.Length TotalRecordCount = dtos.Length
}; };
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -62,7 +62,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetItem(request); var result = GetItem(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -96,7 +96,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var result = GetResult(request); var result = GetResult(request);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -225,7 +225,7 @@ namespace MediaBrowser.Api
.Select(_dtoService.GetUserDto) .Select(_dtoService.GetUserDto)
.ToList(); .ToList();
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>
@ -244,7 +244,7 @@ namespace MediaBrowser.Api
var result = _dtoService.GetUserDto(user); var result = _dtoService.GetUserDto(user);
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
/// <summary> /// <summary>

View File

@ -69,7 +69,7 @@ namespace MediaBrowser.Api
TotalRecordCount = items.Length TotalRecordCount = items.Length
}; };
return ToOptimizedResult(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }
} }

View File

@ -253,6 +253,15 @@ namespace MediaBrowser.Controller.Entities
} }
} }
[IgnoreDataMember]
public IEnumerable<string> PhysicalLocations
{
get
{
return ResolveArgs.PhysicalLocations;
}
}
/// <summary> /// <summary>
/// Resets the resolve args. /// Resets the resolve args.
/// </summary> /// </summary>

View File

@ -84,7 +84,7 @@ namespace MediaBrowser.Controller.Entities
try try
{ {
locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); locationsDicionary = PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
} }
catch (IOException ex) catch (IOException ex)
{ {
@ -116,7 +116,7 @@ namespace MediaBrowser.Controller.Entities
try try
{ {
locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); locationsDicionary = PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
} }
catch (IOException ex) catch (IOException ex)
{ {

View File

@ -1079,7 +1079,7 @@ namespace MediaBrowser.Controller.Entities
if (i.LocationType != LocationType.Remote) if (i.LocationType != LocationType.Remote)
{ {
if (i.ResolveArgs.PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)) if (i.PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase))
{ {
return true; return true;
} }

View File

@ -50,7 +50,7 @@ namespace MediaBrowser.Controller.Net
/// <param name="factoryFn">The factory function that creates the response object.</param> /// <param name="factoryFn">The factory function that creates the response object.</param>
/// <param name="responseHeaders">The response headers.</param> /// <param name="responseHeaders">The response headers.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
object GetOptimizedResultUsingCache<T>(IRequest requestContext, Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, IDictionary<string, string> responseHeaders = null) object GetOptimizedResultUsingCache<T>(IRequest requestContext, Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, IDictionary<string, string> responseHeaders = null)
where T : class; where T : class;
/// <summary> /// <summary>
@ -65,7 +65,7 @@ namespace MediaBrowser.Controller.Net
/// <param name="contentType">Type of the content.</param> /// <param name="contentType">Type of the content.</param>
/// <param name="responseHeaders">The response headers.</param> /// <param name="responseHeaders">The response headers.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
object GetCachedResult<T>(IRequest requestContext, Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, string contentType, IDictionary<string, string> responseHeaders = null) object GetCachedResult<T>(IRequest requestContext, Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, string contentType, IDictionary<string, string> responseHeaders = null)
where T : class; where T : class;
/// <summary> /// <summary>
@ -94,5 +94,15 @@ namespace MediaBrowser.Controller.Net
/// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param> /// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
object GetStaticFileResult(IRequest requestContext, string path, FileShare fileShare = FileShare.Read, IDictionary<string, string> responseHeaders = null, bool isHeadRequest = false); object GetStaticFileResult(IRequest requestContext, string path, FileShare fileShare = FileShare.Read, IDictionary<string, string> responseHeaders = null, bool isHeadRequest = false);
/// <summary>
/// Gets the optimized serialized result using cache.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="request">The request.</param>
/// <param name="result">The result.</param>
/// <returns>System.Object.</returns>
object GetOptimizedSerializedResultUsingCache<T>(IRequest request, T result)
where T : class;
} }
} }

View File

@ -1,12 +1,10 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager; using MediaBrowser.Providers.Manager;
@ -48,9 +46,9 @@ namespace MediaBrowser.Providers.BoxSets
return _libraryManager.UpdateItem(item, reason, cancellationToken); 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)) if (!item.LockedFields.Contains(MetadataFields.OfficialRating))
{ {

View File

@ -31,14 +31,14 @@ namespace MediaBrowser.Providers
protected override FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension) protected override FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension)
{ {
return item.ResolveArgs.PhysicalLocations return item.PhysicalLocations
.Select(i => GetImageFromLocation(i, filenameWithoutExtension)) .Select(i => GetImageFromLocation(i, filenameWithoutExtension))
.FirstOrDefault(i => i != null); .FirstOrDefault(i => i != null);
} }
protected override Guid GetFileSystemStamp(IEnumerable<BaseItem> items) protected override Guid GetFileSystemStamp(IEnumerable<BaseItem> items)
{ {
var files = items.SelectMany(i => i.ResolveArgs.PhysicalLocations) var files = items.SelectMany(i => i.PhysicalLocations)
.Select(i => new DirectoryInfo(i)) .Select(i => new DirectoryInfo(i))
.SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
.Where(i => .Where(i =>

View File

@ -100,8 +100,6 @@ namespace MediaBrowser.Providers.Manager
refreshResult.SetDateLastMetadataRefresh(DateTime.UtcNow); refreshResult.SetDateLastMetadataRefresh(DateTime.UtcNow);
refreshResult.AddImageProvidersRefreshed(result.Providers); refreshResult.AddImageProvidersRefreshed(result.Providers);
} }
updateType = updateType | AfterMetadataRefresh(itemOfType);
} }
// Next run remote image providers, but only if local image providers didn't throw an exception // 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; var providersHadChanges = updateType > ItemUpdateType.Unspecified;
if (refreshOptions.ForceSave || providersHadChanges) if (refreshOptions.ForceSave || providersHadChanges)
@ -148,15 +148,6 @@ namespace MediaBrowser.Providers.Manager
_defaultOptions; _defaultOptions;
} }
/// <summary>
/// Afters the metadata refresh.
/// </summary>
/// <param name="item">The item.</param>
protected virtual ItemUpdateType AfterMetadataRefresh(TItemType item)
{
return ItemUpdateType.Unspecified;
}
/// <summary> /// <summary>
/// Befores the metadata refresh. /// Befores the metadata refresh.
/// </summary> /// </summary>
@ -167,6 +158,16 @@ namespace MediaBrowser.Providers.Manager
return ItemUpdateType.Unspecified; return ItemUpdateType.Unspecified;
} }
/// <summary>
/// Befores the save.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>ItemUpdateType.</returns>
protected virtual ItemUpdateType BeforeSave(TItemType item)
{
return ItemUpdateType.Unspecified;
}
/// <summary> /// <summary>
/// Gets the providers. /// Gets the providers.
/// </summary> /// </summary>

View File

@ -47,9 +47,9 @@ namespace MediaBrowser.Providers.Music
return _libraryManager.UpdateItem(item, reason, cancellationToken); 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<Audio>().ToList(); var songs = item.RecursiveChildren.OfType<Audio>().ToList();

View File

@ -42,9 +42,9 @@ namespace MediaBrowser.Providers.Music
return _libraryManager.UpdateItem(item, reason, cancellationToken); return _libraryManager.UpdateItem(item, reason, cancellationToken);
} }
protected override ItemUpdateType AfterMetadataRefresh(MusicArtist item) protected override ItemUpdateType BeforeSave(MusicArtist item)
{ {
var updateType = base.AfterMetadataRefresh(item); var updateType = base.BeforeSave(item);
if (!item.IsAccessedByName && !item.LockedFields.Contains(MetadataFields.Genres)) if (!item.IsAccessedByName && !item.LockedFields.Contains(MetadataFields.Genres))
{ {

View File

@ -41,9 +41,9 @@ namespace MediaBrowser.Providers.TV
return _libraryManager.UpdateItem(item, reason, cancellationToken); return _libraryManager.UpdateItem(item, reason, cancellationToken);
} }
protected override ItemUpdateType AfterMetadataRefresh(Series item) protected override ItemUpdateType BeforeSave(Series item)
{ {
var updateType = base.AfterMetadataRefresh(item); var updateType = base.BeforeSave(item);
var episodes = item.RecursiveChildren var episodes = item.RecursiveChildren
.OfType<Episode>() .OfType<Episode>()

View File

@ -142,24 +142,59 @@ namespace MediaBrowser.Providers.TV
await ExtractEpisodes(seriesDataPath, Path.Combine(seriesDataPath, preferredMetadataLanguage + ".xml"), lastTvDbUpdateTime).ConfigureAwait(false); await ExtractEpisodes(seriesDataPath, Path.Combine(seriesDataPath, preferredMetadataLanguage + ".xml"), lastTvDbUpdateTime).ConfigureAwait(false);
} }
internal async Task EnsureSeriesInfo(string seriesId, string preferredMetadataLanguage, CancellationToken cancellationToken) private readonly Task _cachedTask = Task.FromResult(true);
internal Task EnsureSeriesInfo(string seriesId, string preferredMetadataLanguage, CancellationToken cancellationToken)
{ {
var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesId); var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesId);
Directory.CreateDirectory(seriesDataPath); Directory.CreateDirectory(seriesDataPath);
var files = Directory.EnumerateFiles(seriesDataPath, "*.xml", SearchOption.TopDirectoryOnly) var files = new DirectoryInfo(seriesDataPath).EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly)
.Select(Path.GetFileName)
.ToList(); .ToList();
var seriesXmlFilename = preferredMetadataLanguage + ".xml"; var seriesXmlFilename = preferredMetadataLanguage + ".xml";
var download = false;
var automaticUpdatesEnabled = _config.Configuration.EnableTvDbUpdates;
var seriesFile = files.FirstOrDefault(i => string.Equals(seriesXmlFilename, i.Name, StringComparison.OrdinalIgnoreCase));
if (seriesFile == null || !seriesFile.Exists)
{
// No need to check age if automatic updates are enabled
if (!automaticUpdatesEnabled && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(seriesFile)).TotalDays > 7)
{
download = true;
}
}
var actorsXml = files.FirstOrDefault(i => string.Equals("actors.xml", i.Name, StringComparison.OrdinalIgnoreCase));
if (actorsXml == null || !actorsXml.Exists)
{
// No need to check age if automatic updates are enabled
if (!automaticUpdatesEnabled && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(actorsXml)).TotalDays > 7)
{
download = true;
}
}
var bannersXml = files.FirstOrDefault(i => string.Equals("banners.xml", i.Name, StringComparison.OrdinalIgnoreCase));
if (bannersXml == null || !bannersXml.Exists)
{
// No need to check age if automatic updates are enabled
if (!automaticUpdatesEnabled && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(bannersXml)).TotalDays > 7)
{
download = true;
}
}
// Only download if not already there // Only download if not already there
// The prescan task will take care of updates so we don't need to re-download here // The prescan task will take care of updates so we don't need to re-download here
if (!files.Contains("banners.xml", StringComparer.OrdinalIgnoreCase) || !files.Contains("actors.xml", StringComparer.OrdinalIgnoreCase) || !files.Contains(seriesXmlFilename, StringComparer.OrdinalIgnoreCase)) if (download)
{ {
await DownloadSeriesZip(seriesId, seriesDataPath, null, preferredMetadataLanguage, cancellationToken).ConfigureAwait(false); return DownloadSeriesZip(seriesId, seriesDataPath, null, preferredMetadataLanguage, cancellationToken);
} }
return _cachedTask;
} }
/// <summary> /// <summary>

View File

@ -279,7 +279,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
try try
{ {
return i.LocationType == LocationType.FileSystem && return i.LocationType == LocationType.FileSystem &&
i.ResolveArgs.PhysicalLocations.Contains(item.Path); i.PhysicalLocations.Contains(item.Path);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -1,9 +1,10 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using ServiceStack;
using ServiceStack.Web;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
@ -11,8 +12,6 @@ using System.IO;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ServiceStack;
using ServiceStack.Web;
using MimeTypes = MediaBrowser.Common.Net.MimeTypes; using MimeTypes = MediaBrowser.Common.Net.MimeTypes;
namespace MediaBrowser.Server.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
@ -27,14 +26,18 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// </summary> /// </summary>
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
private readonly IJsonSerializer _jsonSerializer;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="HttpResultFactory"/> class. /// Initializes a new instance of the <see cref="HttpResultFactory" /> class.
/// </summary> /// </summary>
/// <param name="logManager">The log manager.</param> /// <param name="logManager">The log manager.</param>
public HttpResultFactory(ILogManager logManager, IFileSystem fileSystem) /// <param name="fileSystem">The file system.</param>
/// <param name="jsonSerializer">The json serializer.</param>
public HttpResultFactory(ILogManager logManager, IFileSystem fileSystem, IJsonSerializer jsonSerializer)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
_jsonSerializer = jsonSerializer;
_logger = logManager.GetLogger("HttpResultFactory"); _logger = logManager.GetLogger("HttpResultFactory");
} }
@ -151,12 +154,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// <param name="factoryFn">The factory fn.</param> /// <param name="factoryFn">The factory fn.</param>
/// <param name="responseHeaders">The response headers.</param> /// <param name="responseHeaders">The response headers.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
/// <exception cref="System.ArgumentNullException"> /// <exception cref="System.ArgumentNullException">cacheKey
/// cacheKey
/// or /// or
/// factoryFn /// factoryFn</exception>
/// </exception> public object GetOptimizedResultUsingCache<T>(IRequest requestContext, Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, IDictionary<string, string> responseHeaders = null)
public object GetOptimizedResultUsingCache<T>(IRequest requestContext, Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, IDictionary<string, string> responseHeaders = null)
where T : class where T : class
{ {
if (cacheKey == Guid.Empty) if (cacheKey == Guid.Empty)
@ -199,7 +200,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// <param name="responseHeaders">The response headers.</param> /// <param name="responseHeaders">The response headers.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
/// <exception cref="System.ArgumentNullException">cacheKey</exception> /// <exception cref="System.ArgumentNullException">cacheKey</exception>
public object GetCachedResult<T>(IRequest requestContext, Guid cacheKey, DateTime lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, string contentType, IDictionary<string, string> responseHeaders = null) public object GetCachedResult<T>(IRequest requestContext, Guid cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration, Func<T> factoryFn, string contentType, IDictionary<string, string> responseHeaders = null)
where T : class where T : class
{ {
if (cacheKey == Guid.Empty) if (cacheKey == Guid.Empty)
@ -661,5 +662,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
throw error; throw error;
} }
public object GetOptimizedSerializedResultUsingCache<T>(IRequest request, T result)
where T : class
{
var json = _jsonSerializer.SerializeToString(result);
var cacheKey = json.GetMD5();
return GetOptimizedResultUsingCache(request, cacheKey, null, null, () => result);
}
} }
} }

View File

@ -166,8 +166,7 @@ namespace MediaBrowser.Server.Implementations.IO
{ {
try try
{ {
// Accessing ResolveArgs could involve file system access return f.PhysicalLocations;
return f.ResolveArgs.PhysicalLocations;
} }
catch (IOException) catch (IOException)
{ {

View File

@ -270,6 +270,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// </summary> /// </summary>
private string _seasonZeroDisplayName; private string _seasonZeroDisplayName;
private bool _wizardCompleted;
/// <summary> /// <summary>
/// Records the configuration values. /// Records the configuration values.
/// </summary> /// </summary>
@ -278,6 +279,7 @@ namespace MediaBrowser.Server.Implementations.Library
{ {
_seasonZeroDisplayName = configuration.SeasonZeroDisplayName; _seasonZeroDisplayName = configuration.SeasonZeroDisplayName;
_itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath; _itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath;
_wizardCompleted = configuration.IsStartupWizardCompleted;
} }
/// <summary> /// <summary>
@ -298,6 +300,7 @@ namespace MediaBrowser.Server.Implementations.Library
var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName; var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName;
var seasonZeroNameChanged = !string.Equals(_seasonZeroDisplayName, newSeasonZeroName, StringComparison.CurrentCulture); var seasonZeroNameChanged = !string.Equals(_seasonZeroDisplayName, newSeasonZeroName, StringComparison.CurrentCulture);
var wizardChanged = config.IsStartupWizardCompleted != _wizardCompleted;
RecordConfigurationValues(config); RecordConfigurationValues(config);
@ -308,7 +311,7 @@ namespace MediaBrowser.Server.Implementations.Library
await UpdateSeasonZeroNames(newSeasonZeroName, CancellationToken.None).ConfigureAwait(false); await UpdateSeasonZeroNames(newSeasonZeroName, CancellationToken.None).ConfigureAwait(false);
} }
if (seasonZeroNameChanged || ibnPathChanged) if (seasonZeroNameChanged || ibnPathChanged || wizardChanged)
{ {
_taskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); _taskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
} }
@ -1479,7 +1482,7 @@ namespace MediaBrowser.Server.Implementations.Library
try try
{ {
return i.ResolveArgs.PhysicalLocations.Contains(item.Path); return i.PhysicalLocations.Contains(item.Path);
} }
catch (IOException ex) catch (IOException ex)
{ {

View File

@ -250,7 +250,7 @@ namespace MediaBrowser.ServerApplication
{ {
await base.RegisterResources(progress).ConfigureAwait(false); await base.RegisterResources(progress).ConfigureAwait(false);
RegisterSingleInstance<IHttpResultFactory>(new HttpResultFactory(LogManager, FileSystemManager)); RegisterSingleInstance<IHttpResultFactory>(new HttpResultFactory(LogManager, FileSystemManager, JsonSerializer));
RegisterSingleInstance<IServerApplicationHost>(this); RegisterSingleInstance<IServerApplicationHost>(this);
RegisterSingleInstance<IServerApplicationPaths>(ApplicationPaths); RegisterSingleInstance<IServerApplicationPaths>(ApplicationPaths);