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(); } }
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(); }
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); } }