private void btnDownload_Click(object sender, EventArgs e) { btnDownload.Enabled = false; YoutubeFormat[] items = this.FormatBucket.ToArray(); YoutubeFormat item = (YoutubeFormat)items.GetValue(tableResult.CurrentCell.RowIndex); using (WebClient cl = new WebClient()) { cl.DownloadProgressChanged += DownloadProgressChange; cl.DownloadFileCompleted += new AsyncCompletedEventHandler(OnCompleteDownload); cl.DownloadFileAsync( new System.Uri(item.getUrl()), Path.Combine(DownloadPath, item.GetFilename() + "." + item.GetExt()) ); } }
public void DrawDatatable(dynamic yt = null) { this.dataTable.Columns.Clear(); this.dataTable.Rows.Clear(); DataColumn[] columns = { new DataColumn("Ext"), new DataColumn("Size (Kb)"), new DataColumn("Audio Codec"), new DataColumn("Video Codec") }; this.dataTable.Columns.AddRange(columns); if (yt != null) { this.FormatBucket.Clear(); foreach (var item in yt.formats) { var filesize = (item.filesize == null) ? 0 : item.filesize; var vcodec = (item.vcodec == null) ? 0 : item.vcodec; var acodec = (item.acodec == null) ? 0 : item.acodec; YoutubeFormat f = new YoutubeFormat(); f.SetExt(Convert.ToString(item.ext)); f.SetFilesize((int)filesize); f.SetAcodec(Convert.ToString(acodec)); f.SetVcodec(Convert.ToString(vcodec)); f.SetUrl(Convert.ToString(item.url)); f.SetFilename(Convert.ToString(yt.fulltitle)); this.FormatBucket.Add(f); Object[] c = { item.ext, ((int)filesize / 1024), item.acodec, item.vcodec }; this.dataTable.Rows.Add(c); } } tableResult.DataSource = this.dataTable; }
private List <YoutubeFormat> GetFormatsInternal() { string rawVideoFormats; using (var process = CreateProcess("--list-formats")) { process.Start(); _logger.Info("Retrieving video formats..."); rawVideoFormats = process.StandardOutput.ReadToEnd(); process.WaitForExit(); } _logger.Debug("Formats:"); _logger.Debug(rawVideoFormats); var lines = rawVideoFormats.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); var formats = new List <YoutubeFormat>(); foreach (var line in lines) { if (!line.StartsWithDigit()) { continue; } var match = AudioVideoFormatRegex.Match(line); if (!match.Success) { continue; } int code; if (!int.TryParse(match.Groups["code"].Value, out code)) { continue; } var extension = match.Groups["ext"].Value; var format = new YoutubeFormat { Code = code, Extension = extension }; var kind = match.Groups["kind"].Value; if ("audio".Equals(kind)) { format.Kind = YoutubeFormatKind.Audio; } if ("video".Equals(kind)) { format.Kind = YoutubeFormatKind.Video; } var res = match.Groups["res"].Value; if (format.Kind == YoutubeFormatKind.Video) { var dimensions = res.Split(new[] { 'x' }, 2, StringSplitOptions.RemoveEmptyEntries); if (dimensions.Length == 2) { int width, height; if (int.TryParse(dimensions[0], out width) && int.TryParse(dimensions[1], out height)) { format.VideoWidth = width; format.VideoHeight = height; } } } int quality; if (int.TryParse(match.Groups["quality"].Value, out quality)) { format.Quality = quality; } formats.Add(format); } return(formats); }