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; } }
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; } }
public void Execute(object parameter) { MetadataTask metadataTask = parameter as MetadataTask; if (metadataTask == null) { return; } tasks.Remove(metadataTask); }
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)); }
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; } }
internal ConvertProgressHandler(MetadataTask task) { this.task = task; }
public void Execute(object parameter) { MetadataTask task = parameter as MetadataTask; Task.Run(async() => await FetchMetadata(task)); }