private async Task RefreshArtist(RefreshItem request, MusicArtist item) { var cancellationToken = CancellationToken.None; var albums = _libraryManager.RootFolder .RecursiveChildren .OfType<MusicAlbum>() .Where(i => i.HasArtist(item.Name)) .ToList(); var musicArtists = albums .Select(i => i.Parent) .OfType<MusicArtist>() .ToList(); var options = GetRefreshOptions(request); var musicArtistRefreshTasks = musicArtists.Select(i => i.ValidateChildren(new Progress<double>(), cancellationToken, options, true)); await Task.WhenAll(musicArtistRefreshTasks).ConfigureAwait(false); try { await item.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false); } catch (Exception ex) { Logger.ErrorException("Error refreshing library", ex); } }
/// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> public void Post(RefreshItem request) { var item = _libraryManager.GetItemById(request.Id); var task = item is MusicArtist ? RefreshArtist(request, (MusicArtist)item) : RefreshItem(request, item); Task.WaitAll(task); }
private MetadataRefreshOptions GetRefreshOptions(RefreshItem request) { return(new MetadataRefreshOptions(new DirectoryService(_fileSystem)) { MetadataRefreshMode = request.MetadataRefreshMode, ImageRefreshMode = request.ImageRefreshMode, ReplaceAllImages = request.ReplaceAllImages, ReplaceAllMetadata = request.ReplaceAllMetadata, ForceSave = request.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || request.ImageRefreshMode == MetadataRefreshMode.FullRefresh || request.ReplaceAllImages || request.ReplaceAllMetadata, IsAutomated = false }); }
/// <summary> /// Refreshes the collection folder children. /// </summary> /// <param name="request">The request.</param> /// <param name="collectionFolder">The collection folder.</param> /// <returns>Task.</returns> private async Task RefreshCollectionFolderChildren(RefreshItem request, CollectionFolder collectionFolder) { foreach (var child in collectionFolder.Children.ToList()) { await child.RefreshMetadata(CancellationToken.None, forceRefresh : request.Forced).ConfigureAwait(false); var folder = child as Folder; if (folder != null) { await folder.ValidateChildren(new Progress <double>(), CancellationToken.None, request.Recursive, request.Forced).ConfigureAwait(false); } } }
/// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> public void Post(RefreshItem request) { var item = _libraryManager.GetItemById(request.Id); var options = GetRefreshOptions(request); if (item is Folder) { _providerManager.QueueRefresh(item.Id, options); } else { _providerManager.RefreshFullItem(item, options, CancellationToken.None); } }
/// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> public void Post(RefreshItem request) { var item = _libraryManager.GetItemById(request.Id); var options = GetRefreshOptions(request); if (item is Folder) { _providerManager.QueueRefresh(item.Id, options); } else { _providerManager.RefreshFullItem(item, options, CancellationToken.None); } }
/// <summary> /// Refreshes the collection folder children. /// </summary> /// <param name="request">The request.</param> /// <param name="collectionFolder">The collection folder.</param> /// <returns>Task.</returns> private async Task RefreshCollectionFolderChildren(RefreshItem request, CollectionFolder collectionFolder) { var options = GetRefreshOptions(request); foreach (var child in collectionFolder.Children.ToList()) { await child.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false); if (child.IsFolder) { var folder = (Folder)child; await folder.ValidateChildren(new Progress <double>(), CancellationToken.None, options, request.Recursive).ConfigureAwait(false); } } }
/// <summary> /// Refreshes the item. /// </summary> /// <param name="request">The request.</param> /// <returns>Task.</returns> private async Task RefreshItem(RefreshItem request, BaseItem item) { var options = GetRefreshOptions(request); try { await item.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false); if (item.IsFolder) { // Collection folders don't validate their children so we'll have to simulate that here var collectionFolder = item as CollectionFolder; if (collectionFolder != null) { await RefreshCollectionFolderChildren(request, collectionFolder).ConfigureAwait(false); } else { var folder = (Folder)item; await folder.ValidateChildren(new Progress<double>(), CancellationToken.None, options, request.Recursive).ConfigureAwait(false); } } } catch (Exception ex) { Logger.ErrorException("Error refreshing library", ex); } }
/// <summary> /// Refreshes the collection folder children. /// </summary> /// <param name="request">The request.</param> /// <param name="collectionFolder">The collection folder.</param> /// <returns>Task.</returns> private async Task RefreshCollectionFolderChildren(RefreshItem request, CollectionFolder collectionFolder) { var options = GetRefreshOptions(request); foreach (var child in collectionFolder.Children.ToList()) { await child.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false); if (child.IsFolder) { var folder = (Folder)child; await folder.ValidateChildren(new Progress<double>(), CancellationToken.None, options, request.Recursive).ConfigureAwait(false); } } }
/// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> public void Post(RefreshItem request) { var task = RefreshItem(request); Task.WaitAll(task); }
/// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> public void Post(RefreshItem request) { var task = RefreshItem(request); Task.WaitAll(task); }
/// <summary> /// Refreshes the collection folder children. /// </summary> /// <param name="request">The request.</param> /// <param name="collectionFolder">The collection folder.</param> /// <returns>Task.</returns> private async Task RefreshCollectionFolderChildren(RefreshItem request, CollectionFolder collectionFolder) { foreach (var child in collectionFolder.Children.ToList()) { await child.RefreshMetadata(CancellationToken.None, forceRefresh: request.Forced).ConfigureAwait(false); var folder = child as Folder; if (folder != null) { await folder.ValidateChildren(new Progress<double>(), CancellationToken.None, request.Recursive, request.Forced).ConfigureAwait(false); } } }
/// <summary> /// Refreshes the item. /// </summary> /// <param name="request">The request.</param> /// <returns>Task.</returns> private async Task RefreshItem(RefreshItem request) { var item = _dtoService.GetItemByDtoId(request.Id); var folder = item as Folder; try { await item.RefreshMetadata(CancellationToken.None, forceRefresh: request.Forced).ConfigureAwait(false); if (folder != null) { // Collection folders don't validate their children so we'll have to simulate that here var collectionFolder = folder as CollectionFolder; if (collectionFolder != null) { await RefreshCollectionFolderChildren(request, collectionFolder).ConfigureAwait(false); } else { await folder.ValidateChildren(new Progress<double>(), CancellationToken.None, request.Recursive, request.Forced).ConfigureAwait(false); } } } catch (Exception ex) { Logger.ErrorException("Error refreshing library", ex); } }