From b7a8b92c0011c5411a691d522a414480c4c5e34c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 19 Sep 2013 20:53:18 -0400 Subject: [PATCH] reduce system info refreshing from dashboard --- .../DefaultTheme/DefaultThemeService.cs | 34 +++++++------- MediaBrowser.Api/DefaultTheme/Models.cs | 35 +++++++------- MediaBrowser.Api/Images/ImageRequest.cs | 3 +- MediaBrowser.Api/InstantMixService.cs | 6 +-- MediaBrowser.Api/LibraryService.cs | 16 +++---- MediaBrowser.Api/SearchService.cs | 4 +- MediaBrowser.Api/SimilarItemsHelper.cs | 13 +++-- MediaBrowser.Api/TvShowsService.cs | 18 ++++--- .../UserLibrary/BaseItemsByNameService.cs | 8 ++-- MediaBrowser.Api/UserLibrary/ItemsService.cs | 12 ++--- .../UserLibrary/UserLibraryService.cs | 10 ++-- .../BaseApplicationHost.cs | 4 +- .../HttpClientManager/HttpClientManager.cs | 2 +- .../ScheduledTasks/ScheduledTaskHelpers.cs | 2 +- .../Drawing/ImageProcessingOptions.cs | 2 +- .../Entities/CollectionFolder.cs | 8 +++- MediaBrowser.Controller/Entities/Folder.cs | 7 +-- MediaBrowser.Model/Drawing/ImageOverlay.cs | 4 -- MediaBrowser.Model/Dto/ImageOptions.cs | 3 +- MediaBrowser.Model/System/SystemInfo.cs | 13 ++--- MediaBrowser.Model/Tasks/TaskInfo.cs | 5 +- .../Movies/FanArtMovieProvider.cs | 4 +- .../Music/FanArtArtistProvider.cs | 4 +- MediaBrowser.Providers/TV/FanArtTVProvider.cs | 4 +- .../TV/RemoteSeriesProvider.cs | 14 +++--- .../Drawing/ImageProcessor.cs | 47 +++++++++++++------ .../Library/LuceneSearchEngine.cs | 10 ++-- .../Library/Validators/ArtistsValidator.cs | 20 ++++---- .../Library/Validators/PeoplePostScanTask.cs | 4 +- .../ApplicationHost.cs | 12 ++--- .../Api/DashboardInfo.cs | 5 +- .../Api/DashboardService.cs | 6 +-- 32 files changed, 180 insertions(+), 159 deletions(-) diff --git a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs index 736710c546..eb4ddc9cda 100644 --- a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs +++ b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs @@ -107,7 +107,7 @@ namespace MediaBrowser.Api.DefaultTheme .Take(50) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); - view.SpotlightItems = dtos.ToArray(); + view.SpotlightItems = dtos.ToList(); return view; } @@ -139,7 +139,7 @@ namespace MediaBrowser.Api.DefaultTheme .Take(50) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); - view.SpotlightItems = dtos.ToArray(); + view.SpotlightItems = dtos.ToList(); return view; } @@ -178,7 +178,7 @@ namespace MediaBrowser.Api.DefaultTheme .AsParallel() .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); - view.SpotlightItems = dtos.ToArray(); + view.SpotlightItems = dtos.ToList(); view.ShowsItems = series .Where(i => i.BackdropImagePaths.Count > 0) @@ -186,7 +186,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); var romanceGenres = request.RomanceGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); var comedyGenres = request.ComedyGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); @@ -197,7 +197,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.ComedyItems = seriesWithBackdrops .Where(i => i.Genres.Any(comedyGenres.ContainsKey)) @@ -205,7 +205,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.ActorItems = GetActors(series); @@ -252,14 +252,14 @@ namespace MediaBrowser.Api.DefaultTheme .Take(50) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); - view.SpotlightItems = dtos.ToArray(); + view.SpotlightItems = dtos.ToList(); view.MovieItems = moviesWithBackdrops .OrderBy(i => Guid.NewGuid()) .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.TrailerItems = items .OfType() @@ -268,7 +268,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Primary)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.BoxSetItems = items .OfType() @@ -277,7 +277,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.ThreeDItems = moviesWithBackdrops .Where(i => i.Is3D) @@ -285,7 +285,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); var romanceGenres = request.RomanceGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); var comedyGenres = request.ComedyGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); @@ -296,7 +296,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.ComedyItems = moviesWithBackdrops .Where(i => i.Genres.Any(comedyGenres.ContainsKey)) @@ -304,7 +304,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.HDItems = hdMovies .Where(i => i.BackdropImagePaths.Count > 0) @@ -312,7 +312,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.FamilyMovies = familyMovies .Where(i => i.BackdropImagePaths.Count > 0) @@ -320,7 +320,7 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => GetItemStub(i, ImageType.Backdrop)) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); view.PeopleItems = GetActors(items); @@ -362,7 +362,7 @@ namespace MediaBrowser.Api.DefaultTheme } } - private ItemStub[] GetActors(IEnumerable mediaItems) + private List GetActors(IEnumerable mediaItems) { var actors = mediaItems.SelectMany(i => i.People) .Select(i => i.Name) @@ -390,7 +390,7 @@ namespace MediaBrowser.Api.DefaultTheme }) .Where(i => i != null) .Take(3) - .ToArray(); + .ToList(); } private ItemStub GetItemStub(BaseItem item, ImageType imageType) diff --git a/MediaBrowser.Api/DefaultTheme/Models.cs b/MediaBrowser.Api/DefaultTheme/Models.cs index a25bb4bb12..12fde353bf 100644 --- a/MediaBrowser.Api/DefaultTheme/Models.cs +++ b/MediaBrowser.Api/DefaultTheme/Models.cs @@ -1,6 +1,7 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using System; +using System.Collections.Generic; namespace MediaBrowser.Api.DefaultTheme { @@ -14,19 +15,19 @@ namespace MediaBrowser.Api.DefaultTheme public class MoviesView { - public BaseItemDto[] SpotlightItems { get; set; } - public ItemStub[] MovieItems { get; set; } - public ItemStub[] PeopleItems { get; set; } + public List SpotlightItems { get; set; } + public List MovieItems { get; set; } + public List PeopleItems { get; set; } - public ItemStub[] BoxSetItems { get; set; } - public ItemStub[] TrailerItems { get; set; } - public ItemStub[] HDItems { get; set; } - public ItemStub[] ThreeDItems { get; set; } + public List BoxSetItems { get; set; } + public List TrailerItems { get; set; } + public List HDItems { get; set; } + public List ThreeDItems { get; set; } - public ItemStub[] FamilyMovies { get; set; } + public List FamilyMovies { get; set; } - public ItemStub[] RomanceItems { get; set; } - public ItemStub[] ComedyItems { get; set; } + public List RomanceItems { get; set; } + public List ComedyItems { get; set; } public double FamilyMoviePercentage { get; set; } @@ -35,21 +36,21 @@ namespace MediaBrowser.Api.DefaultTheme public class TvView { - public BaseItemDto[] SpotlightItems { get; set; } - public ItemStub[] ShowsItems { get; set; } - public ItemStub[] ActorItems { get; set; } + public List SpotlightItems { get; set; } + public List ShowsItems { get; set; } + public List ActorItems { get; set; } - public ItemStub[] RomanceItems { get; set; } - public ItemStub[] ComedyItems { get; set; } + public List RomanceItems { get; set; } + public List ComedyItems { get; set; } } public class GamesView { - public BaseItemDto[] SpotlightItems { get; set; } + public List SpotlightItems { get; set; } } public class HomeView { - public BaseItemDto[] SpotlightItems { get; set; } + public List SpotlightItems { get; set; } } } diff --git a/MediaBrowser.Api/Images/ImageRequest.cs b/MediaBrowser.Api/Images/ImageRequest.cs index fcb731f593..294b7ae960 100644 --- a/MediaBrowser.Api/Images/ImageRequest.cs +++ b/MediaBrowser.Api/Images/ImageRequest.cs @@ -57,14 +57,13 @@ namespace MediaBrowser.Api.Images public ImageOutputFormat Format { get; set; } [ApiMember(Name = "Indicator", Description = "Determines what overlay to render, if any. none, watched.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] - public ImageOverlay Indicator { get; set; } + public ImageOverlay? Indicator { get; set; } public ImageRequest() { EnableImageEnhancers = true; Format = ImageOutputFormat.Original; - Indicator = ImageOverlay.None; } } diff --git a/MediaBrowser.Api/InstantMixService.cs b/MediaBrowser.Api/InstantMixService.cs index baea2bc781..5a8c5a985c 100644 --- a/MediaBrowser.Api/InstantMixService.cs +++ b/MediaBrowser.Api/InstantMixService.cs @@ -124,14 +124,14 @@ namespace MediaBrowser.Api .Select(i => i.Item1) .Take(limit) .OrderBy(i => Guid.NewGuid()) - .ToArray(); + .ToList(); var result = new ItemsResult { - TotalRecordCount = items.Length + TotalRecordCount = items.Count }; - var dtos = items.Take(request.Limit ?? items.Length) + var dtos = items.Take(request.Limit ?? items.Count) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); result.Items = dtos.ToArray(); diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index 68a2258b80..83e35cd413 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -235,7 +235,7 @@ namespace MediaBrowser.Api /// /// The request. /// Task{BaseItemDto[]}. - public BaseItemDto[] GetAncestors(GetAncestors request) + public List GetAncestors(GetAncestors request) { var item = _dtoService.GetItemByDtoId(request.Id); @@ -267,7 +267,7 @@ namespace MediaBrowser.Api parent = parent.Parent; } - return baseItemDtos.ToArray(); + return baseItemDtos.ToList(); } private BaseItem TranslateParentItem(BaseItem item, User user) @@ -463,7 +463,7 @@ namespace MediaBrowser.Api Id = request.Id, UserId = request.UserId - }).Result; + }); var themeVideos = GetThemeVideos(new GetThemeVideos { @@ -471,7 +471,7 @@ namespace MediaBrowser.Api Id = request.Id, UserId = request.UserId - }).Result; + }); return ToOptimizedResult(new AllThemeMediaResult { @@ -487,12 +487,12 @@ namespace MediaBrowser.Api /// System.Object. public object Get(GetThemeSongs request) { - var result = GetThemeSongs(request).Result; + var result = GetThemeSongs(request); return ToOptimizedResult(result); } - private async Task GetThemeSongs(GetThemeSongs request) + private ThemeMediaResult GetThemeSongs(GetThemeSongs request) { var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; @@ -533,12 +533,12 @@ namespace MediaBrowser.Api /// System.Object. public object Get(GetThemeVideos request) { - var result = GetThemeVideos(request).Result; + var result = GetThemeVideos(request); return ToOptimizedResult(result); } - public async Task GetThemeVideos(GetThemeVideos request) + public ThemeMediaResult GetThemeVideos(GetThemeVideos request) { var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index 78c299fbb2..ba669002eb 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -118,7 +118,7 @@ namespace MediaBrowser.Api var results = await _searchEngine.GetSearchHints(inputItems, request.SearchTerm).ConfigureAwait(false); - var searchResultArray = results.ToArray(); + var searchResultArray = results.ToList(); IEnumerable returnResults = searchResultArray; @@ -134,7 +134,7 @@ namespace MediaBrowser.Api return new SearchHintResult { - TotalRecordCount = searchResultArray.Length, + TotalRecordCount = searchResultArray.Count, SearchHints = returnResults.Select(GetSearchHintResult).ToArray() }; diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs index f884a5f1d7..4103eff35d 100644 --- a/MediaBrowser.Api/SimilarItemsHelper.cs +++ b/MediaBrowser.Api/SimilarItemsHelper.cs @@ -108,13 +108,20 @@ namespace MediaBrowser.Api : user.RootFolder.GetRecursiveChildren(user); var items = GetSimilaritems(item, inputItems, includeInSearch, getSimilarityScore) - .ToArray(); + .ToList(); + + IEnumerable returnItems = items; + + if (request.Limit.HasValue) + { + returnItems = returnItems.Take(request.Limit.Value); + } var result = new ItemsResult { - Items = items.Take(request.Limit ?? items.Length).Select(i => dtoService.GetBaseItemDto(i, fields, user)).ToArray(), + Items = returnItems.Select(i => dtoService.GetBaseItemDto(i, fields, user)).ToArray(), - TotalRecordCount = items.Length + TotalRecordCount = items.Count }; return result; diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index e7e8e71c3f..e62959bee3 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -3,13 +3,11 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; -using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; namespace MediaBrowser.Api { @@ -144,7 +142,7 @@ namespace MediaBrowser.Api /// System.Object. public object Get(GetNextUpEpisodes request) { - var result = GetNextUpEpisodes(request).Result; + var result = GetNextUpEpisodes(request); return ToOptimizedResult(result); } @@ -154,18 +152,18 @@ namespace MediaBrowser.Api /// /// The request. /// Task{ItemsResult}. - private async Task GetNextUpEpisodes(GetNextUpEpisodes request) + private ItemsResult GetNextUpEpisodes(GetNextUpEpisodes request) { var user = _userManager.GetUserById(request.UserId); - var itemsArray = user.RootFolder + var itemsList = user.RootFolder .GetRecursiveChildren(user) .OfType() .AsParallel() .Select(i => GetNextUp(i, user)) - .ToArray(); + .ToList(); - itemsArray = itemsArray + itemsList = itemsList .Where(i => i.Item1 != null) .OrderByDescending(i => { @@ -185,9 +183,9 @@ namespace MediaBrowser.Api return 0; }) .ThenByDescending(i => i.Item1.PremiereDate ?? DateTime.MinValue) - .ToArray(); + .ToList(); - var pagedItems = ApplyPaging(request, itemsArray.Select(i => i.Item1)); + var pagedItems = ApplyPaging(request, itemsList.Select(i => i.Item1)); var fields = request.GetItemFields().ToList(); @@ -195,7 +193,7 @@ namespace MediaBrowser.Api return new ItemsResult { - TotalRecordCount = itemsArray.Length, + TotalRecordCount = itemsList.Count, Items = returnItems }; } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 734278924f..4b4d08b09b 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -96,13 +96,13 @@ namespace MediaBrowser.Api.UserLibrary filteredItems = ItemsService.ApplySortOrder(request, filteredItems, user, LibraryManager).Cast(); - var ibnItemsArray = filteredItems.ToArray(); + var ibnItemsArray = filteredItems.ToList(); IEnumerable ibnItems = ibnItemsArray; var result = new ItemsResult { - TotalRecordCount = ibnItemsArray.Length + TotalRecordCount = ibnItemsArray.Count }; if (request.StartIndex.HasValue || request.Limit.HasValue) @@ -142,8 +142,8 @@ namespace MediaBrowser.Api.UserLibrary items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.Name, StringComparison.CurrentCultureIgnoreCase) < 1); } - var imageTypes = request.GetImageTypes().ToArray(); - if (imageTypes.Length > 0) + var imageTypes = request.GetImageTypes().ToList(); + if (imageTypes.Count > 0) { items = items.Where(item => imageTypes.Any(imageType => ItemsService.HasImage(item, imageType))); } diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 5b07a7bd7d..65ece13acb 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -254,7 +254,7 @@ namespace MediaBrowser.Api.UserLibrary items = ApplySortOrder(request, items, user, _libraryManager); - var itemsArray = items.ToArray(); + var itemsArray = items.ToList(); var pagedItems = ApplyPaging(request, itemsArray); @@ -264,7 +264,7 @@ namespace MediaBrowser.Api.UserLibrary return new ItemsResult { - TotalRecordCount = itemsArray.Length, + TotalRecordCount = itemsArray.Count, Items = returnItems }; } @@ -307,9 +307,9 @@ namespace MediaBrowser.Api.UserLibrary /// IEnumerable{BaseItem}. internal static IEnumerable ApplySortOrder(BaseItemsRequest request, IEnumerable items, User user, ILibraryManager libraryManager) { - var orderBy = request.GetOrderBy().ToArray(); + var orderBy = request.GetOrderBy().ToList(); - return orderBy.Length == 0 ? items : libraryManager.Sort(items, user, orderBy, request.SortOrder ?? SortOrder.Ascending); + return orderBy.Count == 0 ? items : libraryManager.Sort(items, user, orderBy, request.SortOrder ?? SortOrder.Ascending); } /// @@ -603,8 +603,8 @@ namespace MediaBrowser.Api.UserLibrary items = items.Where(i => !string.IsNullOrEmpty(i.MediaType) && types.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase)); } - var imageTypes = request.GetImageTypes().ToArray(); - if (imageTypes.Length > 0) + var imageTypes = request.GetImageTypes().ToList(); + if (imageTypes.Count > 0) { items = items.Where(item => imageTypes.Any(imageType => HasImage(item, imageType))); } diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 392fffc794..f4e9739a1d 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -398,7 +398,7 @@ namespace MediaBrowser.Api.UserLibrary return ToOptimizedResult(result); } - private BaseItemDto[] GetAsync(GetSpecialFeatures request) + private List GetAsync(GetSpecialFeatures request) { var user = _userManager.GetUserById(request.UserId); @@ -420,7 +420,7 @@ namespace MediaBrowser.Api.UserLibrary .OrderBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, fields, user, movie1)); - return dtos.ToArray(); + return dtos.ToList(); } var series = item as Series; @@ -448,7 +448,7 @@ namespace MediaBrowser.Api.UserLibrary .ThenBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); - return dtos.ToArray(); + return dtos.ToList(); } throw new ArgumentException("The item does not support special features"); @@ -466,7 +466,7 @@ namespace MediaBrowser.Api.UserLibrary return ToOptimizedResult(result); } - private BaseItemDto[] GetAsync(GetLocalTrailers request) + private List GetAsync(GetLocalTrailers request) { var user = _userManager.GetUserById(request.UserId); @@ -480,7 +480,7 @@ namespace MediaBrowser.Api.UserLibrary .OrderBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); - return dtos.ToArray(); + return dtos.ToList(); } /// diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index bb8b7d80e5..bae2f9f07a 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -238,7 +238,7 @@ namespace MediaBrowser.Common.Implementations { FailedAssemblies.Clear(); - var assemblies = GetComposablePartAssemblies().ToArray(); + var assemblies = GetComposablePartAssemblies().ToList(); foreach (var assembly in assemblies) { @@ -431,7 +431,7 @@ namespace MediaBrowser.Common.Implementations /// IEnumerable{``0}. public IEnumerable GetExports(bool manageLiftime = true) { - var parts = GetExportTypes().Select(CreateInstance).Cast().ToArray(); + var parts = GetExportTypes().Select(CreateInstance).Cast().ToList(); if (manageLiftime) { diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index cd26d601de..550fe9593f 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -470,7 +470,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager { var message = new HttpRequestMessage(HttpMethod.Get, options.Url); - foreach (var pair in options.RequestHeaders.ToArray()) + foreach (var pair in options.RequestHeaders.ToList()) { message.Headers.Add(pair.Key, pair.Value); } diff --git a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs index ebfc94591e..f316509869 100644 --- a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs +++ b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs @@ -23,7 +23,7 @@ namespace MediaBrowser.Common.ScheduledTasks State = task.State, Id = task.Id, LastExecutionResult = task.LastExecutionResult, - Triggers = task.Triggers.Select(GetTriggerInfo).ToArray(), + Triggers = task.Triggers.Select(GetTriggerInfo).ToList(), Description = task.Description, Category = task.Category }; diff --git a/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs b/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs index b639d0b9c5..3c2e6ab375 100644 --- a/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs +++ b/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs @@ -35,6 +35,6 @@ namespace MediaBrowser.Controller.Drawing public ImageOutputFormat OutputFormat { get; set; } - public ImageOverlay Indicator { get; set; } + public ImageOverlay? Indicator { get; set; } } } diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index bc50ce6182..f032d9318a 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -65,6 +65,8 @@ namespace MediaBrowser.Controller.Entities IndexCache.Clear(); } + ResetDynamicChildren(); + return NullTaskResult; } @@ -99,7 +101,8 @@ namespace MediaBrowser.Controller.Entities return LibraryManager.RootFolder.Children .OfType() .Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path)) - .SelectMany(c => c.LinkedChildren).ToList(); + .SelectMany(c => c.LinkedChildren) + .ToList(); } private IEnumerable _actualChildren; @@ -131,7 +134,8 @@ namespace MediaBrowser.Controller.Entities LibraryManager.RootFolder.Children .OfType() .Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path)) - .SelectMany(c => c.Children); + .SelectMany(c => c.Children) + .ToList(); } public void ResetDynamicChildren() diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index fba8732512..855bbb2058 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -99,7 +99,7 @@ namespace MediaBrowser.Controller.Entities item.DateModified = DateTime.UtcNow; } - _children.Add(item); + AddChildrenInternal(new[] { item }); await LibraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); @@ -728,10 +728,7 @@ namespace MediaBrowser.Controller.Entities if (actualRemovals.Count > 0) { - lock (ChildrenSyncLock) - { - _children = new ConcurrentBag(_children.Except(actualRemovals)); - } + RemoveChildrenInternal(actualRemovals); } await LibraryManager.CreateItems(newItems, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Model/Drawing/ImageOverlay.cs b/MediaBrowser.Model/Drawing/ImageOverlay.cs index 9b6400f1cc..e5c7e0fb78 100644 --- a/MediaBrowser.Model/Drawing/ImageOverlay.cs +++ b/MediaBrowser.Model/Drawing/ImageOverlay.cs @@ -6,10 +6,6 @@ namespace MediaBrowser.Model.Drawing /// public enum ImageOverlay { - /// - /// The none - /// - None, /// /// The watched /// diff --git a/MediaBrowser.Model/Dto/ImageOptions.cs b/MediaBrowser.Model/Dto/ImageOptions.cs index 4276561865..c5c89b0b23 100644 --- a/MediaBrowser.Model/Dto/ImageOptions.cs +++ b/MediaBrowser.Model/Dto/ImageOptions.cs @@ -72,14 +72,13 @@ namespace MediaBrowser.Model.Dto public ImageOutputFormat Format { get; set; } - public ImageOverlay Indicator { get; set; } + public ImageOverlay? Indicator { get; set; } public ImageOptions() { EnableImageEnhancers = true; Format = ImageOutputFormat.Original; - Indicator = ImageOverlay.None; } } } diff --git a/MediaBrowser.Model/System/SystemInfo.cs b/MediaBrowser.Model/System/SystemInfo.cs index 959ec44c8b..f77856c6e4 100644 --- a/MediaBrowser.Model/System/SystemInfo.cs +++ b/MediaBrowser.Model/System/SystemInfo.cs @@ -1,4 +1,5 @@ using MediaBrowser.Model.Updates; +using System.Collections.Generic; namespace MediaBrowser.Model.System { @@ -35,7 +36,7 @@ namespace MediaBrowser.Model.System /// Gets or sets the in progress installations. /// /// The in progress installations. - public InstallationInfo[] InProgressInstallations { get; set; } + public List InProgressInstallations { get; set; } /// /// Gets or sets the web socket port number. @@ -47,7 +48,7 @@ namespace MediaBrowser.Model.System /// Gets or sets the completed installations. /// /// The completed installations. - public InstallationInfo[] CompletedInstallations { get; set; } + public List CompletedInstallations { get; set; } /// /// Gets or sets a value indicating whether [supports native web socket]. @@ -59,7 +60,7 @@ namespace MediaBrowser.Model.System /// Gets or sets plugin assemblies that failed to load. /// /// The failed assembly loads. - public string[] FailedPluginAssemblies { get; set; } + public List FailedPluginAssemblies { get; set; } /// /// Gets or sets the id. @@ -84,11 +85,11 @@ namespace MediaBrowser.Model.System /// public SystemInfo() { - InProgressInstallations = new InstallationInfo[] { }; + InProgressInstallations = new List(); - CompletedInstallations = new InstallationInfo[] { }; + CompletedInstallations = new List(); - FailedPluginAssemblies = new string[] { }; + FailedPluginAssemblies = new List(); } } } diff --git a/MediaBrowser.Model/Tasks/TaskInfo.cs b/MediaBrowser.Model/Tasks/TaskInfo.cs index 58d9cac15d..dee4fea7fc 100644 --- a/MediaBrowser.Model/Tasks/TaskInfo.cs +++ b/MediaBrowser.Model/Tasks/TaskInfo.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace MediaBrowser.Model.Tasks { @@ -41,7 +42,7 @@ namespace MediaBrowser.Model.Tasks /// Gets or sets the triggers. /// /// The triggers. - public TaskTriggerInfo[] Triggers { get; set; } + public List Triggers { get; set; } /// /// Gets or sets the description. @@ -60,7 +61,7 @@ namespace MediaBrowser.Model.Tasks /// public TaskInfo() { - Triggers = new TaskTriggerInfo[] {}; + Triggers = new List(); } } } diff --git a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs index 52d5791ae0..fefcd8371a 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs @@ -172,9 +172,9 @@ namespace MediaBrowser.Providers.Movies var files = new DirectoryInfo(path) .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) .Select(i => i.LastWriteTimeUtc) - .ToArray(); + .ToList(); - if (files.Length > 0) + if (files.Count > 0) { return files.Max(); } diff --git a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs index bb448d729c..66efd58e62 100644 --- a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs @@ -166,9 +166,9 @@ namespace MediaBrowser.Providers.Music var files = new DirectoryInfo(path) .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) .Select(i => i.LastWriteTimeUtc) - .ToArray(); + .ToList(); - if (files.Length > 0) + if (files.Count > 0) { return files.Max(); } diff --git a/MediaBrowser.Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Providers/TV/FanArtTVProvider.cs index e5f455a5fd..bc2b28f1c2 100644 --- a/MediaBrowser.Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Providers/TV/FanArtTVProvider.cs @@ -103,9 +103,9 @@ namespace MediaBrowser.Providers.TV var files = new DirectoryInfo(path) .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) .Select(i => i.LastWriteTimeUtc) - .ToArray(); + .ToList(); - if (files.Length > 0) + if (files.Count > 0) { return files.Max(); } diff --git a/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs index 00e3ef3d39..99e160c050 100644 --- a/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs @@ -165,9 +165,9 @@ namespace MediaBrowser.Providers.TV var files = new DirectoryInfo(path) .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) .Select(i => i.LastWriteTimeUtc) - .ToArray(); + .ToList(); - if (files.Length > 0) + if (files.Count > 0) { return files.Max(); } @@ -222,7 +222,7 @@ namespace MediaBrowser.Providers.TV /// Task{System.Boolean}. private async Task FetchSeriesData(Series series, string seriesId, string seriesDataPath, bool isForcedRefresh, CancellationToken cancellationToken) { - var files = Directory.EnumerateFiles(seriesDataPath, "*.xml", SearchOption.TopDirectoryOnly).Select(Path.GetFileName).ToArray(); + var files = Directory.EnumerateFiles(seriesDataPath, "*.xml", SearchOption.TopDirectoryOnly).Select(Path.GetFileName).ToList(); var seriesXmlFilename = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower() + ".xml"; @@ -555,9 +555,9 @@ namespace MediaBrowser.Providers.TV .Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries) .Select(i => i.Trim()) .Where(i => !string.IsNullOrWhiteSpace(i)) - .ToArray(); + .ToList(); - if (vals.Length > 0) + if (vals.Count > 0) { item.Genres.Clear(); @@ -584,9 +584,9 @@ namespace MediaBrowser.Providers.TV .Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries) .Select(i => i.Trim()) .Where(i => !string.IsNullOrWhiteSpace(i)) - .ToArray(); + .ToList(); - if (vals.Length > 0) + if (vals.Count > 0) { item.Studios.Clear(); diff --git a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs index ff532b9dd9..c9f9af4f28 100644 --- a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs +++ b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs @@ -208,15 +208,27 @@ namespace MediaBrowser.Server.Implementations.Drawing private WatchedIndicatorDrawer _watchedDrawer; - private void DrawIndicator(Graphics graphics, int imageWidth, int imageHeight, ImageOverlay indicator) + private void DrawIndicator(Graphics graphics, int imageWidth, int imageHeight, ImageOverlay? indicator) { - if (indicator == ImageOverlay.Watched) + if (!indicator.HasValue) { - _watchedDrawer = _watchedDrawer ?? (_watchedDrawer = new WatchedIndicatorDrawer()); + return; + } + + try + { + if (indicator.Value == ImageOverlay.Watched) + { + _watchedDrawer = _watchedDrawer ?? (_watchedDrawer = new WatchedIndicatorDrawer()); - var currentImageSize = new Size(imageWidth, imageHeight); + var currentImageSize = new Size(imageWidth, imageHeight); - _watchedDrawer.Process(graphics, currentImageSize); + _watchedDrawer.Process(graphics, currentImageSize); + } + } + catch (Exception ex) + { + _logger.ErrorException("Error drawing indicator overlay", ex); } } @@ -338,7 +350,7 @@ namespace MediaBrowser.Server.Implementations.Drawing /// /// Gets the cache file path based on a set of parameters /// - private string GetCacheFilePath(string originalPath, ImageSize outputSize, int quality, DateTime dateModified, ImageOutputFormat format, ImageOverlay overlay) + private string GetCacheFilePath(string originalPath, ImageSize outputSize, int quality, DateTime dateModified, ImageOutputFormat format, ImageOverlay? overlay) { var filename = originalPath; @@ -355,9 +367,9 @@ namespace MediaBrowser.Server.Implementations.Drawing filename += "format=" + format; } - if (overlay != ImageOverlay.None) + if (overlay.HasValue) { - filename += "overlay=" + overlay; + filename += "overlay=" + overlay.Value; } return GetCachePath(_resizedImageCachePath, filename, Path.GetExtension(originalPath)); @@ -414,9 +426,13 @@ namespace MediaBrowser.Server.Implementations.Drawing try { - var result = File.ReadAllText(fullCachePath).Split('|').Select(i => double.Parse(i, UsCulture)).ToArray(); + var result = File.ReadAllText(fullCachePath).Split('|'); - return new ImageSize { Width = result[0], Height = result[1] }; + return new ImageSize + { + Width = double.Parse(result[0], UsCulture), + Height = double.Parse(result[1], UsCulture) + }; } catch (IOException) { @@ -429,12 +445,13 @@ namespace MediaBrowser.Server.Implementations.Drawing { try { - var result = File.ReadAllText(fullCachePath) - .Split('|') - .Select(i => double.Parse(i, UsCulture)) - .ToArray(); + var result = File.ReadAllText(fullCachePath).Split('|'); - return new ImageSize { Width = result[0], Height = result[1] }; + return new ImageSize + { + Width = double.Parse(result[0], UsCulture), + Height = double.Parse(result[1], UsCulture) + }; } catch (FileNotFoundException) { diff --git a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs index 43d0e4db7e..ca878476f0 100644 --- a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs +++ b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs @@ -299,7 +299,7 @@ namespace MediaBrowser.Server.Implementations.Library /// The search input. /// The search input. /// System.Int32. - private Tuple GetIndex(string input, string searchInput, string[] searchWords) + private Tuple GetIndex(string input, string searchInput, List searchWords) { if (string.IsNullOrEmpty(input)) { @@ -324,11 +324,11 @@ namespace MediaBrowser.Server.Implementations.Library var items = GetWords(input); - for (var i = 0; i < searchWords.Length; i++) + for (var i = 0; i < searchWords.Count; i++) { var searchTerm = searchWords[i]; - for (var j = 0; j < items.Length; j++) + for (var j = 0; j < items.Count; j++) { var item = items[j]; @@ -357,9 +357,9 @@ namespace MediaBrowser.Server.Implementations.Library /// /// The term. /// System.String[][]. - private string[] GetWords(string term) + private List GetWords(string term) { - return term.Split().Where(i => !string.IsNullOrWhiteSpace(i)).ToArray(); + return term.Split().Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); } } diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs index 767df9c796..73909de27a 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs @@ -57,10 +57,10 @@ namespace MediaBrowser.Server.Implementations.Library.Validators /// Task. public async Task Run(IProgress progress, CancellationToken cancellationToken) { - var allItems = _libraryManager.RootFolder.RecursiveChildren.ToArray(); + var allItems = _libraryManager.RootFolder.RecursiveChildren.ToList(); - var allMusicArtists = allItems.OfType().ToArray(); - var allSongs = allItems.OfType