Exemple #1
0
        private async Task DownloadToFile(MetadataTask task, string pathToSave)
        {
            YouTubeVideo vid             = task.SelectedVideo.YoutubeVideo;
            long         totalDownloaded = 0;
            string       tempFile        = $"{pathToSave}.tmp";
            string       mp3File         = $"{pathToSave}.mp3";

            try
            {
                task.Status  = MetadataState.RUNNING;
                task.Message = String.Format(Properties.Resources.COMMAND_MSG_URI_SEARCH);
                using (ChunkDownloader client = new ChunkDownloader())
                {
                    client.OnProgress += (new ProgressHandler(task)).HandleProgress;

                    totalDownloaded = await client.DownloadToFile(vid.Uri, tempFile);
                }
                task.Message = String.Format(Properties.Resources.COMMAND_MSG_START_MP3, tempFile);

                FFMpegConverter converter = new FFMpegConverter();
                converter.ConvertProgress += (new ConvertProgressHandler(task)).HandleProgress;
                converter.ConvertMedia(tempFile, mp3File, "mp3");
                System.IO.File.Delete(tempFile);

                task.Status  = MetadataState.METADATA;
                task.Message = String.Format(Properties.Resources.COMMAND_MSG_END_MP3, mp3File);
            }
            catch (Exception ex)
            {
                task.Status  = MetadataState.ERROR;
                task.Message = ex.Message + Environment.NewLine + ex.StackTrace;
            }
        }
Exemple #2
0
        private async Task FetchMetadata(MetadataTask task)
        {
            if (task.Status != MetadataState.READY)
            {
                return;
            }

            try
            {
                task.ClearVideoCollection();

                task.Status  = MetadataState.RUNNING;
                task.Message = Properties.Resources.COMMAND_MSG_FETCHING_METADATA;

                var videos             = await(new YouTube()).GetAllVideosAsync(task.Url);
                var downloadableVideos = videos.Where(x => x.Resolution > 0 || x.AudioFormat != AudioFormat.Unknown);
                task.AddVideoToCollection(downloadableVideos);

                task.Status  = MetadataState.METADATA;
                task.Message = String.Format(Properties.Resources.COMMAND_MSG_DONE_METADATA, task.Videos.Count, videos.Count());
                task.Name    = String.IsNullOrWhiteSpace(task.Name) ? videos.Select(x => x.Title).First() : task.Name;
            }
            catch (Exception ex)
            {
                task.Status  = MetadataState.ERROR;
                task.Message = ex.Message;
            }
        }
Exemple #3
0
        public void Execute(object parameter)
        {
            MetadataTask metadataTask = parameter as MetadataTask;

            if (metadataTask == null)
            {
                return;
            }

            tasks.Remove(metadataTask);
        }
Exemple #4
0
        public void Execute(object parameter)
        {
            MetadataTask task = (MetadataTask)parameter;

            if (task.Status != MetadataState.METADATA)
            {
                return;
            }

            pathGetter.SetExtensionFilter(new string[] { });
            pathGetter.SetSuggestedFilename(task.SuggestedFilename);
            string pathToSave = pathGetter.GetPath();

            if (pathToSave == null)
            {
                return;
            }

            Task.Run(async() => await DownloadToFile(task, pathToSave));
        }
Exemple #5
0
        private async Task DownloadToFile(MetadataTask task, string pathToSave)
        {
            YouTubeVideo vid             = task.SelectedVideo.YoutubeVideo;
            long         totalDownloaded = 0;

            try
            {
                task.Status  = MetadataState.RUNNING;
                task.Message = Properties.Resources.COMMAND_MSG_URI_SEARCH;
                using (ChunkDownloader client = new ChunkDownloader())
                {
                    client.OnProgress += (new ProgressHandler(task)).HandleProgress;

                    totalDownloaded = await client.DownloadToFile(vid.Uri, pathToSave);
                }
                task.Status  = MetadataState.METADATA;
                task.Message = String.Format(Properties.Resources.COMMAND_MSG_SUCCESS_DOWNLOAD, totalDownloaded.GetBeautifiedByteSize(), pathToSave);
            }
            catch (Exception ex)
            {
                task.Status  = MetadataState.ERROR;
                task.Message = ex.Message + Environment.NewLine + ex.StackTrace;
            }
        }
Exemple #6
0
 internal ConvertProgressHandler(MetadataTask task)
 {
     this.task = task;
 }
Exemple #7
0
        public void Execute(object parameter)
        {
            MetadataTask task = parameter as MetadataTask;

            Task.Run(async() => await FetchMetadata(task));
        }