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) { this.Description = Path.GetFileName(libraryItem.FileName); this.Position = position; if (!File.Exists(libraryItem.FileName)) { Logger.Write(this, LogLevel.Debug, "File \"{0}\" no longer exists: Cannot refresh.", libraryItem.FileName); continue; } var metaDatas = await metaDataSource.GetMetaData(libraryItem.FileName).ConfigureAwait(false); MetaDataItem.Update(metaDatas, libraryItem.MetaDatas, null); await this.WriteLibraryMetaData(libraryItem).ConfigureAwait(false); libraryItem.Status = LibraryItemStatus.Import; await LibraryTaskBase.UpdateLibraryItem(this.Database, libraryItem).ConfigureAwait(false); position++; } })) { await task.Run().ConfigureAwait(false); } }
private async Task WriteLibraryMetaData(LibraryItem libraryItem) { using (var transaction = this.Database.BeginTransaction(this.Database.PreferredIsolationLevel)) { await this.Database.ExecuteAsync(this.Database.Queries.ClearLibraryMetaDataItems, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["itemId"] = libraryItem.Id; parameters["type"] = META_DATA_TYPE; break; } }, transaction).ConfigureAwait(false); using (var writer = new MetaDataWriter(this.Database, this.Database.Queries.AddLibraryMetaDataItem, transaction)) { await writer.Write( libraryItem.Id, libraryItem.MetaDatas, metaDataItem => META_DATA_TYPE.HasFlag(metaDataItem.Type) ).ConfigureAwait(false); } libraryItem.ImportDate = DateTimeHelper.ToString(DateTime.UtcNow.AddSeconds(30)); await LibraryTaskBase.UpdateLibraryItem(this.Database, libraryItem, transaction).ConfigureAwait(false); if (transaction.HasTransaction) { transaction.Commit(); } } }
protected virtual Task Schedule(PlaylistItem playlistItem) { playlistItem.Flags |= PlaylistItemFlags.Export; if (playlistItem.LibraryItem_Id.HasValue) { return(LibraryTaskBase.UpdateLibraryItem( this.Database, playlistItem.LibraryItem_Id.Value, libraryItem => libraryItem.Flags |= LibraryItemFlags.Export )); } return(PlaylistTaskBase.UpdatePlaylistItem(this.Database, playlistItem)); }
protected override async Task OnRun() { var position = 0; using (var task = new SingletonReentrantTask(this, ComponentSlots.Database, SingletonReentrantTask.PRIORITY_HIGH, async cancellationToken => { foreach (var playlistItem in this.PlaylistItems) { if (this.IsCancellationRequested) { break; } if (this.Visible) { this.Description = Path.GetFileName(playlistItem.FileName); this.Position = position; } if (playlistItem.LibraryItem_Id.HasValue) { await this.WriteLibraryMetaData(playlistItem).ConfigureAwait(false); await LibraryTaskBase.UpdateLibraryItem( this.Database, playlistItem.LibraryItem_Id.Value, libraryItem => libraryItem.Status = LibraryItemStatus.Import ).ConfigureAwait(false); } else { await this.WritePlaylistMetaData(playlistItem).ConfigureAwait(false); } if (this.WriteToFiles) { if (!await this.MetaDataManager.Synchronize(new[] { playlistItem }, this.Names.ToArray()).ConfigureAwait(false)) { this.AddError(playlistItem, string.Format("Failed to write meta data to file \"{0}\". We will try again later.", playlistItem.FileName)); } } position++; } })) { await task.Run().ConfigureAwait(false); } }
protected virtual async Task Deschedule(PlaylistItem playlistItem) { playlistItem.Flags &= ~PlaylistItemFlags.Export; if (playlistItem.LibraryItem_Id.HasValue) { await LibraryTaskBase.UpdateLibraryItem( this.Database, playlistItem.LibraryItem_Id.Value, libraryItem => { libraryItem.ImportDate = DateTimeHelper.ToString(DateTime.UtcNow.AddSeconds(30)); libraryItem.Flags &= ~LibraryItemFlags.Export; } ).ConfigureAwait(false); } await PlaylistTaskBase.UpdatePlaylistItem(this.Database, playlistItem).ConfigureAwait(false); }
protected virtual Task Deschedule(LibraryItem libraryItem) { libraryItem.ImportDate = DateTimeHelper.ToString(DateTime.UtcNow.AddSeconds(30)); libraryItem.Flags &= ~LibraryItemFlags.Export; return(LibraryTaskBase.UpdateLibraryItem(this.Database, libraryItem)); }
protected virtual Task Schedule(LibraryItem libraryItem) { libraryItem.Flags |= LibraryItemFlags.Export; return(LibraryTaskBase.UpdateLibraryItem(this.Database, libraryItem)); }