Exemplo n.º 1
0
        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"));
                }
            }
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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);
        }