Jelajahi Sumber

Merge pull request #2053 from MediaBrowser/dev

Dev
Luke 9 tahun lalu
induk
melakukan
03648936dc
35 mengubah file dengan 182 tambahan dan 32 penghapusan
  1. 1 3
      MediaBrowser.Api/Images/ImageService.cs
  2. 1 0
      MediaBrowser.Api/Library/LibraryStructureService.cs
  3. 4 0
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  4. 9 1
      MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
  5. 1 0
      MediaBrowser.Api/Playback/StreamRequest.cs
  6. 1 0
      MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
  7. 0 14
      MediaBrowser.Controller/Configuration/LibraryOptions.cs
  8. 31 2
      MediaBrowser.Controller/Entities/AggregateFolder.cs
  9. 7 0
      MediaBrowser.Controller/Entities/Audio/Audio.cs
  10. 1 0
      MediaBrowser.Controller/Entities/CollectionFolder.cs
  11. 1 1
      MediaBrowser.Controller/Entities/Folder.cs
  12. 26 4
      MediaBrowser.Controller/Entities/Movies/BoxSet.cs
  13. 29 0
      MediaBrowser.Controller/Entities/UserRootFolder.cs
  14. 6 0
      MediaBrowser.Controller/Entities/Video.cs
  15. 1 0
      MediaBrowser.Controller/Library/ILibraryManager.cs
  16. 1 0
      MediaBrowser.Controller/Library/ItemResolveArgs.cs
  17. 0 1
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  18. 6 0
      MediaBrowser.Controller/Playlists/Playlist.cs
  19. 3 0
      MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
  20. 3 0
      MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
  21. 7 0
      MediaBrowser.Model/Configuration/LibraryOptions.cs
  22. 2 0
      MediaBrowser.Model/Dlna/StreamInfo.cs
  23. 1 0
      MediaBrowser.Model/Dto/BaseItemDto.cs
  24. 1 0
      MediaBrowser.Model/Dto/ItemCounts.cs
  25. 1 0
      MediaBrowser.Model/Dto/MediaSourceInfo.cs
  26. 3 0
      MediaBrowser.Model/Entities/VirtualFolderInfo.cs
  27. 1 0
      MediaBrowser.Model/MediaBrowser.Model.csproj
  28. 9 1
      MediaBrowser.Server.Implementations/Dto/DtoService.cs
  29. 5 0
      MediaBrowser.Server.Implementations/IO/FileRefresher.cs
  30. 10 4
      MediaBrowser.Server.Implementations/Library/LibraryManager.cs
  31. 1 0
      MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs
  32. 1 0
      MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs
  33. 1 0
      MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
  34. 1 0
      MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  35. 6 1
      MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

+ 1 - 3
MediaBrowser.Api/Images/ImageService.cs

@@ -573,11 +573,9 @@ namespace MediaBrowser.Api.Images
 
             var outputFormats = GetOutputFormats(request, imageInfo, cropwhitespace, supportedImageEnhancers);
 
-            var cacheGuid = new Guid(_imageProcessor.GetImageCacheTag(item, imageInfo, supportedImageEnhancers));
-
             TimeSpan? cacheDuration = null;
 
-            if (!string.IsNullOrEmpty(request.Tag) && cacheGuid == new Guid(request.Tag))
+            if (!string.IsNullOrEmpty(request.Tag))
             {
                 cacheDuration = TimeSpan.FromDays(365);
             }

+ 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
 {

+ 4 - 0
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -1589,6 +1589,10 @@ namespace MediaBrowser.Api.Playback
                         videoRequest.EnableSubtitlesInManifest = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
                     }
                 }
+                else if (i == 29)
+                {
+                    request.Tag = val;
+                }
             }
         }
 

+ 9 - 1
MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs

@@ -154,12 +154,20 @@ namespace MediaBrowser.Api.Playback.Progressive
 
                 using (state)
                 {
+                    TimeSpan? cacheDuration = null;
+
+                    if (!string.IsNullOrEmpty(request.Tag))
+                    {
+                        cacheDuration = TimeSpan.FromDays(365);
+                    }
+
                     return await ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions
                     {
                         ResponseHeaders = responseHeaders,
                         ContentType = contentType,
                         IsHeadRequest = isHeadRequest,
-                        Path = state.MediaPath
+                        Path = state.MediaPath,
+                        CacheDuration = cacheDuration
 
                     }).ConfigureAwait(false);
                 }

+ 1 - 0
MediaBrowser.Api/Playback/StreamRequest.cs

@@ -74,6 +74,7 @@ namespace MediaBrowser.Api.Playback
         public string Params { get; set; }
         public string PlaySessionId { get; set; }
         public string LiveStreamId { get; set; }
+        public string Tag { get; set; }
     }
 
     public class VideoStreamRequest : StreamRequest

+ 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; }
-    }
-}

+ 31 - 2
MediaBrowser.Controller/Entities/AggregateFolder.cs

@@ -67,6 +67,31 @@ namespace MediaBrowser.Controller.Entities
             return CreateResolveArgs(directoryService, true).FileSystemChildren;
         }
 
+        private List<Guid> _childrenIds = null;
+        private readonly object _childIdsLock = new object();
+        protected override IEnumerable<BaseItem> LoadChildren()
+        {
+            lock (_childIdsLock)
+            {
+                if (_childrenIds == null || _childrenIds.Count == 0)
+                {
+                    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;
+            }
+        }
+
         private bool _requiresRefresh;
         public override bool RequiresRefresh()
         {
@@ -89,6 +114,8 @@ namespace MediaBrowser.Controller.Entities
 
         public override bool BeforeMetadataRefresh()
         {
+            ResetCachedChildren();
+
             var changed = base.BeforeMetadataRefresh() || _requiresRefresh;
             _requiresRefresh = false;
             return changed;
@@ -96,9 +123,11 @@ namespace MediaBrowser.Controller.Entities
 
         private ItemResolveArgs CreateResolveArgs(IDirectoryService directoryService, bool setPhysicalLocations)
         {
+            ResetCachedChildren();
+
             var path = ContainingFolderPath;
 
-            var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths , directoryService)
+            var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, directoryService)
             {
                 FileInfo = FileSystem.GetDirectoryInfo(path),
                 Path = path,
@@ -135,7 +164,7 @@ namespace MediaBrowser.Controller.Entities
 
             return args;
         }
-        
+
         /// <summary>
         /// Adds the virtual child.
         /// </summary>

+ 7 - 0
MediaBrowser.Controller/Entities/Audio/Audio.cs

@@ -5,9 +5,11 @@ using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.MediaInfo;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using System.Runtime.Serialization;
 using System.Threading;
+using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.Channels;
 
 namespace MediaBrowser.Controller.Entities.Audio
@@ -266,6 +268,11 @@ namespace MediaBrowser.Controller.Entities.Audio
                 Size = i.Size
             };
 
+            if (info.Protocol == MediaProtocol.File)
+            {
+                info.ETag = i.DateModified.Ticks.ToString(CultureInfo.InvariantCulture).GetMD5().ToString("N");
+            }
+
             if (string.IsNullOrEmpty(info.Container))
             {
                 if (!string.IsNullOrWhiteSpace(i.Path) && locationType != LocationType.Remote && locationType != LocationType.Virtual)

+ 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;
 

+ 1 - 1
MediaBrowser.Controller/Entities/Folder.cs

@@ -273,7 +273,7 @@ namespace MediaBrowser.Controller.Entities
         /// </summary>
         protected virtual IEnumerable<BaseItem> LoadChildren()
         {
-            //Logger.Debug("Loading children from {0} {1}", Id, Path);
+            //Logger.Debug("Loading children from {0} {1} {2}", GetType().Name, Id, Path);
             //just load our children from the repo - the library will be validated and maintained in other processes
             return GetCachedChildren();
         }

+ 26 - 4
MediaBrowser.Controller/Entities/Movies/BoxSet.cs

@@ -62,11 +62,18 @@ namespace MediaBrowser.Controller.Entities.Movies
             return UnratedItem.Movie;
         }
 
-        protected override IEnumerable<BaseItem> LoadChildren()
+        protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
         {
-            var first = LinkedChildren.FirstOrDefault();
+            if (IsLegacyBoxSet)
+            {
+                return base.LoadChildren();
+            }
+            return new List<BaseItem>();
+        }
 
-            if (first != null && first.Type == LinkedChildType.Shortcut)
+        protected override IEnumerable<BaseItem> LoadChildren()
+        {
+            if (IsLegacyBoxSet)
             {
                 return base.LoadChildren();
             }
@@ -89,7 +96,22 @@ namespace MediaBrowser.Controller.Entities.Movies
         {
             get
             {
-                return true;
+                if (IsLegacyBoxSet)
+                {
+                    return true;
+                }
+
+                return false;
+            }
+        }
+
+        [IgnoreDataMember]
+        private bool IsLegacyBoxSet
+        {
+            get
+            {
+                // TODO
+                return false;
             }
         }
 

+ 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);
 

+ 6 - 0
MediaBrowser.Controller/Entities/Video.cs

@@ -12,6 +12,7 @@ using System.Runtime.Serialization;
 using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
+using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.Channels;
 
 namespace MediaBrowser.Controller.Entities
@@ -611,6 +612,11 @@ namespace MediaBrowser.Controller.Entities
                 SupportsDirectStream = i.VideoType == VideoType.VideoFile
             };
 
+            if (info.Protocol == MediaProtocol.File)
+            {
+                info.ETag = i.DateModified.Ticks.ToString(CultureInfo.InvariantCulture).GetMD5().ToString("N");
+            }
+
             if (i.IsShortcut)
             {
                 info.Path = i.ShortcutPath;

+ 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" />

+ 6 - 0
MediaBrowser.Controller/Playlists/Playlist.cs

@@ -7,6 +7,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.Serialization;
 using System.Threading.Tasks;
+using MediaBrowser.Controller.Providers;
 
 namespace MediaBrowser.Controller.Playlists
 {
@@ -69,6 +70,11 @@ namespace MediaBrowser.Controller.Playlists
             return GetPlayableItems(user).Result;
         }
 
+        protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
+        {
+            return new List<BaseItem>();
+        }
+
         public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
         {
             var items = GetPlayableItems(user).Result;

+ 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; }
+    }
+}

+ 2 - 0
MediaBrowser.Model/Dlna/StreamInfo.cs

@@ -252,6 +252,8 @@ namespace MediaBrowser.Model.Dlna
             list.Add(new NameValuePair("TranscodingMaxAudioChannels", item.TranscodingMaxAudioChannels.HasValue ? StringHelper.ToStringCultureInvariant(item.TranscodingMaxAudioChannels.Value) : string.Empty));
             list.Add(new NameValuePair("EnableSubtitlesInManifest", item.EnableSubtitlesInManifest.ToString().ToLower()));
 
+            list.Add(new NameValuePair("Tag", item.MediaSource.ETag ?? string.Empty));
+
             return list;
         }
 

+ 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>

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

@@ -20,6 +20,7 @@ namespace MediaBrowser.Model.Dto
 
         public string Name { get; set; }
 
+        public string ETag { get; set; }
         public long? RunTimeTicks { get; set; }
         public bool ReadAtNativeFramerate { get; set; }
         public bool SupportsTranscoding { get; set; }

+ 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);

+ 5 - 0
MediaBrowser.Server.Implementations/IO/FileRefresher.cs

@@ -259,6 +259,11 @@ namespace MediaBrowser.Server.Implementations.IO
                 // File may have been deleted
                 return false;
             }
+            catch (UnauthorizedAccessException)
+            {
+                Logger.Debug("No write permission for: {0}.", path);
+                return false;
+            }
             catch (IOException)
             {
                 //the file is unavailable because it is:

+ 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;