IEnumerable <PlaylistSong> IPlaylistRequestHandler.LoadPlaylist(string title) { List <PlaylistSong> newSongList = new List <PlaylistSong>(); Database.Playlist loadingPlaylist = GetPlaylistClone(title); if (loadingPlaylist == null) { Console.WriteLine($"Tried to load Playlist \"{title}\"... Not found!"); return(newSongList); } if (_currentPlaylist == null) { GetCurrentPlaylist(); } foreach (PlaylistSong song in loadingPlaylist.PlaylistSongs) { song.Playlist = _currentPlaylist; db.PlaylistSongs.Add(song); newSongList.Add(song); } db.SaveChanges(); newSongList.Sort((a, b) => a.Number.CompareTo(b.Number)); return(newSongList); }
PlaylistSong GetSongData( Song song, Artist exclusiveArtist = null, Recording exclusiveRecording = null) { Database.Playlist currentPlaylist = GetCurrentPlaylist(); string playlistName; if (exclusiveRecording != null) { playlistName = $"{exclusiveRecording.Artist.Name} - {exclusiveRecording.Song.Title}"; } else if (exclusiveArtist != null) { playlistName = $"{exclusiveArtist.Name} - {song.Title}"; } else { List <Artist> artists = new List <Artist>( (from recording in song.Recordings select recording.Artist).Distinct()); if (artists.Count == 1) { playlistName = $"{artists[0].Name} - {song.Title}"; } else { playlistName = $"Various - {song.Title}"; } } PlaylistSong newSong = new PlaylistSong( song: song, title: playlistName) { Playlist = currentPlaylist, Weight = song.Weight }; db.PlaylistSongs.Add(newSong); foreach (PlaylistRecording recording in GetRecordingList( song: song, exclusiveArtist: exclusiveArtist, exclusiveRecording: exclusiveRecording)) { recording.PlaylistSong = newSong; db.PlaylistRecordings.Add(recording); } return(newSong); }
void IPlaylistRequestHandler.DeletePlaylist(string title) { Database.Playlist playlist = (from pl in db.Playlists where pl.Title == title select pl).FirstOrDefault(); if (playlist == null) { return; } db.Playlists.Remove(playlist); db.SaveChanges(); }
void IPlaylistRequestHandler.SavePlaylistAs(string title, IEnumerable <PlaylistSong> songs) { //Let's just do the easy thing - kill the whole record and start over db.Playlists.RemoveRange(from playlist in db.Playlists where playlist.Title == title select playlist); Database.Playlist savePlaylist = new Database.Playlist() { Title = title }; int index = 0; foreach (PlaylistSong song in songs) { PlaylistSong songCopy = new PlaylistSong() { Number = index++, Song = song.Song, Weight = song.Weight, Title = song.Title, Playlist = savePlaylist }; db.PlaylistSongs.Add(songCopy); foreach (PlaylistRecording recording in song.PlaylistRecordings) { PlaylistRecording recordingCopy = new PlaylistRecording() { Title = recording.Title, Recording = recording.Recording, Weight = recording.Weight, PlaylistSong = songCopy }; db.PlaylistRecordings.Add(recordingCopy); } } db.Playlists.Add(savePlaylist); db.SaveChanges(); }
private Database.Playlist GetCurrentPlaylist() { if (_currentPlaylist != null) { return(_currentPlaylist); } _currentPlaylist = (from playlist in db.Playlists where playlist.Title == "Default" select playlist).FirstOrDefault(); if (_currentPlaylist == null) { _currentPlaylist = new Database.Playlist() { Title = "Default" }; db.Playlists.Add(_currentPlaylist); db.SaveChanges(); } return(_currentPlaylist); }
IEnumerable <PlaylistSong> IPlaylistTransferRequestHandler.GetAlbumData( Album album, bool deep) { List <PlaylistSong> songData = new List <PlaylistSong>(); try { db.Configuration.AutoDetectChangesEnabled = false; if (deep) { foreach (Song song in (from recording in album.Recordings orderby recording.DiscNumber, recording.TrackNumber select recording.Song).Distinct()) { songData.Add(GetSongData(song: song)); } } else { Database.Playlist currentPlaylist = GetCurrentPlaylist(); foreach (Recording recording in from recording in album.Recordings orderby recording.DiscNumber, recording.TrackNumber select recording) { PlaylistSong newSong = new PlaylistSong( song: recording.Song, title: $"{recording.Artist.Name} - {recording.Song.Title}") { Playlist = currentPlaylist, Weight = recording.Weight }; db.PlaylistSongs.Add(newSong); PlaylistRecording newRecording = new PlaylistRecording( recording: recording, title: $"{recording.Artist.Name} - {recording.Album.Title} - {recording.Title}") { Weight = 1.0 }; newRecording.PlaylistSong = newSong; db.PlaylistRecordings.Add(newRecording); songData.Add(newSong); } } } finally { db.Configuration.AutoDetectChangesEnabled = true; } db.SaveChanges(); return(songData); }
IEnumerable <PlaylistSong> IPlaylistTransferRequestHandler.GetArtistData( Artist artist, bool deep) { List <PlaylistSong> artistData = new List <PlaylistSong>(); try { db.Configuration.AutoDetectChangesEnabled = false; Database.Playlist currentPlaylist = GetCurrentPlaylist(); foreach (Song song in (from recording in artist.Recordings orderby recording.Song.Title ascending select recording.Song).Distinct()) { string playlistName; if (deep) { List <Artist> artists = new List <Artist>( (from recording in song.Recordings select recording.Artist).Distinct()); if (artists.Count == 1) { playlistName = $"{artists[0].Name} - {song.Title}"; } else { playlistName = $"Various - {song.Title}"; } } else { playlistName = $"{artist.Name} - {song.Title}"; } PlaylistSong newSong = new PlaylistSong( song: song, title: playlistName) { Playlist = currentPlaylist, Weight = song.Weight }; db.PlaylistSongs.Add(newSong); foreach (PlaylistRecording recording in GetRecordingList( song: song, exclusiveArtist: deep ? null : artist)) { recording.PlaylistSong = newSong; db.PlaylistRecordings.Add(recording); } artistData.Add(newSong); } } finally { db.Configuration.AutoDetectChangesEnabled = true; } db.SaveChanges(); return(artistData); }