Ejemplo n.º 1
0
        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();
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
 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));
 }
Ejemplo n.º 7
0
 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));
 }
Ejemplo n.º 9
0
        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);
            }
        }
Ejemplo n.º 10
0
        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();
            }
        }