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();
                }
            }
        }
Exemplo n.º 3
0
 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);
            }
        }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 protected virtual Task Deschedule(LibraryItem libraryItem)
 {
     libraryItem.ImportDate = DateTimeHelper.ToString(DateTime.UtcNow.AddSeconds(30));
     libraryItem.Flags     &= ~LibraryItemFlags.Export;
     return(LibraryTaskBase.UpdateLibraryItem(this.Database, libraryItem));
 }
Exemplo n.º 7
0
 protected virtual Task Schedule(LibraryItem libraryItem)
 {
     libraryItem.Flags |= LibraryItemFlags.Export;
     return(LibraryTaskBase.UpdateLibraryItem(this.Database, libraryItem));
 }