Example #1
0
        /// <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);
        }
Example #2
0
        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);
                    }
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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;
        }