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 { Directory.CreateDirectory(path); var collection = new BoxSet { Name = name, Parent = parentFolder, DisplayMediaType = "Collection", Path = path, IsLocked = options.IsLocked, ProviderIds = options.ProviderIds }; await parentFolder.AddChild(collection, CancellationToken.None).ConfigureAwait(false); await collection.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()), CancellationToken.None) .ConfigureAwait(false); if (options.ItemIdList.Count > 0) { await AddToCollection(collection.Id, options.ItemIdList, false); } EventHelper.FireEventIfNotNull(CollectionCreated, this, new CollectionCreatedEventArgs { Collection = collection, Options = options }, _logger); return(collection); } finally { // Refresh handled internally _iLibraryMonitor.ReportFileSystemChangeComplete(path, false); } }
public async Task Execute(CancellationToken cancellationToken, IProgress <double> progress) { await Task.Yield(); progress?.Report(0); var items = this.libraryManager.GetItemList(new InternalItemsQuery()).Where(o => o.ProviderIds.ContainsKey(Plugin.Instance.Name)); var studios = items.SelectMany(o => o.Studios).Distinct().ToList(); foreach (var(idx, studio) in studios.WithIndex()) { progress?.Report((double)idx / studios.Count * 100); var movies = items.Where(o => o.Studios.Contains(studio, StringComparer.OrdinalIgnoreCase)); var option = new CollectionCreationOptions { Name = studio, #if __EMBY__ ItemIdList = movies.Select(o => o.InternalId).ToArray(), #else ItemIdList = movies.Select(o => o.Id.ToString()).ToArray(), #endif }; #if __EMBY__ var collection = await this.collectionManager.CreateCollection(option).ConfigureAwait(false); #else var collection = await this.collectionManager.CreateCollectionAsync(option).ConfigureAwait(false); #endif var moviesImages = movies.Where(o => o.HasImage(ImageType.Primary)); if (moviesImages.Any()) { collection.SetImage(moviesImages.Random().GetImageInfo(ImageType.Primary, 0), 0); } if (cancellationToken.IsCancellationRequested) { return; } } progress?.Report(100); }
private async Task <BoxSet> CreateCollection(IEnumerable <BaseItem> items, string name) { var option = new CollectionCreationOptions { Name = name, #if __EMBY__ ItemIdList = items.Select(o => o.InternalId).ToArray(), #else ItemIdList = items.Select(o => o.Id.ToString()).ToArray(), #endif }; #if __EMBY__ var collection = await this.collectionManager.CreateCollection(option).ConfigureAwait(false); #else var collection = await this.collectionManager.CreateCollectionAsync(option).ConfigureAwait(false); #endif return(collection); }
public async Task CreateCollection(CollectionCreationOptions options) { var name = options.Name; var folderName = _fileSystem.GetValidFilename(name); var parentFolder = _libraryManager.GetItemById(options.ParentId) as Folder; if (parentFolder == null) { throw new ArgumentException(); } var path = Path.Combine(parentFolder.Path, folderName); _iLibraryMonitor.ReportFileSystemChangeBeginning(path); try { Directory.CreateDirectory(path); var collection = new BoxSet { Name = name, Parent = parentFolder, DisplayMediaType = "Collection", Path = path, DontFetchMeta = options.IsLocked }; await parentFolder.AddChild(collection, CancellationToken.None).ConfigureAwait(false); await collection.RefreshMetadata(new MetadataRefreshOptions(), CancellationToken.None) .ConfigureAwait(false); } finally { // Refresh handled internally _iLibraryMonitor.ReportFileSystemChangeComplete(path, false); } }
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), RefreshPriority.High); } EventHelper.FireEventIfNotNull(CollectionCreated, this, new CollectionCreatedEventArgs { Collection = collection, Options = options }, _logger); return(collection); } finally { // Refresh handled internally _iLibraryMonitor.ReportFileSystemChangeComplete(path, false); } }
public async Task <BoxSet> CreateCollectionAsync(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 = await GetCollectionsFolder(true).ConfigureAwait(false); if (parentFolder == null) { throw new ArgumentException(); } var path = Path.Combine(parentFolder.Path, folderName); _iLibraryMonitor.ReportFileSystemChangeBeginning(path); try { Directory.CreateDirectory(path); var collection = new BoxSet { Name = name, Path = path, IsLocked = options.IsLocked, ProviderIds = options.ProviderIds, DateCreated = DateTime.UtcNow }; parentFolder.AddChild(collection); if (options.ItemIdList.Count > 0) { await AddToCollectionAsync( collection.Id, options.ItemIdList.Select(x => new Guid(x)), false, new MetadataRefreshOptions(new DirectoryService(_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 }).ConfigureAwait(false); } else { _providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(new DirectoryService(_fileSystem)), RefreshPriority.High); } CollectionCreated?.Invoke(this, new CollectionCreatedEventArgs { Collection = collection, Options = options }); return(collection); } finally { // Refresh handled internally _iLibraryMonitor.ReportFileSystemChangeComplete(path, false); } }