protected override async Task OnRun() { var position = 0; using (var task = new SingletonReentrantTask(this, ComponentSlots.Database, SingletonReentrantTask.PRIORITY_LOW, async cancellationToken => { var metaDataSource = this.MetaDataSourceFactory.Create(); foreach (var libraryItem in this.LibraryItems) { await this.SetDescription(new FileInfo(libraryItem.FileName).Name).ConfigureAwait(false); await this.SetPosition(position).ConfigureAwait(false); if (!File.Exists(libraryItem.FileName)) { Logger.Write(this, LogLevel.Debug, "File \"{0}\" no longer exists: Cannot refresh.", libraryItem.FileName); continue; } libraryItem.MetaDatas = new ObservableCollection <MetaDataItem>( await metaDataSource.GetMetaData(libraryItem.FileName) .ConfigureAwait(false)); await this.WriteLibraryMetaData(libraryItem).ConfigureAwait(false); await LibraryTaskBase.SetLibraryItemStatus(this.Database, libraryItem.Id, LibraryItemStatus.Import).ConfigureAwait(false); position++; } })) { await task.Run().ConfigureAwait(false); } }
protected override async Task OnRun() { var position = 0; using (var task = new SingletonReentrantTask(this, ComponentSlots.Database, SingletonReentrantTask.PRIORITY_LOW, async cancellationToken => { var metaDataSource = this.MetaDataSourceFactory.Create(); foreach (var libraryItem in this.LibraryItems) { if (this.IsCancellationRequested) { break; } await this.SetDescription(new FileInfo(libraryItem.FileName).Name).ConfigureAwait(false); await this.SetPosition(position).ConfigureAwait(false); if (!File.Exists(libraryItem.FileName)) { Logger.Write(this, LogLevel.Debug, "File \"{0}\" no longer exists: Cannot update.", libraryItem.FileName); this.Errors.Add(libraryItem, new FileNotFoundException(string.Format("File \"{0}\" no longer exists: Cannot update.", libraryItem.FileName))); position++; continue; } try { await metaDataSource.SetMetaData( libraryItem.FileName, libraryItem.MetaDatas, metaDataItem => this.Names == null || !this.Names.Any() || this.Names.Contains(metaDataItem.Name, true) ).ConfigureAwait(false); } catch (Exception e) { this.Errors.Add(libraryItem, e); position++; continue; } foreach (var metaDataItem in libraryItem.MetaDatas.ToArray()) { if (!string.IsNullOrEmpty(metaDataItem.Value)) { continue; } libraryItem.MetaDatas.Remove(metaDataItem); } await this.WriteLibraryMetaData(libraryItem).ConfigureAwait(false); await LibraryTaskBase.SetLibraryItemStatus(this.Database, libraryItem.Id, LibraryItemStatus.Import).ConfigureAwait(false); position++; } })) { await task.Run().ConfigureAwait(false); } }