Exemplo n.º 1
0
        public PlaylistTrack(Playlist playlist, Track track, int trackNo, bool isStoring = true)
        {
            Key      = StorageExtensions.NoKey;
            Playlist = playlist;
            Track    = track;
            TrackNo  = trackNo;
            Playlist.AddToPlaylistTracks(this);
            Track.AddToPlaylistTracks(this);
            onConstruct();
            if (DC.Data.IsTransaction)
            {
                DC.Data.AddTransaction(new TransactionItem(3, TransactionActivityEnum.New, Key, this));
            }

            if (isStoring)
            {
                Store();
            }
        }
Exemplo n.º 2
0
        private PlaylistTrack(int key, CsvReader csvReader)
        {
            Key = key;
            var playlistKey = csvReader.ReadInt();

            Playlist = DC.Data._Playlists.GetItem(playlistKey) ?? Playlist.NoPlaylist;
            var trackKey = csvReader.ReadInt();

            Track   = DC.Data._Tracks.GetItem(trackKey) ?? Track.NoTrack;
            TrackNo = csvReader.ReadInt();
            if (Playlist != Playlist.NoPlaylist)
            {
                Playlist.AddToPlaylistTracks(this);
            }
            if (Track != Track.NoTrack)
            {
                Track.AddToPlaylistTracks(this);
            }
            onCsvConstruct();
        }
Exemplo n.º 3
0
        public void Update(Playlist playlist, Track track, int trackNo)
        {
            if (Key >= 0)
            {
                if (playlist.Key < 0)
                {
                    throw new Exception($"PlaylistTrack.Update(): It is illegal to add stored PlaylistTrack '{this}'" + Environment.NewLine +
                                        $"to Playlist '{playlist}', which is not stored.");
                }
                if (track.Key < 0)
                {
                    throw new Exception($"PlaylistTrack.Update(): It is illegal to add stored PlaylistTrack '{this}'" + Environment.NewLine +
                                        $"to Track '{track}', which is not stored.");
                }
            }
            var clone       = new PlaylistTrack(this);
            var isCancelled = false;

            onUpdating(playlist, track, trackNo, ref isCancelled);
            if (isCancelled)
            {
                return;
            }


            //remove not yet updated item from parents which will be removed by update
            var hasPlaylistChanged = Playlist != playlist;

            if (hasPlaylistChanged)
            {
                Playlist.RemoveFromPlaylistTracks(this);
            }
            var hasTrackChanged = Track != track;

            if (hasTrackChanged)
            {
                Track.RemoveFromPlaylistTracks(this);
            }

            //update properties and detect if any value has changed
            var isChangeDetected = false;

            if (Playlist != playlist)
            {
                Playlist         = playlist;
                isChangeDetected = true;
            }
            if (Track != track)
            {
                Track            = track;
                isChangeDetected = true;
            }
            if (TrackNo != trackNo)
            {
                TrackNo          = trackNo;
                isChangeDetected = true;
            }

            //add updated item to parents which have been newly added during update
            if (hasPlaylistChanged)
            {
                Playlist.AddToPlaylistTracks(this);
            }
            if (hasTrackChanged)
            {
                Track.AddToPlaylistTracks(this);
            }
            if (isChangeDetected)
            {
                onUpdated(clone);
                if (Key >= 0)
                {
                    DC.Data._PlaylistTracks.ItemHasChanged(clone, this);
                }
                else if (DC.Data.IsTransaction)
                {
                    DC.Data.AddTransaction(new TransactionItem(3, TransactionActivityEnum.Update, Key, this, oldItem: clone));
                }
                HasChanged?.Invoke(clone, this);
            }
        }