diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations')
3 files changed, 1 insertions, 576 deletions
diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs deleted file mode 100644 index f074fd812..000000000 --- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs +++ /dev/null @@ -1,298 +0,0 @@ -using MediaBrowser.Common.Events; -using MediaBrowser.Controller.Collections; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Logging; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; - -namespace MediaBrowser.Server.Implementations.Collections -{ - public class CollectionManager : ICollectionManager - { - private readonly ILibraryManager _libraryManager; - private readonly IFileSystem _fileSystem; - private readonly ILibraryMonitor _iLibraryMonitor; - private readonly ILogger _logger; - private readonly IProviderManager _providerManager; - - public event EventHandler<CollectionCreatedEventArgs> CollectionCreated; - public event EventHandler<CollectionModifiedEventArgs> ItemsAddedToCollection; - public event EventHandler<CollectionModifiedEventArgs> ItemsRemovedFromCollection; - - public CollectionManager(ILibraryManager libraryManager, IFileSystem fileSystem, ILibraryMonitor iLibraryMonitor, ILogger logger, IProviderManager providerManager) - { - _libraryManager = libraryManager; - _fileSystem = fileSystem; - _iLibraryMonitor = iLibraryMonitor; - _logger = logger; - _providerManager = providerManager; - } - - public Folder GetCollectionsFolder(string userId) - { - return _libraryManager.RootFolder.Children.OfType<ManualCollectionsFolder>() - .FirstOrDefault() ?? _libraryManager.GetUserRootFolder().Children.OfType<ManualCollectionsFolder>() - .FirstOrDefault(); - } - - public IEnumerable<BoxSet> GetCollections(User user) - { - var folder = GetCollectionsFolder(user.Id.ToString("N")); - return folder == null ? - new List<BoxSet>() : - folder.GetChildren(user, true).OfType<BoxSet>(); - } - - public async Task<BoxSet> CreateCollection(CollectionCreationOptions options) - { - var name = options.Name; - - // Need to use the [boxset] suffix - // If internet metadata is not found, or if xml saving is off there will be no collection.xml - // This could cause it to get re-resolved as a plain folder - var folderName = _fileSystem.GetValidFilename(name) + " [boxset]"; - - var parentFolder = GetParentFolder(options.ParentId); - - if (parentFolder == null) - { - throw new ArgumentException(); - } - - var path = Path.Combine(parentFolder.Path, folderName); - - _iLibraryMonitor.ReportFileSystemChangeBeginning(path); - - try - { - _fileSystem.CreateDirectory(path); - - var collection = new BoxSet - { - Name = name, - Path = path, - IsLocked = options.IsLocked, - ProviderIds = options.ProviderIds, - Shares = options.UserIds.Select(i => new Share - { - UserId = i.ToString("N"), - CanEdit = true - - }).ToList() - }; - - await parentFolder.AddChild(collection, CancellationToken.None).ConfigureAwait(false); - - if (options.ItemIdList.Count > 0) - { - await AddToCollection(collection.Id, options.ItemIdList, false, new MetadataRefreshOptions(_fileSystem) - { - // The initial adding of items is going to create a local metadata file - // This will cause internet metadata to be skipped as a result - MetadataRefreshMode = MetadataRefreshMode.FullRefresh - }); - } - else - { - _providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(_fileSystem)); - } - - EventHelper.FireEventIfNotNull(CollectionCreated, this, new CollectionCreatedEventArgs - { - Collection = collection, - Options = options - - }, _logger); - - return collection; - } - finally - { - // Refresh handled internally - _iLibraryMonitor.ReportFileSystemChangeComplete(path, false); - } - } - - private Folder GetParentFolder(Guid? parentId) - { - if (parentId.HasValue) - { - if (parentId.Value == Guid.Empty) - { - throw new ArgumentNullException("parentId"); - } - - var folder = _libraryManager.GetItemById(parentId.Value) as Folder; - - // Find an actual physical folder - if (folder is CollectionFolder) - { - var child = _libraryManager.RootFolder.Children.OfType<Folder>() - .FirstOrDefault(i => folder.PhysicalLocations.Contains(i.Path, StringComparer.OrdinalIgnoreCase)); - - if (child != null) - { - return child; - } - } - } - - return GetCollectionsFolder(string.Empty); - } - - public Task AddToCollection(Guid collectionId, IEnumerable<Guid> ids) - { - return AddToCollection(collectionId, ids, true, new MetadataRefreshOptions(_fileSystem)); - } - - private async Task AddToCollection(Guid collectionId, IEnumerable<Guid> ids, bool fireEvent, MetadataRefreshOptions refreshOptions) - { - var collection = _libraryManager.GetItemById(collectionId) as BoxSet; - - if (collection == null) - { - throw new ArgumentException("No collection exists with the supplied Id"); - } - - var list = new List<LinkedChild>(); - var itemList = new List<BaseItem>(); - var currentLinkedChildren = collection.GetLinkedChildren().ToList(); - - foreach (var itemId in ids) - { - var item = _libraryManager.GetItemById(itemId); - - if (item == null) - { - throw new ArgumentException("No item exists with the supplied Id"); - } - - itemList.Add(item); - - if (currentLinkedChildren.All(i => i.Id != itemId)) - { - list.Add(LinkedChild.Create(item)); - } - } - - if (list.Count > 0) - { - collection.LinkedChildren.AddRange(list); - - collection.UpdateRatingToContent(); - - await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); - - _providerManager.QueueRefresh(collection.Id, refreshOptions); - - if (fireEvent) - { - EventHelper.FireEventIfNotNull(ItemsAddedToCollection, this, new CollectionModifiedEventArgs - { - Collection = collection, - ItemsChanged = itemList - - }, _logger); - } - } - } - - public async Task RemoveFromCollection(Guid collectionId, IEnumerable<Guid> itemIds) - { - var collection = _libraryManager.GetItemById(collectionId) as BoxSet; - - if (collection == null) - { - throw new ArgumentException("No collection exists with the supplied Id"); - } - - var list = new List<LinkedChild>(); - var itemList = new List<BaseItem>(); - - foreach (var itemId in itemIds) - { - var childItem = _libraryManager.GetItemById(itemId); - - var child = collection.LinkedChildren.FirstOrDefault(i => (i.ItemId.HasValue && i.ItemId.Value == itemId) || (childItem != null && string.Equals(childItem.Path, i.Path, StringComparison.OrdinalIgnoreCase))); - - if (child == null) - { - throw new ArgumentException("No collection title exists with the supplied Id"); - } - - list.Add(child); - - if (childItem != null) - { - itemList.Add(childItem); - } - } - - foreach (var child in list) - { - collection.LinkedChildren.Remove(child); - } - - collection.UpdateRatingToContent(); - - await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); - _providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(_fileSystem)); - - EventHelper.FireEventIfNotNull(ItemsRemovedFromCollection, this, new CollectionModifiedEventArgs - { - Collection = collection, - ItemsChanged = itemList - - }, _logger); - } - - public IEnumerable<BaseItem> CollapseItemsWithinBoxSets(IEnumerable<BaseItem> items, User user) - { - var results = new Dictionary<Guid, BaseItem>(); - - var allBoxsets = GetCollections(user).ToList(); - - foreach (var item in items) - { - var grouping = item as ISupportsBoxSetGrouping; - - if (grouping == null) - { - results[item.Id] = item; - } - else - { - var itemId = item.Id; - - var currentBoxSets = allBoxsets - .Where(i => i.GetLinkedChildren().Any(j => j.Id == itemId)) - .ToList(); - - if (currentBoxSets.Count > 0) - { - foreach (var boxset in currentBoxSets) - { - results[boxset.Id] = boxset; - } - } - else - { - results[item.Id] = item; - } - } - } - - return results.Values; - } - } -} diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 6cc3b8a47..037c6bd0c 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -111,11 +111,11 @@ <Compile Include="Activity\ActivityManager.cs" /> <Compile Include="Activity\ActivityRepository.cs" /> <Compile Include="Archiving\ZipClient.cs" /> - <Compile Include="Collections\CollectionManager.cs" /> <Compile Include="Collections\CollectionsDynamicFolder.cs" /> <Compile Include="Collections\CollectionImageProvider.cs" /> <Compile Include="Configuration\ServerConfigurationManager.cs" /> <Compile Include="Connect\ConnectData.cs" /> + <Compile Include="Connect\ConnectEntryPoint.cs" /> <Compile Include="Connect\ConnectManager.cs" /> <Compile Include="Connect\Responses.cs" /> <Compile Include="Connect\Validator.cs" /> @@ -133,7 +133,6 @@ <Compile Include="EntryPoints\RecordingNotifier.cs" /> <Compile Include="EntryPoints\RefreshUsersMetadata.cs" /> <Compile Include="EntryPoints\UsageEntryPoint.cs" /> - <Compile Include="Connect\ConnectEntryPoint.cs" /> <Compile Include="EntryPoints\UsageReporter.cs" /> <Compile Include="FileOrganization\EpisodeFileOrganizer.cs" /> <Compile Include="FileOrganization\Extensions.cs" /> @@ -300,7 +299,6 @@ <Compile Include="Playlists\ManualPlaylistsFolder.cs" /> <Compile Include="Photos\PhotoAlbumImageProvider.cs" /> <Compile Include="Playlists\PlaylistImageProvider.cs" /> - <Compile Include="Playlists\PlaylistManager.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Security\AuthenticationRepository.cs" /> <Compile Include="Security\EncryptionManager.cs" /> diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs deleted file mode 100644 index 13202d94c..000000000 --- a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs +++ /dev/null @@ -1,275 +0,0 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Playlists; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; - -namespace MediaBrowser.Server.Implementations.Playlists -{ - public class PlaylistManager : IPlaylistManager - { - private readonly ILibraryManager _libraryManager; - private readonly IFileSystem _fileSystem; - private readonly ILibraryMonitor _iLibraryMonitor; - private readonly ILogger _logger; - private readonly IUserManager _userManager; - private readonly IProviderManager _providerManager; - - public PlaylistManager(ILibraryManager libraryManager, IFileSystem fileSystem, ILibraryMonitor iLibraryMonitor, ILogger logger, IUserManager userManager, IProviderManager providerManager) - { - _libraryManager = libraryManager; - _fileSystem = fileSystem; - _iLibraryMonitor = iLibraryMonitor; - _logger = logger; - _userManager = userManager; - _providerManager = providerManager; - } - - public IEnumerable<Playlist> GetPlaylists(string userId) - { - var user = _userManager.GetUserById(userId); - - return GetPlaylistsFolder(userId).GetChildren(user, true).OfType<Playlist>(); - } - - public async Task<PlaylistCreationResult> CreatePlaylist(PlaylistCreationRequest options) - { - var name = options.Name; - - var folderName = _fileSystem.GetValidFilename(name) + " [playlist]"; - - var parentFolder = GetPlaylistsFolder(null); - - if (parentFolder == null) - { - throw new ArgumentException(); - } - - if (string.IsNullOrWhiteSpace(options.MediaType)) - { - foreach (var itemId in options.ItemIdList) - { - var item = _libraryManager.GetItemById(itemId); - - if (item == null) - { - throw new ArgumentException("No item exists with the supplied Id"); - } - - if (!string.IsNullOrWhiteSpace(item.MediaType)) - { - options.MediaType = item.MediaType; - } - else if (item is MusicArtist || item is MusicAlbum || item is MusicGenre) - { - options.MediaType = MediaType.Audio; - } - else if (item is Genre) - { - options.MediaType = MediaType.Video; - } - else - { - var folder = item as Folder; - if (folder != null) - { - options.MediaType = folder.GetRecursiveChildren(i => !i.IsFolder && i.SupportsAddingToPlaylist) - .Select(i => i.MediaType) - .FirstOrDefault(i => !string.IsNullOrWhiteSpace(i)); - } - } - - if (!string.IsNullOrWhiteSpace(options.MediaType)) - { - break; - } - } - } - - if (string.IsNullOrWhiteSpace(options.MediaType)) - { - throw new ArgumentException("A playlist media type is required."); - } - - var user = _userManager.GetUserById(options.UserId); - - var path = Path.Combine(parentFolder.Path, folderName); - path = GetTargetPath(path); - - _iLibraryMonitor.ReportFileSystemChangeBeginning(path); - - try - { - _fileSystem.CreateDirectory(path); - - var playlist = new Playlist - { - Name = name, - Path = path - }; - - playlist.Shares.Add(new Share - { - UserId = options.UserId, - CanEdit = true - }); - - playlist.SetMediaType(options.MediaType); - - await parentFolder.AddChild(playlist, CancellationToken.None).ConfigureAwait(false); - - await playlist.RefreshMetadata(new MetadataRefreshOptions(_fileSystem) { ForceSave = true }, CancellationToken.None) - .ConfigureAwait(false); - - if (options.ItemIdList.Count > 0) - { - await AddToPlaylistInternal(playlist.Id.ToString("N"), options.ItemIdList, user); - } - - return new PlaylistCreationResult - { - Id = playlist.Id.ToString("N") - }; - } - finally - { - // Refresh handled internally - _iLibraryMonitor.ReportFileSystemChangeComplete(path, false); - } - } - - private string GetTargetPath(string path) - { - while (_fileSystem.DirectoryExists(path)) - { - path += "1"; - } - - return path; - } - - private Task<IEnumerable<BaseItem>> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user) - { - var items = itemIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null); - - return Playlist.GetPlaylistItems(playlistMediaType, items, user); - } - - public Task AddToPlaylist(string playlistId, IEnumerable<string> itemIds, string userId) - { - var user = string.IsNullOrWhiteSpace(userId) ? null : _userManager.GetUserById(userId); - - return AddToPlaylistInternal(playlistId, itemIds, user); - } - - private async Task AddToPlaylistInternal(string playlistId, IEnumerable<string> itemIds, User user) - { - var playlist = _libraryManager.GetItemById(playlistId) as Playlist; - - if (playlist == null) - { - throw new ArgumentException("No Playlist exists with the supplied Id"); - } - - var list = new List<LinkedChild>(); - - var items = (await GetPlaylistItems(itemIds, playlist.MediaType, user).ConfigureAwait(false)) - .Where(i => i.SupportsAddingToPlaylist) - .ToList(); - - foreach (var item in items) - { - list.Add(LinkedChild.Create(item)); - } - - playlist.LinkedChildren.AddRange(list); - - await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); - - _providerManager.QueueRefresh(playlist.Id, new MetadataRefreshOptions(_fileSystem) - { - ForceSave = true - }); - } - - public async Task RemoveFromPlaylist(string playlistId, IEnumerable<string> entryIds) - { - var playlist = _libraryManager.GetItemById(playlistId) as Playlist; - - if (playlist == null) - { - throw new ArgumentException("No Playlist exists with the supplied Id"); - } - - var children = playlist.GetManageableItems().ToList(); - - var idList = entryIds.ToList(); - - var removals = children.Where(i => idList.Contains(i.Item1.Id)); - - playlist.LinkedChildren = children.Except(removals) - .Select(i => i.Item1) - .ToList(); - - await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); - - _providerManager.QueueRefresh(playlist.Id, new MetadataRefreshOptions(_fileSystem) - { - ForceSave = true - }); - } - - public async Task MoveItem(string playlistId, string entryId, int newIndex) - { - var playlist = _libraryManager.GetItemById(playlistId) as Playlist; - - if (playlist == null) - { - throw new ArgumentException("No Playlist exists with the supplied Id"); - } - - var children = playlist.GetManageableItems().ToList(); - - var oldIndex = children.FindIndex(i => string.Equals(entryId, i.Item1.Id, StringComparison.OrdinalIgnoreCase)); - - if (oldIndex == newIndex) - { - return; - } - - var item = playlist.LinkedChildren[oldIndex]; - - playlist.LinkedChildren.Remove(item); - - if (newIndex >= playlist.LinkedChildren.Count) - { - playlist.LinkedChildren.Add(item); - } - else - { - playlist.LinkedChildren.Insert(newIndex, item); - } - - await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); - } - - public Folder GetPlaylistsFolder(string userId) - { - return _libraryManager.RootFolder.Children.OfType<PlaylistsFolder>() - .FirstOrDefault() ?? _libraryManager.GetUserRootFolder().Children.OfType<PlaylistsFolder>() - .FirstOrDefault(); - } - } -} |
