diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-27 08:24:28 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-27 08:24:28 -0400 |
| commit | c643dd072e117aec2397e695c650e8a58be2fc6c (patch) | |
| tree | ea1701ef7408fb30c816d6495ba85c200f4bacdb | |
| parent | bdc90f02f2aea7fabc22413912752db56435bfd3 (diff) | |
added more direct querying to folder
25 files changed, 143 insertions, 124 deletions
diff --git a/MediaBrowser.Api/AlbumsService.cs b/MediaBrowser.Api/AlbumsService.cs index d31bef428..46c92b7d9 100644 --- a/MediaBrowser.Api/AlbumsService.cs +++ b/MediaBrowser.Api/AlbumsService.cs @@ -75,7 +75,7 @@ namespace MediaBrowser.Api var album1 = (MusicAlbum)item1; var album2 = (MusicAlbum)item2; - var artists1 = album1.RecursiveChildren + var artists1 = album1.GetRecursiveChildren() .OfType<Audio>() .SelectMany(i => { @@ -92,7 +92,7 @@ namespace MediaBrowser.Api .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); - var artists2 = album2.RecursiveChildren + var artists2 = album2.GetRecursiveChildren() .OfType<Audio>() .SelectMany(i => { diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index 069bc0fe1..d01e96a5a 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -122,16 +122,16 @@ namespace MediaBrowser.Api return libraryManager.GetPerson(DeSlugPersonName(name, libraryManager)); } - protected IEnumerable<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager) + protected IList<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager) { if (userId.HasValue) { var user = userManager.GetUserById(userId.Value); - return userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user); + return userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user, null); } - return libraryManager.RootFolder.RecursiveChildren; + return libraryManager.RootFolder.GetRecursiveChildren(); } /// <summary> @@ -147,7 +147,7 @@ namespace MediaBrowser.Api return name; } - return libraryManager.RootFolder.RecursiveChildren + return libraryManager.RootFolder.GetRecursiveChildren() .OfType<Audio>() .SelectMany(i => { @@ -181,7 +181,7 @@ namespace MediaBrowser.Api return name; } - return libraryManager.RootFolder.RecursiveChildren + return libraryManager.RootFolder.GetRecursiveChildren() .SelectMany(i => i.Genres) .Distinct(StringComparer.OrdinalIgnoreCase) .FirstOrDefault(i => @@ -200,8 +200,7 @@ namespace MediaBrowser.Api return name; } - return libraryManager.RootFolder.RecursiveChildren - .OfType<Game>() + return libraryManager.RootFolder.GetRecursiveChildren(i => i is Game) .SelectMany(i => i.Genres) .Distinct(StringComparer.OrdinalIgnoreCase) .FirstOrDefault(i => @@ -223,7 +222,7 @@ namespace MediaBrowser.Api return name; } - return libraryManager.RootFolder.RecursiveChildren + return libraryManager.RootFolder.GetRecursiveChildren() .SelectMany(i => i.Studios) .Distinct(StringComparer.OrdinalIgnoreCase) .FirstOrDefault(i => @@ -245,7 +244,7 @@ namespace MediaBrowser.Api return name; } - return libraryManager.RootFolder.RecursiveChildren + return libraryManager.RootFolder.GetRecursiveChildren() .SelectMany(i => i.People) .Select(i => i.Name) .Distinct(StringComparer.OrdinalIgnoreCase) diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index ba669002e..f87434e97 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -103,18 +103,7 @@ namespace MediaBrowser.Api /// <returns>Task{IEnumerable{SearchHintResult}}.</returns> private async Task<SearchHintResult> GetSearchHintsAsync(GetSearchHints request) { - IEnumerable<BaseItem> inputItems; - - if (request.UserId.HasValue) - { - var user = _userManager.GetUserById(request.UserId.Value); - - inputItems = user.RootFolder.GetRecursiveChildren(user); - } - else - { - inputItems = _libraryManager.RootFolder.RecursiveChildren; - } + var inputItems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager); var results = await _searchEngine.GetSearchHints(inputItems, request.SearchTerm).ConfigureAwait(false); @@ -180,21 +169,21 @@ namespace MediaBrowser.Api { result.Series = season.Series.Name; - result.EpisodeCount = season.RecursiveChildren.OfType<Episode>().Count(); + result.EpisodeCount = season.GetRecursiveChildren(i => i is Episode).Count; } var series = item as Series; if (series != null) { - result.EpisodeCount = series.RecursiveChildren.OfType<Episode>().Count(); + result.EpisodeCount = series.GetRecursiveChildren(i => i is Episode).Count; } var album = item as MusicAlbum; if (album != null) { - var songs = album.RecursiveChildren.OfType<Audio>().ToList(); + var songs = album.GetRecursiveChildren().OfType<Audio>().ToList(); result.SongCount = songs.Count; diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs index 9fc52caae..1ec58e8e3 100644 --- a/MediaBrowser.Api/SimilarItemsHelper.cs +++ b/MediaBrowser.Api/SimilarItemsHelper.cs @@ -104,8 +104,8 @@ namespace MediaBrowser.Api var fields = request.GetItemFields().ToList(); var inputItems = user == null - ? libraryManager.RootFolder.RecursiveChildren - : user.RootFolder.GetRecursiveChildren(user); + ? libraryManager.RootFolder.GetRecursiveChildren(i => i.Id != item.Id) + : user.RootFolder.GetRecursiveChildren(user, i => i.Id != item.Id); var items = GetSimilaritems(item, inputItems, includeInSearch, getSimilarityScore) .ToList(); @@ -139,11 +139,7 @@ namespace MediaBrowser.Api { inputItems = inputItems.Where(includeInSearch); - // Avoid implicitly captured closure - var currentItem = item; - - return inputItems.Where(i => i.Id != currentItem.Id) - .Select(i => new Tuple<BaseItem, int>(i, getSimilarityScore(item, i))) + return inputItems.Select(i => new Tuple<BaseItem, int>(i, getSimilarityScore(item, i))) .Where(i => i.Item2 > 2) .OrderByDescending(i => i.Item2) .Select(i => i.Item1); diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index fcddd2ca6..382e207a7 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -157,10 +157,9 @@ namespace MediaBrowser.Api var user = _userManager.GetUserById(request.UserId); var itemsList = user.RootFolder - .GetRecursiveChildren(user) - .OfType<Series>() + .GetRecursiveChildren(user, i => i is Series) .AsParallel() - .Select(i => GetNextUp(i, user)) + .Select(i => GetNextUp((Series)i, user)) .ToList(); itemsList = itemsList diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 6e7343096..0ade4a64f 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -98,7 +98,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetArtists request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 4b4d08b09..587416d83 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -53,7 +53,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <param name="request">The request.</param> /// <returns>Task{ItemsResult}.</returns> - protected async Task<ItemsResult> GetResult(GetItemsByName request) + protected ItemsResult GetResult(GetItemsByName request) { User user = null; BaseItem item; @@ -80,7 +80,7 @@ namespace MediaBrowser.Api.UserLibrary } else { - items = request.Recursive ? folder.RecursiveChildren : folder.Children; + items = request.Recursive ? folder.GetRecursiveChildren() : folder.Children; } } else @@ -258,23 +258,6 @@ namespace MediaBrowser.Api.UserLibrary return dto; } - - /// <summary> - /// Gets the items. - /// </summary> - /// <param name="userId">The user id.</param> - /// <returns>IEnumerable{BaseItem}.</returns> - protected IEnumerable<BaseItem> GetItems(Guid? userId) - { - if (userId.HasValue) - { - var user = UserManager.GetUserById(userId.Value); - - return UserManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user); - } - - return LibraryManager.RootFolder.RecursiveChildren; - } } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs index a5ab91cbc..8528eea81 100644 --- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs @@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetGameGenres request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index fc72a5f52..a7561bef5 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -93,7 +93,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetGenres request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs index 84a769b56..7c131831f 100644 --- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs @@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetMusicGenres request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 9fe9f7139..7c8dc7259 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -105,7 +105,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetPersons request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index 3dc4dce6c..57046e701 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -94,7 +94,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetStudios request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 960ca10c6..7db15281f 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -451,9 +451,7 @@ namespace MediaBrowser.Api.UserLibrary if (series != null) { var dtos = series - .RecursiveChildren - .OfType<Episode>() - .Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) + .GetRecursiveChildren(i => i is Episode && i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) .OrderBy(i => { if (i.PremiereDate.HasValue) diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index aeee21278..666def277 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -99,7 +99,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetYears request) { - var result = GetResult(request).Result; + var result = GetResult(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 6f5bc3e3b..8d518963c 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -552,23 +552,7 @@ namespace MediaBrowser.Controller.Entities [IgnoreDataMember] public IEnumerable<BaseItem> RecursiveChildren { - get - { - foreach (var item in Children) - { - yield return item; - - if (item.IsFolder) - { - var subFolder = (Folder)item; - - foreach (var subitem in subFolder.RecursiveChildren) - { - yield return subitem; - } - } - } - } + get { return GetRecursiveChildren(); } } private List<BaseItem> LoadChildrenInternal() @@ -686,17 +670,12 @@ namespace MediaBrowser.Controller.Entities var currentChildren = ActualChildren.ToDictionary(i => i.Id); //create a list for our validated children - var validChildren = new ConcurrentBag<Tuple<BaseItem, bool>>(); - var newItems = new ConcurrentBag<BaseItem>(); + var validChildren = new List<Tuple<BaseItem, bool>>(); + var newItems = new List<BaseItem>(); cancellationToken.ThrowIfCancellationRequested(); - var options = new ParallelOptions - { - MaxDegreeOfParallelism = 10 - }; - - Parallel.ForEach(nonCachedChildren, options, child => + foreach (var child in nonCachedChildren) { BaseItem currentChild; @@ -725,10 +704,10 @@ namespace MediaBrowser.Controller.Entities validChildren.Add(new Tuple<BaseItem, bool>(child, true)); } - }); + } // If any items were added or removed.... - if (!newItems.IsEmpty || currentChildren.Count != validChildren.Count) + if (newItems.Count > 0 || currentChildren.Count != validChildren.Count) { var newChildren = validChildren.Select(c => c.Item1).ToList(); @@ -793,9 +772,9 @@ namespace MediaBrowser.Controller.Entities /// <param name="recursive">if set to <c>true</c> [recursive].</param> /// <param name="forceRefreshMetadata">if set to <c>true</c> [force refresh metadata].</param> /// <returns>Task.</returns> - private async Task RefreshChildren(IEnumerable<Tuple<BaseItem, bool>> children, IProgress<double> progress, CancellationToken cancellationToken, bool? recursive, bool forceRefreshMetadata = false) + private async Task RefreshChildren(IList<Tuple<BaseItem, bool>> children, IProgress<double> progress, CancellationToken cancellationToken, bool? recursive, bool forceRefreshMetadata = false) { - var list = children.ToList(); + var list = children; var percentages = new Dictionary<Guid, double>(list.Count); @@ -994,7 +973,7 @@ namespace MediaBrowser.Controller.Entities /// <param name="recursive">if set to <c>true</c> [recursive].</param> /// <param name="filter">The filter.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - private bool AddChildrenToList(User user, bool includeLinkedChildren, List<BaseItem> list, bool recursive, Func<BaseItem,bool> filter) + private bool AddChildrenToList(User user, bool includeLinkedChildren, List<BaseItem> list, bool recursive, Func<BaseItem, bool> filter) { var hasLinkedChildren = false; @@ -1030,7 +1009,7 @@ namespace MediaBrowser.Controller.Entities { continue; } - + hasLinkedChildren = true; if (child.IsVisible(user)) @@ -1056,7 +1035,15 @@ namespace MediaBrowser.Controller.Entities return GetRecursiveChildren(user, null, true); } - public IEnumerable<BaseItem> GetRecursiveChildren(User user, Func<BaseItem,bool> filter, bool includeLinkedChildren = true) + /// <summary> + /// Gets the recursive children. + /// </summary> + /// <param name="user">The user.</param> + /// <param name="filter">The filter.</param> + /// <param name="includeLinkedChildren">if set to <c>true</c> [include linked children].</param> + /// <returns>IList{BaseItem}.</returns> + /// <exception cref="System.ArgumentNullException"></exception> + public IList<BaseItem> GetRecursiveChildren(User user, Func<BaseItem, bool> filter, bool includeLinkedChildren = true) { if (user == null) { @@ -1066,7 +1053,7 @@ namespace MediaBrowser.Controller.Entities var initialCount = _lastRecursiveCount == 0 ? _children.Count : _lastRecursiveCount; var list = new List<BaseItem>(initialCount); - var hasLinkedChildren = AddChildrenToList(user, includeLinkedChildren, list, true, null); + var hasLinkedChildren = AddChildrenToList(user, includeLinkedChildren, list, true, filter); _lastRecursiveCount = list.Count; @@ -1077,7 +1064,59 @@ namespace MediaBrowser.Controller.Entities return list; } - + + /// <summary> + /// Gets the recursive children. + /// </summary> + /// <returns>IList{BaseItem}.</returns> + public IList<BaseItem> GetRecursiveChildren() + { + return GetRecursiveChildren(null); + } + + /// <summary> + /// Gets the recursive children. + /// </summary> + /// <param name="filter">The filter.</param> + /// <returns>IEnumerable{BaseItem}.</returns> + public IList<BaseItem> GetRecursiveChildren(Func<BaseItem, bool> filter) + { + var initialCount = _lastRecursiveCount == 0 ? _children.Count : _lastRecursiveCount; + var list = new List<BaseItem>(initialCount); + + AddChildrenToList(list, true, filter); + + return list; + } + + /// <summary> + /// Adds the children to list. + /// </summary> + /// <param name="list">The list.</param> + /// <param name="recursive">if set to <c>true</c> [recursive].</param> + /// <param name="filter">The filter.</param> + private void AddChildrenToList(List<BaseItem> list, bool recursive, Func<BaseItem, bool> filter) + { + foreach (var child in Children) + { + if (filter == null || filter(child)) + { + list.Add(child); + } + + if (recursive) + { + var folder = child as Folder; + + if (folder != null) + { + folder.AddChildrenToList(list, true, filter); + } + } + } + } + + /// <summary> /// Gets the linked children. /// </summary> diff --git a/MediaBrowser.Mono.userprefs b/MediaBrowser.Mono.userprefs index b57fb35e0..ba6fa903c 100644 --- a/MediaBrowser.Mono.userprefs +++ b/MediaBrowser.Mono.userprefs @@ -2,15 +2,20 @@ <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" /> <MonoDevelop.Ide.Workbench ActiveDocument="d:\Development\MediaBrowser\MediaBrowser.ServerApplication\ApplicationHost.cs"> <Files> - <File FileName="d:\Development\MediaBrowser\MediaBrowser.ServerApplication\ApplicationHost.cs" Line="442" Column="10" /> - <File FileName="MediaBrowser.Server.Mono\Native\ServerAuthorization.cs" Line="1" Column="1" /> - <File FileName="MediaBrowser.Server.Mono\Native\Autorun.cs" Line="1" Column="1" /> - <File FileName="MediaBrowser.Server.Mono\Native\Assemblies.cs" Line="1" Column="1" /> - <File FileName="MediaBrowser.Server.Mono\Program.cs" Line="1" Column="1" /> + <File FileName="d:\Development\MediaBrowser\MediaBrowser.ServerApplication\ApplicationHost.cs" Line="506" Column="29" /> + <File FileName="MediaBrowser.Server.Mono\Program.cs" Line="192" Column="1" /> + <File FileName="MediaBrowser.Server.Mono\Native\NativeApp.cs" Line="24" Column="1" /> + <File FileName="d:\Development\MediaBrowser\MediaBrowser.Common.Implementations\Logging\NLogger.cs" Line="72" Column="1" /> + <File FileName="d:\Development\MediaBrowser\MediaBrowser.Common.Implementations\BaseApplicationHost.cs" Line="530" Column="1" /> </Files> </MonoDevelop.Ide.Workbench> <MonoDevelop.Ide.DebuggingService.Breakpoints> - <BreakpointStore /> + <BreakpointStore> + <Breakpoint file="D:\Development\MediaBrowser\MediaBrowser.Server.Mono\Program.cs" line="177" column="1" /> + <Breakpoint file="D:\Development\MediaBrowser\MediaBrowser.Server.Mono\Program.cs" line="189" column="1" /> + <Breakpoint file="D:\Development\MediaBrowser\MediaBrowser.Server.Mono\Native\NativeApp.cs" line="23" column="1" /> + <Breakpoint file="D:\Development\MediaBrowser\MediaBrowser.Server.Mono\Native\NativeApp.cs" line="15" column="1" /> + </BreakpointStore> </MonoDevelop.Ide.DebuggingService.Breakpoints> <MonoDevelop.Ide.DebuggingService.PinnedWatches /> </Properties>
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 740f5fbbc..b3cdf43be 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -354,8 +354,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (!string.IsNullOrEmpty(item.Album)) { var parentAlbum = _libraryManager.RootFolder - .RecursiveChildren - .OfType<MusicAlbum>() + .GetRecursiveChildren(i => i is MusicAlbum) .FirstOrDefault(i => string.Equals(i.Name, item.Album, StringComparison.OrdinalIgnoreCase)); if (parentAlbum != null) diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 084f9b05c..ebbefb239 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -337,7 +337,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>ConcurrentDictionary{GuidBaseItem}.</returns> private ConcurrentDictionary<Guid, BaseItem> CreateLibraryItemsCache() { - var items = RootFolder.RecursiveChildren.ToList(); + var items = RootFolder.GetRecursiveChildren(); items.Add(RootFolder); @@ -347,7 +347,10 @@ namespace MediaBrowser.Server.Implementations.Library .Distinct() .ToList(); - items.AddRange(userRootFolders); + foreach (var folder in userRootFolders) + { + items.Add(folder); + } // Get all user collection folders // Skip BasePluginFolders because we already got them from RootFolder.RecursiveChildren @@ -355,7 +358,10 @@ namespace MediaBrowser.Server.Implementations.Library .Where(i => !(i is BasePluginFolder)) .ToList(); - items.AddRange(userFolders); + foreach (var folder in userFolders) + { + items.Add(folder); + } var dictionary = new ConcurrentDictionary<Guid, BaseItem>(); @@ -770,7 +776,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>Task.</returns> public async Task ValidatePeople(CancellationToken cancellationToken, IProgress<double> progress) { - var people = RootFolder.RecursiveChildren + var people = RootFolder.GetRecursiveChildren() .SelectMany(c => c.People) .DistinctBy(p => p.Name, StringComparer.OrdinalIgnoreCase) .ToList(); diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs index 7c964eacb..903fe86be 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators /// <returns>Task.</returns> public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) { - var allItems = _libraryManager.RootFolder.RecursiveChildren.ToList(); + var allItems = _libraryManager.RootFolder.GetRecursiveChildren(); var allMusicArtists = allItems.OfType<MusicArtist>().ToList(); var allSongs = allItems.OfType<Audio>().ToList(); diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs index e4d989c33..ea5d2477a 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs @@ -43,7 +43,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) { var userLibraries = _userManager.Users - .Select(i => new Tuple<Guid, List<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i).Where(m => !(m is IHasMusicGenres) && !(m is Game)).ToList())) + .Select(i => new Tuple<Guid, IList<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i, m => !(m is IHasMusicGenres) && !(m is Game)))) .ToList(); var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs index 1edc24762..e959baae5 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs @@ -43,7 +43,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) { var userLibraries = _userManager.Users - .Select(i => new Tuple<Guid, List<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i).Where(m => m is IHasMusicGenres).ToList())) + .Select(i => new Tuple<Guid, IList<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i, m => m is IHasMusicGenres))) .ToList(); var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs index dc96632f6..88f0e1e22 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs @@ -49,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators private void RunInternal(IProgress<double> progress, CancellationToken cancellationToken) { var userLibraries = _userManager.Users - .Select(i => new Tuple<Guid, List<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i).ToList())) + .Select(i => new Tuple<Guid, IList<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i, null))) .ToList(); var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs index 05689f8e5..1082dd18b 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs @@ -42,7 +42,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) { var userLibraries = _userManager.Users - .Select(i => new Tuple<Guid, List<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i).ToList())) + .Select(i => new Tuple<Guid, IList<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i, null))) .ToList(); var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 1a3ce414e..d413041b5 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -23,6 +23,8 @@ namespace MediaBrowser.Server.Mono private static ILogger _logger; + private static MainWindow _mainWindow; + public static void Main (string[] args) { Application.Init (); @@ -42,11 +44,11 @@ namespace MediaBrowser.Server.Mono var runningPath = Process.GetCurrentProcess().MainModule.FileName.Replace(Path.DirectorySeparatorChar.ToString(), string.Empty); - _singleInstanceMutex = new Mutex(true, @"Local\" + runningPath, out createdNew); - + //_singleInstanceMutex = new Mutex(true, @"Local\" + runningPath, out createdNew); + createdNew = true; if (!createdNew) { - _singleInstanceMutex = null; + //_singleInstanceMutex = null; logger.Info("Shutting down because another instance of Media Browser Server is already running."); return; } @@ -65,7 +67,7 @@ namespace MediaBrowser.Server.Mono { logger.Info("Shutting down"); - ReleaseMutex(logger); + //ReleaseMutex(logger); _appHost.Dispose(); } @@ -91,9 +93,9 @@ namespace MediaBrowser.Server.Mono Task.WaitAll (task); // TODO: Hide splash here - MainWindow win = new MainWindow (); + _mainWindow = new MainWindow (); - win.Show (); + _mainWindow.Show (); Application.Run (); } @@ -172,16 +174,20 @@ namespace MediaBrowser.Server.Mono public static void Shutdown() { + _mainWindow.Hide (); + _mainWindow.Dispose (); Application.Quit (); } public static void Restart() { // Second instance will start first, so release the mutex and dispose the http server ahead of time - ReleaseMutex (_logger); + //ReleaseMutex (_logger); _appHost.Dispose(); + _mainWindow.Hide (); + _mainWindow.Dispose (); Application.Quit (); } } diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index a6a403609..97563d133 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -314,7 +314,7 @@ namespace MediaBrowser.ServerApplication { var exception = (Exception)e.ExceptionObject; - _logger.ErrorException("UnhandledException", ex); + _logger.ErrorException("UnhandledException", exception); if (_backgroundService == null) { |
