protected virtual async Task SetPlaylistItemsStatus(IEnumerable <PlaylistItem> playlistItems, PlaylistItemStatus status) { var query = this.Database.QueryFactory.Build(); query.Update.SetTable(this.Database.Tables.PlaylistItem); query.Update.AddColumn(this.Database.Tables.PlaylistItem.Column("Status")); query.Filter.AddColumn(this.Database.Tables.PlaylistItem.PrimaryKey); using (var transaction = this.Database.BeginTransaction(this.Database.PreferredIsolationLevel)) { foreach (var playlistItem in playlistItems) { await this.Database.ExecuteAsync(query, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["id"] = playlistItem.Id; parameters["status"] = status; break; } }, transaction).ConfigureAwait(false); playlistItem.Status = status; } if (transaction.HasTransaction) { transaction.Commit(); } } }
protected virtual async Task RemoveItems(PlaylistItemStatus status) { await this.SetIsIndeterminate(true).ConfigureAwait(false); Logger.Write(this, LogLevel.Debug, "Removing playlist items."); using (var task = new SingletonReentrantTask(this, ComponentSlots.Database, SingletonReentrantTask.PRIORITY_HIGH, async cancellationToken => { using (var transaction = this.Database.BeginTransaction(this.Database.PreferredIsolationLevel)) { await this.Database.ExecuteAsync(this.Database.Queries.RemovePlaylistItems, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["status"] = status; break; } }, transaction).ConfigureAwait(false); transaction.Commit(); } })) { await task.Run().ConfigureAwait(false); } }
public MPlaylistItemStatus(PlaylistItemStatus playlistStatus) { if (playlistStatus == null) { return; } PrivacyStatus = playlistStatus.PrivacyStatus; }
public async Task Populate(PlaylistItemStatus playlistItemStatus, CancellationToken cancellationToken) { var query = this.Database .AsQueryable <PlaylistItem>(this.Database.Source(new DatabaseQueryComposer <PlaylistItem>(this.Database), this.Transaction)) .Where(playlistItem => playlistItem.Status == playlistItemStatus && !playlistItem.MetaDatas.Any()); await this.Populate(query, cancellationToken).ConfigureAwait(false); await new PlaylistVariousArtistsPopulator(this.Database).Populate(playlistItemStatus, this.Transaction).ConfigureAwait(false); }
public static Task RemovePlaylistItems(IDatabaseComponent database, int playlistId, PlaylistItemStatus status, ITransactionSource transaction) { return(database.ExecuteAsync(database.Queries.RemovePlaylistItems, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["playlistId"] = playlistId; parameters["status"] = status; break; } }, transaction)); }
public Task Clear(PlaylistItemStatus playlistItemStatus, ITransactionSource transaction) { return(this.Database.ExecuteAsync(this.Database.Queries.RemoveLibraryVariousArtists, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["name"] = CustomMetaData.VariousArtists; parameters["type"] = MetaDataItemType.Tag; parameters["status"] = playlistItemStatus; break; } }, transaction)); }
protected virtual async Task RemoveItems(PlaylistItemStatus status) { Logger.Write(this, LogLevel.Debug, "Removing playlist items."); using (var task = new SingletonReentrantTask(this, ComponentSlots.Database, SingletonReentrantTask.PRIORITY_HIGH, async cancellationToken => { using (var transaction = this.Database.BeginTransaction(this.Database.PreferredIsolationLevel)) { await RemovePlaylistItems(this.Database, this.Playlist.Id, status, transaction).ConfigureAwait(false); transaction.Commit(); } })) { await task.Run().ConfigureAwait(false); } }
public Task Populate(PlaylistItemStatus playlistItemStatus, ITransactionSource transaction) { return(this.Database.ExecuteAsync(this.Database.Queries.UpdatePlaylistVariousArtists, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["name"] = CustomMetaData.VariousArtists; parameters["type"] = MetaDataItemType.Tag; parameters["value"] = bool.TrueString; parameters["status"] = playlistItemStatus; break; } }, transaction)); }
public async Task Populate(PlaylistItemStatus playlistItemStatus, CancellationToken cancellationToken) { var query = this.Database .AsQueryable <PlaylistItem>(this.Database.Source(new DatabaseQueryComposer <PlaylistItem>(this.Database), this.Transaction)) .Where(playlistItem => playlistItem.Status == playlistItemStatus && playlistItem.LibraryItem_Id == null); await this.Populate(query, cancellationToken).ConfigureAwait(false); var populator = new PlaylistVariousArtistsPopulator(this.Database); if (this.DetectCompilations.Value) { await populator.Populate(playlistItemStatus, this.Transaction).ConfigureAwait(false); } else { await populator.Clear(playlistItemStatus, this.Transaction).ConfigureAwait(false); } }
protected virtual async Task SetPlaylistItemsStatus(PlaylistItemStatus status) { Logger.Write(this, LogLevel.Debug, "Setting playlist status: {0}", Enum.GetName(typeof(LibraryItemStatus), LibraryItemStatus.None)); var query = this.Database.QueryFactory.Build(); query.Update.SetTable(this.Database.Tables.PlaylistItem); query.Update.AddColumn(this.Database.Tables.PlaylistItem.Column("Status")); query.Filter.AddColumn(this.Database.Tables.PlaylistItem.Column("Playlist_Id")); using (var transaction = this.Database.BeginTransaction(this.Database.PreferredIsolationLevel)) { await this.Database.ExecuteAsync(query, (parameters, phase) => { switch (phase) { case DatabaseParameterPhase.Fetch: parameters["playlistId"] = this.Playlist.Id; parameters["status"] = status; break; } }, transaction).ConfigureAwait(false); transaction.Commit(); } }