/// <summary>
        ///     Removes tracks from a play-list.
        /// </summary>
        /// <param name="playlist">The play-list.</param>
        /// <param name="tracks">The tracks to remove.</param>
        public static void RemoveTracksFromPlaylist(Playlist playlist, List<Track> tracks)
        {
            if (tracks == null || playlist == null) return;

            foreach (var track in tracks.Where(track => playlist.Tracks.Contains(track)))
            {
                playlist.Tracks.Remove(track);
            }
            SavePlaylist(playlist);
        }
        /// <summary>
        ///     Adds tracks to play-list.
        /// </summary>
        /// <param name="playlist">The play-list.</param>
        /// <param name="tracks">The tracks.</param>
        public static void AddTracksToPlaylist(Playlist playlist, List<Track> tracks)
        {
            if (tracks == null || playlist == null) return;

            foreach (var track in tracks.Where(track => !playlist.Tracks.Contains(track)))
            {
                playlist.Tracks.Add(track);
            }
            SavePlaylist(playlist);
        }
        /// <summary>
        ///     Saves the play-list.
        /// </summary>
        /// <param name="playlist">The play-list.</param>
        public static void SavePlaylist(Playlist playlist)
        {
            if (playlist == null) return;
            if (playlist.Tracks.Count == 0)
            {
                try
                {
                    File.Delete(playlist.Filename);
                }
                catch
                {
                    // ignored
                }
                return;
            }

            var content = new StringBuilder();
            content.AppendLine("#EXTM3U");
            foreach (var track in playlist.Tracks)
            {
                content.AppendLine("#EXTINF:" + track.FullLength.ToString("0") + "," + track.Artist + " - " +
                                   track.Title);

                content.AppendLine(track.Filename);
            }

            File.WriteAllText(playlist.Filename, content.ToString(), Encoding.UTF8);
        }
        /// <summary>
        ///     Creates the new play-list.
        /// </summary>
        /// <param name="playlistName">Name of the play-list.</param>
        /// <returns></returns>
        public static Playlist CreateNewPlaylist(string playlistName)
        {
            playlistName = FileSystemHelper.StripInvalidFileNameChars(playlistName.Trim());

            var playlist = Playlists.FirstOrDefault(p => p.Name.ToLower() == playlistName.ToLower());
            if (playlist != null) return playlist;

            playlist = new Playlist {Name = playlistName};
            playlist.Filename = Path.Combine(PlaylistFolder, playlist.Name) + ".m3u";
            playlist.Tracks = new List<Track>();

            Playlists.Add(playlist);

            return playlist;
        }
        /// <summary>
        /// Loads a play-list.
        /// </summary>
        /// <param name="playlistFile">The play-list file.</param>
        /// <param name="library">The library.</param>
        /// <returns>
        /// A play-list object
        /// </returns>
        public static Playlist LoadPlaylist(string playlistFile, Library library)
        {
            var playlist = new Playlist
            {
                Filename = playlistFile,
                Name = Path.GetFileNameWithoutExtension(playlistFile)
            };
            playlist.Name = StringHelper.TitleCase(playlist.Name);

            var tracks = from entry 
                         in AudioEngine.Helpers.PlaylistHelper.GetPlaylistEntries(playlistFile)
                         let entryTitle = entry.Title.ToLower()
                         let entryArtist = entry.Artist.ToLower()
                         select library.LoadTrack(entry.Path) ?? library.GetTrack(entryArtist, entryTitle, 0) 
                         into track
                         where track != null
                         select track;

            playlist.Tracks.AddRange(tracks);

            return playlist;
        }
 public void SavePlaylist(Playlist playlist)
 {
     PlaylistHelper.SavePlaylist(playlist);
 }
 public void RemoveTracksFromPlaylist(Playlist playlist, List<Track> tracks)
 {
     PlaylistHelper.RemoveTracksFromPlaylist(playlist, tracks);
 }
 public void AddTracksToPlaylist(Playlist playlist, List<Track> tracks)
 {
     PlaylistHelper.AddTracksToPlaylist(playlist, tracks);
 }
 /// <summary>
 ///     Saves the play-list.
 /// </summary>
 /// <param name="playlistFile">The play-list file.</param>
 public void SavePlaylist(string playlistFile)
 {
     try
     {
         var playlist = new Playlist
         {
             Filename = playlistFile,
             Tracks = GetTracks()
         };
         Library.SavePlaylist(playlist);
         CurrentPlaylistFile = playlistFile;
     }
     catch (Exception e)
     {
         HandleException(e);
     }
 }
 /// <summary>
 ///     Queues a play-list.
 /// </summary>
 /// <param name="playlist">The play-list.</param>
 public void QueuePlaylist(Playlist playlist)
 {
     try
     {
         TrackModels.Clear();
         QueueTracks(playlist.Tracks);
     }
     catch (Exception e)
     {
         HandleException(e);
     }
 }