aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/UserRootFolder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities/UserRootFolder.cs')
-rw-r--r--MediaBrowser.Controller/Entities/UserRootFolder.cs93
1 files changed, 92 insertions, 1 deletions
diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs
index e5a8135c2..ec7c02cfa 100644
--- a/MediaBrowser.Controller/Entities/UserRootFolder.cs
+++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs
@@ -1,6 +1,12 @@
-using MediaBrowser.Controller.Providers;
+using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -51,5 +57,90 @@ namespace MediaBrowser.Controller.Entities
LibraryManager.RegisterItem(item);
}
}
+
+ public async Task<IEnumerable<Folder>> GetViews(User user, CancellationToken cancellationToken)
+ {
+ var folders = user.RootFolder
+ .GetChildren(user, true)
+ .OfType<Folder>()
+ .ToList();
+
+ var list = new List<Folder>();
+
+ var excludeFolderIds = user.Configuration.ExcludeFoldersFromGrouping.Select(i => new Guid(i)).ToList();
+
+ var standaloneFolders = folders.Where(i => UserView.IsExcludedFromGrouping(i) || excludeFolderIds.Contains(i.Id)).ToList();
+
+ list.AddRange(standaloneFolders);
+
+ var recursiveChildren = folders
+ .Except(standaloneFolders)
+ .SelectMany(i => i.GetRecursiveChildren(user, false))
+ .ToList();
+
+ if (recursiveChildren.OfType<Series>().Any())
+ {
+ list.Add(await GetUserView(CollectionType.TvShows, user, cancellationToken).ConfigureAwait(false));
+ }
+
+ if (recursiveChildren.OfType<MusicAlbum>().Any() ||
+ recursiveChildren.OfType<MusicVideo>().Any())
+ {
+ list.Add(await GetUserView(CollectionType.Music, user, cancellationToken).ConfigureAwait(false));
+ }
+
+ if (recursiveChildren.OfType<Movie>().Any())
+ {
+ list.Add(await GetUserView(CollectionType.Movies, user, cancellationToken).ConfigureAwait(false));
+ }
+
+ if (recursiveChildren.OfType<Game>().Any())
+ {
+ list.Add(await GetUserView(CollectionType.Games, user, cancellationToken).ConfigureAwait(false));
+ }
+
+ if (recursiveChildren.OfType<BoxSet>().Any())
+ {
+ list.Add(await GetUserView(CollectionType.BoxSets, user, cancellationToken).ConfigureAwait(false));
+ }
+
+ return list.OrderBy(i => i.SortName);
+ }
+
+ // Use this to force new entity creation, as needed
+ private const string DataVersion = "5";
+ private async Task<UserView> GetUserView(string type, User user, CancellationToken cancellationToken)
+ {
+ var name = LocalizationManager.GetLocalizedString("ViewType" + type);
+
+ var id = "view" + name + DataVersion + user.Id.ToString("N");
+ var guid = id.GetMD5();
+
+ var item = LibraryManager.GetItemById(guid) as UserView;
+
+ if (item == null)
+ {
+ var path = System.IO.Path.Combine(user.ConfigurationDirectoryPath,
+ "views",
+ FileSystem.GetValidFilename(name));
+
+ Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path));
+
+ item = new UserView
+ {
+ Path = path,
+ Id = guid,
+ DateCreated = DateTime.UtcNow,
+ Name = name,
+ ViewType = type
+ };
+
+ await LibraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false);
+
+ await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
+ }
+
+ return item;
+ }
}
}