protected override async Task OnCompleted()
        {
            await base.OnCompleted().ConfigureAwait(false);

            //We don't need a lock for this so not performing in OnRun().
            var names = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            names.AddRange(PlaylistTaskBase.UpdateLibraryCache(this.LibraryCache, this.PlaylistItems, null));
            names.AddRange(PlaylistTaskBase.UpdatePlaylistCache(this.PlaylistCache, this.PlaylistItems, null));
            await this.SignalEmitter.Send(new Signal(this, CommonSignals.MetaDataUpdated, names)).ConfigureAwait(false);
        }
Exemple #2
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 OnStarted()
        {
            if (this.Visible)
            {
                this.Name     = "Saving meta data";
                this.Position = 0;
                this.Count    = this.PlaylistItems.Count();
            }
            await base.OnStarted().ConfigureAwait(false);

            //We don't need a lock for this so not waiting for OnRun().
            var names = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            names.AddRange(PlaylistTaskBase.UpdateLibraryCache(this.LibraryCache, this.PlaylistItems, this.Names));
            names.AddRange(PlaylistTaskBase.UpdatePlaylistCache(this.PlaylistCache, this.PlaylistItems, this.Names));
        }
Exemple #4
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);
 }
Exemple #5
0
        public void InitializeDatabase(IDatabaseComponent database, DatabaseInitializeType type)
        {
            //IMPORTANT: When editing this function remember to change the checksum.
            if (!type.HasFlag(DatabaseInitializeType.Playlist))
            {
                return;
            }
            var scriptingRuntime = ComponentRegistry.Instance.GetComponent <IScriptingRuntime>();

            if (scriptingRuntime == null)
            {
                return;
            }
            using (var transaction = database.BeginTransaction(database.PreferredIsolationLevel))
            {
                {
                    var set = database.Set <Playlist>(transaction);
                    foreach (var playlist in set)
                    {
                        //TODO: Bad .Wait()
                        PlaylistTaskBase.RemovePlaylistItems(database, playlist.Id, PlaylistItemStatus.None, transaction).Wait();
                    }
                    set.Clear();
                    set.Add(new Playlist()
                    {
                        Name = "Default", Type = PlaylistType.None, Enabled = true
                    });
                }
                {
                    var set = database.Set <PlaylistColumn>(transaction);
                    set.Clear();
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Artist / album", Type = PlaylistColumnType.Script, Sequence = 1, Script = scriptingRuntime.CoreScripts.Artist_Album, Width = PlaylistColumn.WIDTH_LARGE, Enabled = true
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Track no", Type = PlaylistColumnType.Script, Sequence = 2, Script = scriptingRuntime.CoreScripts.Track, Enabled = true
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Title / track artist", Type = PlaylistColumnType.Script, Sequence = 3, Script = scriptingRuntime.CoreScripts.Title_Performer, Width = PlaylistColumn.WIDTH_LARGE, Enabled = true
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Duration", Type = PlaylistColumnType.Tag, Sequence = 4, Tag = CommonProperties.Duration, Format = CommonFormats.TimeSpan, Enabled = true
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Codec", Type = PlaylistColumnType.Script, Sequence = 5, Script = scriptingRuntime.CoreScripts.Codec, Enabled = true
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "BPM", Type = PlaylistColumnType.Tag, Sequence = 6, Tag = CommonMetaData.BeatsPerMinute, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Album gain", Type = PlaylistColumnType.Script, Sequence = 7, Script = scriptingRuntime.CoreScripts.ReplayGainAlbumGain, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Album peak", Type = PlaylistColumnType.Script, Sequence = 8, Script = scriptingRuntime.CoreScripts.ReplayGainAlbumPeak, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Track gain", Type = PlaylistColumnType.Script, Sequence = 9, Script = scriptingRuntime.CoreScripts.ReplayGainTrackGain, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Track peak", Type = PlaylistColumnType.Script, Sequence = 10, Script = scriptingRuntime.CoreScripts.ReplayGainTrackPeak, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Play count", Type = PlaylistColumnType.Script, Sequence = 11, Script = scriptingRuntime.CoreScripts.PlayCount, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Last played", Type = PlaylistColumnType.Script, Sequence = 12, Script = scriptingRuntime.CoreScripts.LastPlayed, Enabled = false
                    });
                    set.Add(new PlaylistColumn()
                    {
                        Name = "Initial key", Type = PlaylistColumnType.Tag, Sequence = 13, Tag = CommonMetaData.InitialKey, Enabled = false
                    });
                }
                transaction.Commit();
            }
        }