public async Task <DeleteTracksFromPlaylistResult> DeleteTracksFromPlaylistAsync(IList <PlayableTrack> tracks, string playlist) { DeleteTracksFromPlaylistResult result = DeleteTracksFromPlaylistResult.Success; string filename = this.CreatePlaylistFilename(playlist); List <string> paths = tracks.Select(t => t.Path).ToList(); var builder = new StringBuilder(); string line = null; await Task.Run(() => { try { using (StreamReader reader = new StreamReader(filename)) { while ((line = reader.ReadLine()) != null) { if (paths.Contains(line, StringComparer.OrdinalIgnoreCase)) { continue; } builder.AppendLine(line); } } using (FileStream fs = System.IO.File.Create(filename)) { using (var writer = new StreamWriter(fs)) { foreach (PlayableTrack track in tracks) { writer.Write(builder.ToString()); } } } } catch (Exception ex) { LogClient.Error("Could not delete tracks from playlist '{0}' with filename '{1}'. Exception: {2}", playlist, filename, ex.Message); result = DeleteTracksFromPlaylistResult.Error; } }); if (result == DeleteTracksFromPlaylistResult.Success) { this.TracksDeleted(paths, playlist); } return(result); }
private async Task DeleteTracksFromPlaylistsAsync() { if (!this.IsPlaylistSelected) { return; } if (this.SelectedTracks == null || this.SelectedTracks.Count == 0) { return; } string question = ResourceUtils.GetString("Language_Are_You_Sure_To_Remove_Songs_From_Playlist").Replace("{playlistname}", this.SelectedPlaylistName); if (this.SelectedTracks.Count == 1) { question = ResourceUtils.GetString("Language_Are_You_Sure_To_Remove_Song_From_Playlist").Replace("{playlistname}", this.SelectedPlaylistName); } if (this.dialogService.ShowConfirmation( 0xe11b, 16, ResourceUtils.GetString("Language_Delete"), question, ResourceUtils.GetString("Language_Yes"), ResourceUtils.GetString("Language_No"))) { DeleteTracksFromPlaylistResult result = await this.playlistService.DeleteTracksFromStaticPlaylistAsync(this.SelectedTracks.Select(x => x.PlaylistEntry).ToList(), this.SelectedPlaylist); if (result == DeleteTracksFromPlaylistResult.Error) { this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Error_Removing_From_Playlist"), ResourceUtils.GetString("Language_Ok"), true, ResourceUtils.GetString("Language_Log_File")); } } }
private async Task DeleteTracksFromPlaylistsAsync() { if (!this.IsPlaylistSelected) { return; } string question = ResourceUtils.GetStringResource("Language_Are_You_Sure_To_Remove_Songs_From_Playlist").Replace("%playlistname%", this.SelectedPlaylistName); if (this.SelectedTracks.Count == 1) { question = ResourceUtils.GetStringResource("Language_Are_You_Sure_To_Remove_Song_From_Playlist").Replace("%playlistname%", this.SelectedPlaylistName); } if (this.DialogService.ShowConfirmation( 0xe11b, 16, ResourceUtils.GetStringResource("Language_Delete"), question, ResourceUtils.GetStringResource("Language_Yes"), ResourceUtils.GetStringResource("Language_No"))) { List <int> selectedIndexes = await this.GetSelectedIndexesAsync(); DeleteTracksFromPlaylistResult result = await this.PlaylistService.DeleteTracksFromPlaylistAsync(selectedIndexes, this.SelectedPlaylistName); if (result == DeleteTracksFromPlaylistResult.Error) { this.DialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Removing_From_Playlist"), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); } } }
private async Task DeleteTracksFromPlaylistsAsync() { if (!this.AllowDeleteFromPlaylist) { return; } string question = ResourceUtils.GetStringResource("Language_Are_You_Sure_To_Remove_Songs_From_Playlist").Replace("%playlistname%", this.SelectedPlaylists[0]); if (this.SelectedTracks.Count == 1) { question = ResourceUtils.GetStringResource("Language_Are_You_Sure_To_Remove_Song_From_Playlist").Replace("%playlistname%", this.SelectedPlaylists[0]); } if (this.dialogService.ShowConfirmation( 0xe11b, 16, ResourceUtils.GetStringResource("Language_Delete"), question, ResourceUtils.GetStringResource("Language_Yes"), ResourceUtils.GetStringResource("Language_No"))) { DeleteTracksFromPlaylistResult result = await this.playlistService.DeleteTracksFromPlaylistAsync(this.SelectedTracks.Select(t => t.Value).ToList(), this.SelectedPlaylists[0]); if (result == DeleteTracksFromPlaylistResult.Error) { this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Removing_From_Playlist"), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); } } }
public async Task<DeleteTracksFromPlaylistResult> DeleteTracksFromStaticPlaylistAsync(IList<string> playlistEntries, PlaylistViewModel playlist) { if (playlistEntries == null || playlistEntries.Count == 0) { LogClient.Error("Cannot delete tracks from playlist. No playlist entries were provided."); return DeleteTracksFromPlaylistResult.Error; } if (playlist == null) { LogClient.Error($"Cannot delete tracks from playlist. {nameof(playlist)} is null."); return DeleteTracksFromPlaylistResult.Error; } DeleteTracksFromPlaylistResult result = DeleteTracksFromPlaylistResult.Success; this.watcher.Suspend(); // Stop watching the playlist folder string filename = this.CreatePlaylistFilePath(playlist.Name, PlaylistType.Static); var builder = new StringBuilder(); string line = null; await Task.Run(() => { try { using (StreamReader reader = new StreamReader(filename)) { int lineIndex = 0; while ((line = reader.ReadLine()) != null) { if (!playlistEntries.Contains(line)) { builder.AppendLine(line); } lineIndex++; } } using (FileStream fs = System.IO.File.Create(filename)) { using (var writer = new StreamWriter(fs)) { writer.Write(builder.ToString()); } } } catch (Exception ex) { LogClient.Error("Could not delete tracks from playlist '{0}' with filename '{1}'. Exception: {2}", playlist.Name, filename, ex.Message); result = DeleteTracksFromPlaylistResult.Error; } }); if (result == DeleteTracksFromPlaylistResult.Success) { this.TracksDeleted(playlist); } this.watcher.Resume(); // Start watching the playlist folder return result; }
public async Task <DeleteTracksFromPlaylistResult> DeleteTracksFromPlaylistAsync(IList <int> indexes, string playlistName) { if (indexes == null || indexes.Count == 0) { LogClient.Error("Cannot delete tracks from playlist. No indexes were provided."); return(DeleteTracksFromPlaylistResult.Error); } if (string.IsNullOrEmpty(playlistName)) { LogClient.Error("Cannot delete tracks from playlist. No playlistName was provided."); return(DeleteTracksFromPlaylistResult.Error); } DeleteTracksFromPlaylistResult result = DeleteTracksFromPlaylistResult.Success; watcher.EnableRaisingEvents = false; // Stop watching the playlist folder string filename = this.CreatePlaylistFilename(playlistName); var builder = new StringBuilder(); string line = null; await Task.Run(() => { try { using (StreamReader reader = new StreamReader(filename)) { int lineIndex = 0; while ((line = reader.ReadLine()) != null) { if (!indexes.Contains(lineIndex)) { builder.AppendLine(line); } lineIndex++; } } using (FileStream fs = System.IO.File.Create(filename)) { using (var writer = new StreamWriter(fs)) { writer.Write(builder.ToString()); } } } catch (Exception ex) { LogClient.Error("Could not delete tracks from playlist '{0}' with filename '{1}'. Exception: {2}", playlistName, filename, ex.Message); result = DeleteTracksFromPlaylistResult.Error; } }); if (result == DeleteTracksFromPlaylistResult.Success) { this.TracksDeleted(playlistName); } watcher.EnableRaisingEvents = true; // Start watching the playlist folder return(result); }