浏览代码

improve genre displays

Luke Pulverenti 8 年之前
父节点
当前提交
8508e07bb9

+ 1 - 0
MediaBrowser.Api/Library/LibraryStructureService.cs

@@ -11,6 +11,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Api.Library
 {

+ 1 - 0
MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs

@@ -214,6 +214,7 @@ namespace MediaBrowser.Api.UserLibrary
             dto.AlbumCount = counts.AlbumCount;
             dto.SongCount = counts.SongCount;
             dto.GameCount = counts.GameCount;
+            dto.ArtistCount = counts.ArtistCount;
         }
 
         /// <summary>

+ 0 - 14
MediaBrowser.Controller/Configuration/LibraryOptions.cs

@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Controller.Configuration
-{
-    public class LibraryOptions
-    {
-        public bool EnableAudioArchiveFiles { get; set; }
-        public bool EnableVideoArchiveFiles { get; set; }
-    }
-}

+ 1 - 0
MediaBrowser.Controller/Entities/CollectionFolder.cs

@@ -10,6 +10,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Serialization;
 using MoreLinq;
 

+ 29 - 0
MediaBrowser.Controller/Entities/UserRootFolder.cs

@@ -16,6 +16,31 @@ namespace MediaBrowser.Controller.Entities
     /// </summary>
     public class UserRootFolder : Folder
     {
+        private List<Guid> _childrenIds = null;
+        private readonly object _childIdsLock = new object();
+        //protected override IEnumerable<BaseItem> LoadChildren()
+        //{
+        //    lock (_childIdsLock)
+        //    {
+        //        if (_childrenIds == null)
+        //        {
+        //            var list = base.LoadChildren().ToList();
+        //            _childrenIds = list.Select(i => i.Id).ToList();
+        //            return list;
+        //        }
+
+        //        return _childrenIds.Select(LibraryManager.GetItemById).Where(i => i != null).ToList();
+        //    }
+        //}
+
+        private void ResetCachedChildren()
+        {
+            lock (_childIdsLock)
+            {
+                _childrenIds = null;
+            }
+        }
+
         protected override async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
         {
             if (query.Recursive)
@@ -69,6 +94,8 @@ namespace MediaBrowser.Controller.Entities
 
         public override bool BeforeMetadataRefresh()
         {
+            ResetCachedChildren();
+
             var hasChanges = base.BeforeMetadataRefresh();
 
             if (string.Equals("default", Name, StringComparison.OrdinalIgnoreCase))
@@ -82,6 +109,8 @@ namespace MediaBrowser.Controller.Entities
 
         protected override async Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
         {
+            ResetCachedChildren();
+
             await base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService)
                 .ConfigureAwait(false);
 

+ 1 - 0
MediaBrowser.Controller/Library/ILibraryManager.cs

@@ -12,6 +12,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Dto;
 
 namespace MediaBrowser.Controller.Library

+ 1 - 0
MediaBrowser.Controller/Library/ItemResolveArgs.cs

@@ -6,6 +6,7 @@ using System.IO;
 using System.Linq;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Controller.Library
 {

+ 0 - 1
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -98,7 +98,6 @@
     <Compile Include="Collections\CollectionCreationOptions.cs" />
     <Compile Include="Collections\CollectionEvents.cs" />
     <Compile Include="Collections\ICollectionManager.cs" />
-    <Compile Include="Configuration\LibraryOptions.cs" />
     <Compile Include="Connect\ConnectSupporterSummary.cs" />
     <Compile Include="Connect\IConnectManager.cs" />
     <Compile Include="Connect\UserLinkResult.cs" />

+ 3 - 0
MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj

@@ -205,6 +205,9 @@
     <Compile Include="..\MediaBrowser.Model\Configuration\ImageSavingConvention.cs">
       <Link>Configuration\ImageSavingConvention.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Configuration\LibraryOptions.cs">
+      <Link>Configuration\LibraryOptions.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Configuration\MetadataConfiguration.cs">
       <Link>Configuration\MetadataConfiguration.cs</Link>
     </Compile>

+ 3 - 0
MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj

@@ -177,6 +177,9 @@
     <Compile Include="..\MediaBrowser.Model\Configuration\ImageSavingConvention.cs">
       <Link>Configuration\ImageSavingConvention.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Configuration\LibraryOptions.cs">
+      <Link>Configuration\LibraryOptions.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Configuration\MetadataConfiguration.cs">
       <Link>Configuration\MetadataConfiguration.cs</Link>
     </Compile>

+ 7 - 0
MediaBrowser.Model/Configuration/LibraryOptions.cs

@@ -0,0 +1,7 @@
+namespace MediaBrowser.Model.Configuration
+{
+    public class LibraryOptions
+    {
+        public bool EnableArchiveMediaFiles { get; set; }
+    }
+}

+ 1 - 0
MediaBrowser.Model/Dto/BaseItemDto.cs

@@ -837,6 +837,7 @@ namespace MediaBrowser.Model.Dto
         /// </summary>
         /// <value>The album count.</value>
         public int? AlbumCount { get; set; }
+        public int? ArtistCount { get; set; }
         /// <summary>
         /// Gets or sets the music video count.
         /// </summary>

+ 1 - 0
MediaBrowser.Model/Dto/ItemCounts.cs

@@ -25,6 +25,7 @@
         /// </summary>
         /// <value>The game count.</value>
         public int GameCount { get; set; }
+        public int ArtistCount { get; set; }
         /// <summary>
         /// Gets or sets the game system count.
         /// </summary>

+ 3 - 0
MediaBrowser.Model/Entities/VirtualFolderInfo.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Model.Entities
 {
@@ -25,6 +26,8 @@ namespace MediaBrowser.Model.Entities
         /// <value>The type of the collection.</value>
         public string CollectionType { get; set; }
 
+        public LibraryOptions LibraryOptions { get; set; }
+
         /// <summary>
         /// Initializes a new instance of the <see cref="VirtualFolderInfo"/> class.
         /// </summary>

+ 1 - 0
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -95,6 +95,7 @@
     <Compile Include="Configuration\CinemaModeConfiguration.cs" />
     <Compile Include="Configuration\EncodingOptions.cs" />
     <Compile Include="Configuration\FanartOptions.cs" />
+    <Compile Include="Configuration\LibraryOptions.cs" />
     <Compile Include="Configuration\MetadataConfiguration.cs" />
     <Compile Include="Configuration\PeopleMetadataOptions.cs" />
     <Compile Include="Configuration\XbmcMetadataOptions.cs" />

+ 9 - 1
MediaBrowser.Server.Implementations/Dto/DtoService.cs

@@ -408,12 +408,19 @@ namespace MediaBrowser.Server.Implementations.Dto
 
         private void SetItemByNameInfo(BaseItem item, BaseItemDto dto, List<BaseItem> taggedItems, User user = null)
         {
-            if (item is MusicArtist || item is MusicGenre)
+            if (item is MusicArtist)
             {
                 dto.AlbumCount = taggedItems.Count(i => i is MusicAlbum);
                 dto.MusicVideoCount = taggedItems.Count(i => i is MusicVideo);
                 dto.SongCount = taggedItems.Count(i => i is Audio);
             }
+            else if (item is MusicGenre)
+            {
+                dto.ArtistCount = taggedItems.Count(i => i is MusicArtist);
+                dto.AlbumCount = taggedItems.Count(i => i is MusicAlbum);
+                dto.MusicVideoCount = taggedItems.Count(i => i is MusicVideo);
+                dto.SongCount = taggedItems.Count(i => i is Audio);
+            }
             else if (item is GameGenre)
             {
                 dto.GameCount = taggedItems.Count(i => i is Game);
@@ -422,6 +429,7 @@ namespace MediaBrowser.Server.Implementations.Dto
             {
                 // This populates them all and covers Genre, Person, Studio, Year
 
+                dto.ArtistCount = taggedItems.Count(i => i is MusicArtist);
                 dto.AlbumCount = taggedItems.Count(i => i is MusicAlbum);
                 dto.EpisodeCount = taggedItems.Count(i => i is Episode);
                 dto.GameCount = taggedItems.Count(i => i is Game);

+ 10 - 4
MediaBrowser.Server.Implementations/Library/LibraryManager.cs

@@ -1223,7 +1223,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 .Select(dir => GetVirtualFolderInfo(dir, topLibraryFolders));
         }
 
-        private VirtualFolderInfo GetVirtualFolderInfo(string dir, List<BaseItem> collectionFolders)
+        private VirtualFolderInfo GetVirtualFolderInfo(string dir, List<BaseItem> allCollectionFolders)
         {
             var info = new VirtualFolderInfo
             {
@@ -1237,7 +1237,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 CollectionType = GetCollectionType(dir)
             };
 
-            var libraryFolder = collectionFolders.FirstOrDefault(i => string.Equals(i.Path, dir, StringComparison.OrdinalIgnoreCase));
+            var libraryFolder = allCollectionFolders.FirstOrDefault(i => string.Equals(i.Path, dir, StringComparison.OrdinalIgnoreCase));
 
             if (libraryFolder != null && libraryFolder.HasImage(ImageType.Primary))
             {
@@ -1249,6 +1249,12 @@ namespace MediaBrowser.Server.Implementations.Library
                 info.ItemId = libraryFolder.Id.ToString("N");
             }
 
+            var collectionFolder = libraryFolder as CollectionFolder;
+            if (collectionFolder != null)
+            {
+                info.LibraryOptions = collectionFolder.GetLibraryOptions();
+            }
+
             return info;
         }
 
@@ -2426,13 +2432,13 @@ namespace MediaBrowser.Server.Implementations.Library
             options.AudioFileExtensions.Remove(".m3u");
             options.AudioFileExtensions.Remove(".wpl");
 
-            if (!libraryOptions.EnableAudioArchiveFiles)
+            if (!libraryOptions.EnableArchiveMediaFiles)
             {
                 options.AudioFileExtensions.Remove(".rar");
                 options.AudioFileExtensions.Remove(".zip");
             }
 
-            if (!libraryOptions.EnableVideoArchiveFiles)
+            if (!libraryOptions.EnableArchiveMediaFiles)
             {
                 options.VideoFileExtensions.Remove(".rar");
                 options.VideoFileExtensions.Remove(".zip");

+ 1 - 0
MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs

@@ -11,6 +11,7 @@ using System.Collections.Generic;
 using System.IO;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
 {

+ 1 - 0
MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs

@@ -7,6 +7,7 @@ using System.IO;
 using System.Linq;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Server.Implementations.Library.Resolvers
 {

+ 1 - 0
MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs

@@ -13,6 +13,7 @@ using System.IO;
 using System.Linq;
 using CommonIO;
 using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Model.Configuration;
 
 namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
 {

+ 1 - 0
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -28,6 +28,7 @@ using CommonIO;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Power;
+using MediaBrowser.Model.Configuration;
 using Microsoft.Win32;
 
 namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV

+ 6 - 1
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -3975,7 +3975,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
                     AlbumArtistStartsWithOrGreater = query.AlbumArtistStartsWithOrGreater,
                     Tags = query.Tags,
                     OfficialRatings = query.OfficialRatings,
-                    Genres = query.GenreIds,
+                    GenreIds = query.GenreIds,
+                    Genres = query.Genres,
                     Years = query.Years
                 };
 
@@ -4128,6 +4129,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 {
                     counts.AlbumCount = value;
                 }
+                else if (string.Equals(typeName, typeof(MusicArtist).FullName, StringComparison.OrdinalIgnoreCase))
+                {
+                    counts.ArtistCount = value;
+                }
                 else if (string.Equals(typeName, typeof(Audio).FullName, StringComparison.OrdinalIgnoreCase))
                 {
                     counts.SongCount = value;