public async Task<AddTracksToPlaylistResult> AddTracksToStaticPlaylistAsync(IList<TrackViewModel> tracks, string playlistName) { if (tracks == null || tracks.Count == 0) { LogClient.Error("Cannot add tracks to playlist. No tracks were provided."); return AddTracksToPlaylistResult.Error; } if (string.IsNullOrEmpty(playlistName)) { LogClient.Error("Cannot add tracks to playlist. No playlistName was provided."); return AddTracksToPlaylistResult.Error; } AddTracksToPlaylistResult result = AddTracksToPlaylistResult.Success; this.watcher.Suspend(); // Stop watching the playlist folder int numberTracksAdded = 0; string filename = this.CreatePlaylistFilePath(playlistName, PlaylistType.Static); await Task.Run(() => { try { using (FileStream fs = System.IO.File.Open(filename, FileMode.Append)) { using (var writer = new StreamWriter(fs)) { foreach (TrackViewModel track in tracks) { try { writer.WriteLine(track.Path); numberTracksAdded++; } catch (Exception ex) { LogClient.Error("Could not write path '{0}' to playlist '{1}' with filename '{2}'. Exception: {3}", track.Path, playlistName, filename, ex.Message); } } } } } catch (Exception ex) { LogClient.Error("Could not add tracks to playlist '{0}' with filename '{1}'. Exception: {2}", playlistName, filename, ex.Message); result = AddTracksToPlaylistResult.Error; } }); if (result == AddTracksToPlaylistResult.Success) { this.TracksAdded(numberTracksAdded, playlistName); } this.watcher.Resume(); // Start watching the playlist folder return result; }
public async Task <AddTracksToPlaylistResult> AddTracksToPlaylistAsync(IList <PlayableTrack> tracks, string playlistName) { if (tracks == null || tracks.Count == 0) { CoreLogger.Current.Error("Cannot add tracks to playlist. No tracks were provided."); return(AddTracksToPlaylistResult.Error); } if (string.IsNullOrEmpty(playlistName)) { CoreLogger.Current.Error("Cannot add tracks to playlist. No playlistName was provided."); return(AddTracksToPlaylistResult.Error); } AddTracksToPlaylistResult result = AddTracksToPlaylistResult.Success; watcher.EnableRaisingEvents = false; // Stop watching the playlist folder int numberTracksAdded = 0; string filename = this.CreatePlaylistFilename(playlistName); await Task.Run(() => { try { using (FileStream fs = System.IO.File.Open(filename, FileMode.Append)) { using (var writer = new StreamWriter(fs)) { foreach (PlayableTrack track in tracks) { try { writer.WriteLine(track.Path); numberTracksAdded++; } catch (Exception ex) { CoreLogger.Current.Error("Could not write path '{0}' to playlist '{1}' with filename '{2}'. Exception: {3}", track.Path, playlistName, filename, ex.Message); } } } } } catch (Exception ex) { CoreLogger.Current.Error("Could not add tracks to playlist '{0}' with filename '{1}'. Exception: {2}", playlistName, filename, ex.Message); result = AddTracksToPlaylistResult.Error; } }); if (result == AddTracksToPlaylistResult.Success) { this.TracksAdded(numberTracksAdded, playlistName); } watcher.EnableRaisingEvents = true; // Start watching the playlist folder return(result); }
public async Task<AddTracksToPlaylistResult> AddAlbumsToStaticPlaylistAsync(IList<AlbumViewModel> albumViewModels, string playlistName) { IList<Track> tracks = await this.trackRepository.GetAlbumTracksAsync(albumViewModels.Select(x => x.AlbumKey).ToList()); List<TrackViewModel> orderedTracks = await EntityUtils.OrderTracksAsync(tracks.Select(t => this.container.ResolveTrackViewModel(t)).ToList(), TrackOrder.ByAlbum); AddTracksToPlaylistResult result = await this.AddTracksToStaticPlaylistAsync(orderedTracks, playlistName); return result; }
public async Task <AddTracksToPlaylistResult> AddAlbumsToPlaylistAsync(IList <Album> albums, string playlistName) { List <PlayableTrack> tracks = await DatabaseUtils.OrderTracksAsync(await this.trackRepository.GetTracksAsync(albums), TrackOrder.ByAlbum); AddTracksToPlaylistResult result = await this.AddTracksToPlaylistAsync(tracks, playlistName); return(result); }
public async Task <AddTracksToPlaylistResult> AddGenresToPlaylistAsync(IList <long> genreIds, string playlistName) { List <PlayableTrack> tracks = await DataUtils.OrderTracksAsync(await this.trackRepository.GetGenreTracksAsync(genreIds), TrackOrder.ByAlbum); AddTracksToPlaylistResult result = await this.AddTracksToPlaylistAsync(tracks, playlistName); return(result); }
public async Task <AddTracksToPlaylistResult> AddGenresToStaticPlaylistAsync(IList <string> genres, string playlistName) { IList <Track> tracks = await this.trackRepository.GetGenreTracksAsync(genres); List <TrackViewModel> orderedTracks = await EntityUtils.OrderTracksAsync(tracks.Select(t => this.container.ResolveTrackViewModel(t)).ToList(), TrackOrder.ByAlbum); AddTracksToPlaylistResult result = await this.AddTracksToStaticPlaylistAsync(orderedTracks, playlistName); return(result); }
public async Task <AddTracksToPlaylistResult> AddTracksToPlaylistAsync(IList <PlayableTrack> tracks, string playlist) { AddTracksToPlaylistResult result = AddTracksToPlaylistResult.Success; int numberTracksAdded = 0; string filename = this.CreatePlaylistFilename(playlist); await Task.Run(() => { try { using (FileStream fs = System.IO.File.Create(filename)) { using (var writer = new StreamWriter(fs)) { foreach (PlayableTrack track in tracks) { try { writer.WriteLine(track.Path); numberTracksAdded++; } catch (Exception ex) { LogClient.Error("Could not write path '{0}' to playlist '{1}' with filename '{2}'. Exception: {3}", track.Path, playlist, filename, ex.Message); } } } } } catch (Exception ex) { LogClient.Error("Could not add tracks to playlist '{0}' with filename '{1}'. Exception: {2}", playlist, filename, ex.Message); result = AddTracksToPlaylistResult.Error; } }); if (result == AddTracksToPlaylistResult.Success) { this.TracksAdded(numberTracksAdded, playlist); } return(result); }
private async Task AddGenresToPlaylistAsync(IList <string> genres, string playlistName) { AddPlaylistResult addPlaylistResult = AddPlaylistResult.Success; // Default Success // If no playlist is provided, first create one. if (playlistName == null) { var responseText = ResourceUtils.GetString("Language_New_Playlist"); if (this.dialogService.ShowInputDialog( 0xea37, 16, ResourceUtils.GetString("Language_New_Playlist"), ResourceUtils.GetString("Language_Enter_Name_For_New_Playlist"), ResourceUtils.GetString("Language_Ok"), ResourceUtils.GetString("Language_Cancel"), ref responseText)) { playlistName = responseText; addPlaylistResult = await this.playlistService.AddPlaylistAsync(playlistName); } } // If playlist name is still null, the user clicked cancel on the previous dialog. Stop here. if (playlistName == null) { return; } // Verify if the playlist was added switch (addPlaylistResult) { case AddPlaylistResult.Success: case AddPlaylistResult.Duplicate: // Add items to playlist AddTracksToPlaylistResult result = await this.playlistService.AddGenresToPlaylistAsync(genres, playlistName); if (result == AddTracksToPlaylistResult.Error) { this.dialogService.ShowNotification(0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Error_Adding_Songs_To_Playlist").Replace("{playlistname}", "\"" + playlistName + "\""), ResourceUtils.GetString("Language_Ok"), true, ResourceUtils.GetString("Language_Log_File")); } break; case AddPlaylistResult.Error: this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Error_Adding_Playlist"), ResourceUtils.GetString("Language_Ok"), true, ResourceUtils.GetString("Language_Log_File")); break; case AddPlaylistResult.Blank: this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Provide_Playlist_Name"), ResourceUtils.GetString("Language_Ok"), false, string.Empty); break; default: // Never happens break; } }