diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs
index 3af2134937..dd3c7211a4 100644
--- a/MediaBrowser.Api/Library/LibraryStructureService.cs
+++ b/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
{
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index 852a3d59ee..94a6a7ef13 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/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;
}
///
diff --git a/MediaBrowser.Controller/Configuration/LibraryOptions.cs b/MediaBrowser.Controller/Configuration/LibraryOptions.cs
deleted file mode 100644
index 1a824c08bf..0000000000
--- a/MediaBrowser.Controller/Configuration/LibraryOptions.cs
+++ /dev/null
@@ -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; }
- }
-}
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index 289cb7a2e8..b81f021da9 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/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;
diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs
index 4549d0d1df..a62c67c4fe 100644
--- a/MediaBrowser.Controller/Entities/UserRootFolder.cs
+++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs
@@ -16,6 +16,31 @@ namespace MediaBrowser.Controller.Entities
///
public class UserRootFolder : Folder
{
+ private List _childrenIds = null;
+ private readonly object _childIdsLock = new object();
+ //protected override IEnumerable 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> 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 progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
{
+ ResetCachedChildren();
+
await base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService)
.ConfigureAwait(false);
diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index edbacb5e70..0862e3eaf9 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/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
diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
index 56ec0a2138..ec0ac325bc 100644
--- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs
+++ b/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
{
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index e621eafded..0462117cb5 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -98,7 +98,6 @@
-
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
index 7a9589c982..351740e6ec 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -205,6 +205,9 @@
Configuration\ImageSavingConvention.cs
+
+ Configuration\LibraryOptions.cs
+
Configuration\MetadataConfiguration.cs
diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
index 420b536ae4..7df8f31261 100644
--- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
+++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
@@ -177,6 +177,9 @@
Configuration\ImageSavingConvention.cs
+
+ Configuration\LibraryOptions.cs
+
Configuration\MetadataConfiguration.cs
diff --git a/MediaBrowser.Model/Configuration/LibraryOptions.cs b/MediaBrowser.Model/Configuration/LibraryOptions.cs
new file mode 100644
index 0000000000..c6f7bbb9da
--- /dev/null
+++ b/MediaBrowser.Model/Configuration/LibraryOptions.cs
@@ -0,0 +1,7 @@
+namespace MediaBrowser.Model.Configuration
+{
+ public class LibraryOptions
+ {
+ public bool EnableArchiveMediaFiles { get; set; }
+ }
+}
diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs
index 6edf743fbb..7d69359d1a 100644
--- a/MediaBrowser.Model/Dto/BaseItemDto.cs
+++ b/MediaBrowser.Model/Dto/BaseItemDto.cs
@@ -837,6 +837,7 @@ namespace MediaBrowser.Model.Dto
///
/// The album count.
public int? AlbumCount { get; set; }
+ public int? ArtistCount { get; set; }
///
/// Gets or sets the music video count.
///
diff --git a/MediaBrowser.Model/Dto/ItemCounts.cs b/MediaBrowser.Model/Dto/ItemCounts.cs
index 07ddfa1ac6..66c3dfebc7 100644
--- a/MediaBrowser.Model/Dto/ItemCounts.cs
+++ b/MediaBrowser.Model/Dto/ItemCounts.cs
@@ -25,6 +25,7 @@
///
/// The game count.
public int GameCount { get; set; }
+ public int ArtistCount { get; set; }
///
/// Gets or sets the game system count.
///
diff --git a/MediaBrowser.Model/Entities/VirtualFolderInfo.cs b/MediaBrowser.Model/Entities/VirtualFolderInfo.cs
index 1161ab005f..d8ec04ff64 100644
--- a/MediaBrowser.Model/Entities/VirtualFolderInfo.cs
+++ b/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
/// The type of the collection.
public string CollectionType { get; set; }
+ public LibraryOptions LibraryOptions { get; set; }
+
///
/// Initializes a new instance of the class.
///
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index e3c1e52a53..db70b86063 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -95,6 +95,7 @@
+
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index cc165da6a7..4f903a2c28 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -408,12 +408,19 @@ namespace MediaBrowser.Server.Implementations.Dto
private void SetItemByNameInfo(BaseItem item, BaseItemDto dto, List 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);
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index b00303f295..52961668d0 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/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 collectionFolders)
+ private VirtualFolderInfo GetVirtualFolderInfo(string dir, List 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");
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs
index 546f64d3c3..1a8295800f 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs
+++ b/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
{
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs
index 09a9a3b4e9..78df465b13 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs
+++ b/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
{
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
index f1bbc1f327..aefb29f1a6 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
+++ b/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
{
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index 4c9b2a4d97..3d8e7a3d6d 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/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
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index bbb36b46e1..0e36ede7ac 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/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;