/// <summary> /// generate a playlist /// </summary> /// <param name="control">control file to use to find the destinationRoot, and playlist format</param> /// <param name="copyToDestination">true to copy the playlist to the destination, false to write it locally</param> public void GeneratePlaylist(IReadOnlyControlFile control, bool copyToDestination) { var allDestFiles = control.GetPodcasts().SelectMany( podcast => FileFinder.GetFiles(Path.Combine(control.GetDestinationRoot(), podcast.Folder), podcast.Pattern.Value)); IPlaylist p = PlaylistFactory.CreatePlaylist(control.GetPlaylistFormat(), control.GetPlaylistFileName()); string pathSeparator = PathUtilities.GetPathSeparator().ToString(); foreach (IFileInfo thisFile in allDestFiles) { string thisRelativeFile = thisFile.FullName; string absRoot = PathUtilities.GetFullPath(control.GetDestinationRoot()); if (thisRelativeFile.StartsWith(absRoot, StringComparison.Ordinal)) { thisRelativeFile = thisRelativeFile.Substring(absRoot.Length); } thisRelativeFile = thisRelativeFile.Replace(pathSeparator, control.GetPlaylistPathSeparator()); p.AddTrack("." + thisRelativeFile); } var tempFile = PathUtilities.GetTempFileName(); OnStatusUpdate(string.Format(CultureInfo.InvariantCulture, "Generating Playlist with {0} items", p.NumberOfTracks)); p.SaveFile(tempFile); var destPlaylist = copyToDestination ? Path.Combine(control.GetDestinationRoot(), control.GetPlaylistFileName()) : control.GetPlaylistFileName(); OnStatusUpdate(string.Format(CultureInfo.InvariantCulture, "Writing playlist to {0}", destPlaylist)); FileUtilities.FileCopy(tempFile, destPlaylist, true); }
public void AddTrackFromFolder() { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Multiselect = true; openFileDialog.Filter = "MP3 Files (*.mp3)|*.mp3|All files (*.*)|*.*"; DialogResult result = openFileDialog.ShowDialog(); if (result == DialogResult.OK) { string[] files = openFileDialog.FileNames; if (files.Length == 1) { ViewTrack newTrack = playlist.AddTrack(files[0]); if (newTrack != null) { TrackList.Insert(0, newTrack); } } else if (files.Length > 1) { List <ViewTrack> newTracks = playlist.AddTrackList(files); foreach (var track in newTracks) { TrackList.Insert(0, track); } } } }
private async Task <bool> AddTracksToPlaylist(IPlaylist playlist, IPlaylistResult result) { await Task.Delay(500); var controller = await _baseWindow.ShowProgressAsync(Application.Current.Resources["ImportTracks"].ToString(), string.Empty, true, new MetroDialogSettings { NegativeButtonText = Application.Current.Resources["Cancel"].ToString() }); result.LoadingTracksProcessChanged += (s, e) => { controller.SetMessage(string.Format(Application.Current.Resources["LoadingTracks"].ToString(), e.CurrentTrackName, e.Value, e.Maximum)); controller.SetProgress(e.Value / e.Maximum); }; var tracks = await result.GetTracks(controller); if (tracks == null) { await controller.CloseAsync(); return(false); } foreach (var track in tracks) { playlist.AddTrack(track); } _manager.SaveToSettings(); AnyListenSettings.Instance.Save(); AsyncTrackLoader.Instance.RunAsync(playlist); await controller.CloseAsync(); return(true); }
private async Task<bool> AddTracksToPlaylist(IPlaylist playlist, IPlaylistResult result) { await Task.Delay(500); var controller = await _baseWindow.ShowProgressAsync(Application.Current.Resources["ImportTracks"].ToString(), string.Empty, true, new MetroDialogSettings { NegativeButtonText = Application.Current.Resources["Cancel"].ToString() }); result.LoadingTracksProcessChanged += (s, e) => { controller.SetMessage(string.Format(Application.Current.Resources["LoadingTracks"].ToString(), e.CurrentTrackName, e.Value, e.Maximum)); controller.SetProgress(e.Value / e.Maximum); }; var tracks = await result.GetTracks(controller); if (tracks == null) { await controller.CloseAsync(); return false; } foreach (var track in tracks) { playlist.AddTrack(track); } _manager.SaveToSettings(); HurricaneSettings.Instance.Save(); AsyncTrackLoader.Instance.RunAsync(playlist); await controller.CloseAsync(); return true; }