Jason's ogg 2.1 YouTube Downloader C#

Iniciado por JohnConnor, 17 Marzo 2016, 05:24 AM

0 Miembros y 1 Visitante están viendo este tema.

JohnConnor

Buenas, les traigo un mini proyecto en fase de pruebas para que lo chequeen.
Jason es un downloader de audio de Youtube, tambien organiza y lista las canciones permitiendo cambiar su ubicacion, calidad, nombre, etc.

Esta programado en C# y utiliza la libreria DevExpress. Para funcionar requiere "Microsoft .Net Framework" y cualquier reproductor OGG. (yo recomiendo VLC)  .






NOTA: Jason no crackea ni proporciona audio/video protegido por derechos de autor (los mismos son bloqueados)

Links descargas:
(proyecto visual studio, portable y  ejecutabbe)




el que quiera participar del proyecto lo puede hacer aca: http://foro.code-makers.es/viewtopic.php?f=21&t=65   ;-)


Código (cs) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Web;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Media;
using System.Globalization;

namespace Jason21
{
    public partial class Form1 : Form
    {
        List<string> Canciones = new List<string>();
        List<string> urlCanciones = new List<string>();
        List<string> mArchivos = new List<string>();
        public bool PrimerCheck = true;
        public string input;
        public string[] parts1;
        public string[] parts2;
        public string[] parts3;
        public string Titulo;
        public string[] ImgP;
        public string[] ImgTP;
        public string[] ImgTP2;
        public string[] ImgT;
        public string[] videoID;

        // v1.1 Reformas
        public int intentoDescarga;
        public int maxIntentos;
        public string ultimaURL;
        public int uU = 0;

        // v2.0 Reformas
        public string urlADS;

        //v2.1 Reformas
        public string archivo_Configuracion;
        public string CarpetaDescargas;
        public float megaBytesGlobal;
        public int sDescargas = 0;
        public bool Cancelar_Busqueda = false;
        public string ultimaPestana = "controlBuscar";
        public int tDescargas = 0;
        public int fDescargas = 0;
        public Form1()
        {
            InitializeComponent();
            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser2.ScriptErrorsSuppressed = true;
            listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
            lista_Biblioteca.MouseDoubleClick += new MouseEventHandler(lista_Biblioteca_DoubleClick);
            // Control_Pestanas.SelectedPageChanged += new TabControlCancelEventHandler(Control_Pestanas_Selecting);
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            archivo_Configuracion = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config");
            CheckConfig();
            ListarCanciones();
            intentoDescarga = 2;
            boton_CancelarBusqueda.Enabled = false;
            Application.DoEvents();
            ListarCanciones();
            Application.DoEvents();
            webBrowser2.Navigate("http://jason.esy.es/");
        }



       

        private void boton_Buscar_Click(object sender, EventArgs e)
        {
            boton_Buscar.Enabled = false;
            boton_CancelarBusqueda.Enabled = true;
            Canciones.Clear();
            urlCanciones.Clear();
            listBox1.Items.Clear();
            Cancelar_Busqueda = false;
            for (int i = 1; i <= (int)input_pagBusqueda.Value; i++)
            {
                if (Cancelar_Busqueda)
                {
                    i = 100;
                }
                else
                {
                    Buscar_Agregar(inputText_Buscar.Text, i);
                }
            }
        }

        public void Buscar_Agregar(string Busqueda, int Pagina)
        {
            Control_Pestanas.SelectedPageIndex= 0;
            webBrowser1.Navigate("https://www.youtube.com/results?search_query=" + Busqueda + "&page=" + Pagina);
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            HtmlElementCollection theElementCollection = default(HtmlElementCollection);
            theElementCollection = webBrowser1.Document.GetElementsByTagName("a");
            foreach (HtmlElement curElement in theElementCollection)
            {
                if (curElement.GetAttribute("classname") == "yt-uix-sessionlink yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2       spf-link ")
                {
                    bool esLista = curElement.GetAttribute("href").Contains("list");
                    if (!esLista)
                    {
                        listBox1.Items.Add(curElement.GetAttribute("InnerText"));
                        urlCanciones.Add(curElement.GetAttribute("href"));
                    }
                }
            }
        }

        private void boton_CancelarBusqueda_Click(object sender, EventArgs e)
        {
            boton_CancelarBusqueda.Enabled = false;
            boton_Buscar.Enabled = true;
            Cancelar_Busqueda = true;
        }

       
        private void listBox1_DoubleClick(object sender, MouseEventArgs e)
        {
            if (sDescargas <= 3)
            {
                ConvertirCancion(sender, e);
            }
            else
            {
                MessageBox.Show("The free version does not allow many downloads.");
            }
        }
        public void ConvertirCancion(object sender, MouseEventArgs e)
        {
            int index = this.listBox1.IndexFromPoint(e.Location);
            int urlB = listBox1.SelectedIndex;
            label_ArchivosDescargados.Text = tDescargas.ToString();
            if (index != System.Windows.Forms.ListBox.NoMatches)
            {
                tabControl1.SelectedIndex = 1;
                lista_Descargas.Items.Add(listBox1.SelectedItem);
                label_EstadoDescarga.Text = "It becoming! please, be patient...";
                label_LocacionDescarga.Text = urlCanciones[urlB];
                webBrowser1.Navigate(urlCanciones[listBox1.SelectedIndex]);
                while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }
                try
                {
                    input = webBrowser1.DocumentText;
                    parts1 = input.Split(new string[] { "type=audio" }, StringSplitOptions.None);
                    maxIntentos = parts1.Count();
                    parts2 = parts1[intentoDescarga].Split(new string[] { "url=" }, StringSplitOptions.None);
                    parts3 = parts2[1].Split(new string[] { "\\" }, StringSplitOptions.None);
                    Titulo = webBrowser1.Document.Title.Replace(" - YouTube", "");
                    label_EstadoDescarga.Text = "Successful conversion";
                    label_NombreDescarga.Text = Titulo + ".ogg";
                    videoID = urlCanciones[listBox1.SelectedIndex].Split(new string[] { "=" }, StringSplitOptions.None);
                    webBrowser1.Navigate("about:blank");
                    Application.DoEvents();
                    DescargarCancion();
                }
                catch
                {
                    fDescargas ++;
                    label_DescargasFallidas.Text = fDescargas.ToString();
                    label_EstadoDescarga.Text = "Error becoming  file - try again later.";
                    label_NombreDescarga.Text = Titulo + ".ogg\"";
                    webBrowser1.Navigate("about:blank");
                }
            }
        }

        public void DescargarCancion()
        {
            label_EstadoDescarga.Text = "Downloading...";
            WebClient Client = new WebClient();
            Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
            Client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
            Client.DownloadFileAsync(new Uri((HttpUtility.UrlDecode(parts3[0]))), (CarpetaDescargas + "/" + Titulo + ".ogg").Replace("?", ""));
            Application.DoEvents();
            sDescargas++;
        }

        public void FalloDescarga()
        {
            fDescargas++;
            sDescargas--;
            label_DescargasFallidas.Text = fDescargas.ToString();
            label_NombreDescarga.Text = intentoDescarga.ToString() + " - Error : \"" + Titulo + ".ogg\"  is protected by copyright.";
            File.Delete(CarpetaDescargas + "/" + Titulo + ".ogg");
            Application.DoEvents();
            /* System.Threading.Thread.Sleep(2000);
             this.intentoDescarga += 1;
             if (intentoDescarga > 1)
             {
                 ConvertirCancion(null, null);
             }
             if (intentoDescarga > maxIntentos - 2)
             {
                 intentoDescarga = 1;
             }
             */
        }
        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            int Porciento = ((int)e.BytesReceived * 100) / ((int)e.TotalBytesToReceive);
            label_ArchivosDescargando.Text = sDescargas.ToString();
            try
            {
                progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
                progressBar1.Value = (int)e.BytesReceived / 100;
                double megaBytesT = ((double)e.TotalBytesToReceive / 1024) / (1024);
                double megaBytesR = ((double)e.BytesReceived / 1024) / (1024);
            }
            catch
            {
                label_EstadoDescarga.Text = " Downloading - " + Titulo;
            }
 
            try
            {

                progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
                progressBar1.Value = (int)e.BytesReceived / 100;
                double megaBytesT = ((double)e.TotalBytesToReceive / 1024) / (1024);
                megaBytesGlobal = (float)megaBytesT;
                double megaBytesR = ((double)e.BytesReceived / 1024) / (1024);
                if (megaBytesT <= (float)0.5)
                {
                    FalloDescarga();
                }
                else
                {
                    label_EstadoDescarga.Text = " Downloading  " + Porciento + " %";
                    label_MBr.Text = megaBytesR.ToString().Substring(0, 4) + "Mb.";
                    label_MBt.Text = megaBytesT.ToString().Substring(0, 4) + "Mb.";
                }
            }
            catch
            {
                Application.DoEvents();
            }
        }

        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
     
            if (e.Error != null)
            {
                FalloDescarga();
            }
            else
            {
                string Cancion = CarpetaDescargas + "\\" + Titulo + ".ogg";
                if (megaBytesGlobal <= (float)0.5)
                {
                    label_EstadoDescarga.Text = "Unknow error";
                }
                else
                {
                    sDescargas--;
                    tDescargas++;
                    label_ArchivosDescargando.Text = sDescargas.ToString();
                    label_ArchivosDescargados.Text = tDescargas.ToString();
                    label_EstadoDescarga.Text = "Download completed";
                }

                if (checkBox_AbrirFinal.Checked)
                {
                    Process.Start(CarpetaDescargas); //, string.Format("/select,\"{0}\"", Titulo + ".ogg"));
                    Application.DoEvents();
                    SendKeys.Send(Titulo);
                }


                if (checkBox_PlayFinal.Checked)
                {

                    Process.Start(Cancion);
                    Application.DoEvents();
                }
            }
        }

        public void ListarCanciones()
        {
            if (!PrimerCheck)
            {
                mArchivos.Clear();
                lista_Biblioteca.Items.Clear();
            }
            string[] archivos = Directory.GetFiles(CarpetaDescargas, "*.*", SearchOption.TopDirectoryOnly);
            if (archivos.Length >= 1)
            {
                foreach (string nombre in archivos)
                {
                    bool esOGG = nombre.Contains(".ogg");
                    bool esMP3 = nombre.Contains(".mp3");
                    bool filtro = nombre.ToLower().Contains(textBox_Library_Filter.Text.ToLower());
                    if (esOGG && filtro || esMP3 && filtro)
                    {

                        mArchivos.Add(nombre);
                        lista_Biblioteca.Items.Add(nombre.Replace(CarpetaDescargas + "\\", "") + "                                    -                                  Location:  " + nombre);

                    }
                }
            }
            PrimerCheck = false;
        }

        public void CheckConfig()
        {
            bool abrirFinal = archivo_Configuracion.Contains("openonfinish=true");
            bool playFinal = archivo_Configuracion.Contains("playonfinish=true");
            bool usarMyMusic = archivo_Configuracion.Contains("usemymusic=true");
            if (abrirFinal)
            {
                usar_MyMusic.Checked = true;
            }
            else
            {
                usar_MyMusic.Checked = false;
            }
            if (playFinal)
            {
                usar_OtraCarpeta.Checked = true;
            }
            else
            {
                usar_OtraCarpeta.Checked = false;
            }
            if (usarMyMusic)
            {
                usar_MyMusic.Checked = true;
                usar_OtraCarpeta.Checked = false;
                elegir_Carpeta.Enabled = false;
                CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                textBox_PathChoice.Text = CarpetaDescargas;
                textBox_PathChoice.Enabled = false;
            }
            else if (!usarMyMusic)
            {
                usar_MyMusic.Checked = false;
                usar_OtraCarpeta.Checked = true;
                elegir_Carpeta.Enabled = true;
                CarpetaDescargas = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config");
                textBox_PathChoice.Text = CarpetaDescargas;
            }
        }



        // FIN FIN FIN FIN













     
   

        private void checkEdit8_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void groupControl4_Paint(object sender, PaintEventArgs e)
        {

        }

        private void comboBox_Filter_Library_type_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void checkBox_AbrirFinal_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox_AbrirFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("openonfinish=false", "openonfinish=true");
            }
            else if (!checkBox_AbrirFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("openonfinish=true", "openonfinish=false");
            }
        }

        private void checkBox_PlayFinal_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox_PlayFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("playonfinish=false", "playonfinish=true");
            }
            else if (!checkBox_PlayFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("playonfinish=true", "playonfinish=false");
            }
        }

        private void usar_MyMusic_CheckedChanged(object sender, EventArgs e)
        {
            if (usar_MyMusic.Checked && archivo_Configuracion.Contains("usemymusic=false"))
            {
                archivo_Configuracion = archivo_Configuracion.Replace("usemymusic=false", "usemymusic=true");
                usar_OtraCarpeta.Checked = false;
                textBox_PathChoice.Enabled = false;
                elegir_Carpeta.Enabled = false;
                CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                textBox_PathChoice.Text = CarpetaDescargas;
                using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"))
                {
                    ArchivoDownpath.Write("");
                }
            }
        }

        private void usar_OtraCarpeta_CheckedChanged(object sender, EventArgs e)
        {
            if (usar_OtraCarpeta.Checked && archivo_Configuracion.Contains("usemymusic=true"))
            {
                archivo_Configuracion = archivo_Configuracion.Replace("usemymusic=true", "usemymusic=false");
                usar_MyMusic.Checked = false;
                textBox_PathChoice.Enabled = true;
                elegir_Carpeta.Enabled = true;
            }
        }

        private void boton_AplicarConfig_Click(object sender, EventArgs e)
        {
            using (StreamWriter ArchivoConfig = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config"))
            {
                ArchivoConfig.Write(archivo_Configuracion);
            }
            if (usar_MyMusic.Checked)
            {
                Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            }
            else
            {
                CarpetaDescargas = textBox_PathChoice.Text;
            }
            //continuar
            using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"))
            {
                ArchivoDownpath.Write(CarpetaDescargas);
            }
        }

        private void boton_Reset_Click(object sender, EventArgs e)
        {
            using (StreamWriter ArchivoConfig = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config"))
            {
                ArchivoConfig.Write("openonfinish=true;playonfinish=false;usemymusic=true;otherpath:();");
                archivo_Configuracion = ("openonfinish=true;playonfinish=false;usemymusic=true;otherpath:();");
                CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            }

            CheckConfig();

            using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"))
            {
                ArchivoDownpath.Write("");
            }
        }

        private void elegir_Carpeta_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox_PathChoice.Text = folderBrowserDialog1.SelectedPath;
            }
        }

        private void simpleButton3_Click(object sender, EventArgs e)
        {
            lista_Descargas.CheckedItems.OfType<string>().ToList().ForEach(lista_Descargas.Items.Remove);
        }

        private void simpleButton4_Click(object sender, EventArgs e)
        {
            lista_Descargas.Items.Clear();
        }

        private void link_AbrirCarpeta_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start(CarpetaDescargas);
        }


        private void lista_Biblioteca_DoubleClick(object sender, EventArgs e)
        {
            try {
                Process.Start(mArchivos[lista_Biblioteca.SelectedIndex]);
            } catch
            {
                Process.Start(mArchivos[lista_Biblioteca.SelectedIndex]);
            }
        }
        private void lista_Descargas_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_Library_Filter.Text = lista_Biblioteca.SelectedItem.ToString();
            }
            catch
            {
                textBox_Library_Filter.Text = lista_Biblioteca.SelectedItem.ToString();
            }
        }


        private void textBox_Library_Filter_TextChanged(object sender, EventArgs e)
        {
            ListarCanciones();
        }

        private void control_Biblioteca_Paint(object sender, PaintEventArgs e)
        {
            // ListarCanciones();
            if (ultimaPestana != "controlBiblioteca")
            {
                ListarCanciones();
            } else
            {
                Application.DoEvents();
            }

        }

        private void lista_Biblioteca_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void label13_Click(object sender, EventArgs e)
        {

        }

        private void lista_Descargas_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }
    }
}




Bueno, eso es todo! Saludos

.:UND3R:.

Cita de: JohnConnor en 17 Marzo 2016, 05:24 AM
Buenas, les traigo un mini proyecto en fase de pruebas para que lo chequeen.
Jason es un downloader de audio de Youtube, tambien organiza y lista las canciones permitiendo cambiar su ubicacion, calidad, nombre, etc.

Esta programado en C# y utiliza la libreria DevExpress. Para funcionar requiere "Microsoft .Net Framework" y cualquier reproductor OGG. (yo recomiendo VLC)  .






NOTA: Jason no crackea ni proporciona audio/video protegido por derechos de autor (los mismos son bloqueados)

Links descargas:
(proyecto visual studio, portable y  ejecutabbe)




el que quiera participar del proyecto lo puede hacer aca: http://foro.code-makers.es/viewtopic.php?f=21&t=65   ;-)


Código (cs) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Web;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Media;
using System.Globalization;

namespace Jason21
{
    public partial class Form1 : Form
    {
        List<string> Canciones = new List<string>();
        List<string> urlCanciones = new List<string>();
        List<string> mArchivos = new List<string>();
        public bool PrimerCheck = true;
        public string input;
        public string[] parts1;
        public string[] parts2;
        public string[] parts3;
        public string Titulo;
        public string[] ImgP;
        public string[] ImgTP;
        public string[] ImgTP2;
        public string[] ImgT;
        public string[] videoID;

        // v1.1 Reformas
        public int intentoDescarga;
        public int maxIntentos;
        public string ultimaURL;
        public int uU = 0;

        // v2.0 Reformas
        public string urlADS;

        //v2.1 Reformas
        public string archivo_Configuracion;
        public string CarpetaDescargas;
        public float megaBytesGlobal;
        public int sDescargas = 0;
        public bool Cancelar_Busqueda = false;
        public string ultimaPestana = "controlBuscar";
        public int tDescargas = 0;
        public int fDescargas = 0;
        public Form1()
        {
            InitializeComponent();
            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser2.ScriptErrorsSuppressed = true;
            listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
            lista_Biblioteca.MouseDoubleClick += new MouseEventHandler(lista_Biblioteca_DoubleClick);
            // Control_Pestanas.SelectedPageChanged += new TabControlCancelEventHandler(Control_Pestanas_Selecting);
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            archivo_Configuracion = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config");
            CheckConfig();
            ListarCanciones();
            intentoDescarga = 2;
            boton_CancelarBusqueda.Enabled = false;
            Application.DoEvents();
            ListarCanciones();
            Application.DoEvents();
            webBrowser2.Navigate("http://jason.esy.es/");
        }



       

        private void boton_Buscar_Click(object sender, EventArgs e)
        {
            boton_Buscar.Enabled = false;
            boton_CancelarBusqueda.Enabled = true;
            Canciones.Clear();
            urlCanciones.Clear();
            listBox1.Items.Clear();
            Cancelar_Busqueda = false;
            for (int i = 1; i <= (int)input_pagBusqueda.Value; i++)
            {
                if (Cancelar_Busqueda)
                {
                    i = 100;
                }
                else
                {
                    Buscar_Agregar(inputText_Buscar.Text, i);
                }
            }
        }

        public void Buscar_Agregar(string Busqueda, int Pagina)
        {
            Control_Pestanas.SelectedPageIndex= 0;
            webBrowser1.Navigate("https://www.youtube.com/results?search_query=" + Busqueda + "&page=" + Pagina);
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            HtmlElementCollection theElementCollection = default(HtmlElementCollection);
            theElementCollection = webBrowser1.Document.GetElementsByTagName("a");
            foreach (HtmlElement curElement in theElementCollection)
            {
                if (curElement.GetAttribute("classname") == "yt-uix-sessionlink yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2       spf-link ")
                {
                    bool esLista = curElement.GetAttribute("href").Contains("list");
                    if (!esLista)
                    {
                        listBox1.Items.Add(curElement.GetAttribute("InnerText"));
                        urlCanciones.Add(curElement.GetAttribute("href"));
                    }
                }
            }
        }

        private void boton_CancelarBusqueda_Click(object sender, EventArgs e)
        {
            boton_CancelarBusqueda.Enabled = false;
            boton_Buscar.Enabled = true;
            Cancelar_Busqueda = true;
        }

       
        private void listBox1_DoubleClick(object sender, MouseEventArgs e)
        {
            if (sDescargas <= 3)
            {
                ConvertirCancion(sender, e);
            }
            else
            {
                MessageBox.Show("The free version does not allow many downloads.");
            }
        }
        public void ConvertirCancion(object sender, MouseEventArgs e)
        {
            int index = this.listBox1.IndexFromPoint(e.Location);
            int urlB = listBox1.SelectedIndex;
            label_ArchivosDescargados.Text = tDescargas.ToString();
            if (index != System.Windows.Forms.ListBox.NoMatches)
            {
                tabControl1.SelectedIndex = 1;
                lista_Descargas.Items.Add(listBox1.SelectedItem);
                label_EstadoDescarga.Text = "It becoming! please, be patient...";
                label_LocacionDescarga.Text = urlCanciones[urlB];
                webBrowser1.Navigate(urlCanciones[listBox1.SelectedIndex]);
                while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }
                try
                {
                    input = webBrowser1.DocumentText;
                    parts1 = input.Split(new string[] { "type=audio" }, StringSplitOptions.None);
                    maxIntentos = parts1.Count();
                    parts2 = parts1[intentoDescarga].Split(new string[] { "url=" }, StringSplitOptions.None);
                    parts3 = parts2[1].Split(new string[] { "\\" }, StringSplitOptions.None);
                    Titulo = webBrowser1.Document.Title.Replace(" - YouTube", "");
                    label_EstadoDescarga.Text = "Successful conversion";
                    label_NombreDescarga.Text = Titulo + ".ogg";
                    videoID = urlCanciones[listBox1.SelectedIndex].Split(new string[] { "=" }, StringSplitOptions.None);
                    webBrowser1.Navigate("about:blank");
                    Application.DoEvents();
                    DescargarCancion();
                }
                catch
                {
                    fDescargas ++;
                    label_DescargasFallidas.Text = fDescargas.ToString();
                    label_EstadoDescarga.Text = "Error becoming  file - try again later.";
                    label_NombreDescarga.Text = Titulo + ".ogg\"";
                    webBrowser1.Navigate("about:blank");
                }
            }
        }

        public void DescargarCancion()
        {
            label_EstadoDescarga.Text = "Downloading...";
            WebClient Client = new WebClient();
            Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
            Client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
            Client.DownloadFileAsync(new Uri((HttpUtility.UrlDecode(parts3[0]))), (CarpetaDescargas + "/" + Titulo + ".ogg").Replace("?", ""));
            Application.DoEvents();
            sDescargas++;
        }

        public void FalloDescarga()
        {
            fDescargas++;
            sDescargas--;
            label_DescargasFallidas.Text = fDescargas.ToString();
            label_NombreDescarga.Text = intentoDescarga.ToString() + " - Error : \"" + Titulo + ".ogg\"  is protected by copyright.";
            File.Delete(CarpetaDescargas + "/" + Titulo + ".ogg");
            Application.DoEvents();
            /* System.Threading.Thread.Sleep(2000);
             this.intentoDescarga += 1;
             if (intentoDescarga > 1)
             {
                 ConvertirCancion(null, null);
             }
             if (intentoDescarga > maxIntentos - 2)
             {
                 intentoDescarga = 1;
             }
             */
        }
        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            int Porciento = ((int)e.BytesReceived * 100) / ((int)e.TotalBytesToReceive);
            label_ArchivosDescargando.Text = sDescargas.ToString();
            try
            {
                progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
                progressBar1.Value = (int)e.BytesReceived / 100;
                double megaBytesT = ((double)e.TotalBytesToReceive / 1024) / (1024);
                double megaBytesR = ((double)e.BytesReceived / 1024) / (1024);
            }
            catch
            {
                label_EstadoDescarga.Text = " Downloading - " + Titulo;
            }
 
            try
            {

                progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
                progressBar1.Value = (int)e.BytesReceived / 100;
                double megaBytesT = ((double)e.TotalBytesToReceive / 1024) / (1024);
                megaBytesGlobal = (float)megaBytesT;
                double megaBytesR = ((double)e.BytesReceived / 1024) / (1024);
                if (megaBytesT <= (float)0.5)
                {
                    FalloDescarga();
                }
                else
                {
                    label_EstadoDescarga.Text = " Downloading  " + Porciento + " %";
                    label_MBr.Text = megaBytesR.ToString().Substring(0, 4) + "Mb.";
                    label_MBt.Text = megaBytesT.ToString().Substring(0, 4) + "Mb.";
                }
            }
            catch
            {
                Application.DoEvents();
            }
        }

        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
     
            if (e.Error != null)
            {
                FalloDescarga();
            }
            else
            {
                string Cancion = CarpetaDescargas + "\\" + Titulo + ".ogg";
                if (megaBytesGlobal <= (float)0.5)
                {
                    label_EstadoDescarga.Text = "Unknow error";
                }
                else
                {
                    sDescargas--;
                    tDescargas++;
                    label_ArchivosDescargando.Text = sDescargas.ToString();
                    label_ArchivosDescargados.Text = tDescargas.ToString();
                    label_EstadoDescarga.Text = "Download completed";
                }

                if (checkBox_AbrirFinal.Checked)
                {
                    Process.Start(CarpetaDescargas); //, string.Format("/select,\"{0}\"", Titulo + ".ogg"));
                    Application.DoEvents();
                    SendKeys.Send(Titulo);
                }


                if (checkBox_PlayFinal.Checked)
                {

                    Process.Start(Cancion);
                    Application.DoEvents();
                }
            }
        }

        public void ListarCanciones()
        {
            if (!PrimerCheck)
            {
                mArchivos.Clear();
                lista_Biblioteca.Items.Clear();
            }
            string[] archivos = Directory.GetFiles(CarpetaDescargas, "*.*", SearchOption.TopDirectoryOnly);
            if (archivos.Length >= 1)
            {
                foreach (string nombre in archivos)
                {
                    bool esOGG = nombre.Contains(".ogg");
                    bool esMP3 = nombre.Contains(".mp3");
                    bool filtro = nombre.ToLower().Contains(textBox_Library_Filter.Text.ToLower());
                    if (esOGG && filtro || esMP3 && filtro)
                    {

                        mArchivos.Add(nombre);
                        lista_Biblioteca.Items.Add(nombre.Replace(CarpetaDescargas + "\\", "") + "                                    -                                  Location:  " + nombre);

                    }
                }
            }
            PrimerCheck = false;
        }

        public void CheckConfig()
        {
            bool abrirFinal = archivo_Configuracion.Contains("openonfinish=true");
            bool playFinal = archivo_Configuracion.Contains("playonfinish=true");
            bool usarMyMusic = archivo_Configuracion.Contains("usemymusic=true");
            if (abrirFinal)
            {
                usar_MyMusic.Checked = true;
            }
            else
            {
                usar_MyMusic.Checked = false;
            }
            if (playFinal)
            {
                usar_OtraCarpeta.Checked = true;
            }
            else
            {
                usar_OtraCarpeta.Checked = false;
            }
            if (usarMyMusic)
            {
                usar_MyMusic.Checked = true;
                usar_OtraCarpeta.Checked = false;
                elegir_Carpeta.Enabled = false;
                CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                textBox_PathChoice.Text = CarpetaDescargas;
                textBox_PathChoice.Enabled = false;
            }
            else if (!usarMyMusic)
            {
                usar_MyMusic.Checked = false;
                usar_OtraCarpeta.Checked = true;
                elegir_Carpeta.Enabled = true;
                CarpetaDescargas = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config");
                textBox_PathChoice.Text = CarpetaDescargas;
            }
        }



        // FIN FIN FIN FIN













     
   

        private void checkEdit8_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void groupControl4_Paint(object sender, PaintEventArgs e)
        {

        }

        private void comboBox_Filter_Library_type_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void checkBox_AbrirFinal_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox_AbrirFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("openonfinish=false", "openonfinish=true");
            }
            else if (!checkBox_AbrirFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("openonfinish=true", "openonfinish=false");
            }
        }

        private void checkBox_PlayFinal_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox_PlayFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("playonfinish=false", "playonfinish=true");
            }
            else if (!checkBox_PlayFinal.Checked)
            {
                archivo_Configuracion = archivo_Configuracion.Replace("playonfinish=true", "playonfinish=false");
            }
        }

        private void usar_MyMusic_CheckedChanged(object sender, EventArgs e)
        {
            if (usar_MyMusic.Checked && archivo_Configuracion.Contains("usemymusic=false"))
            {
                archivo_Configuracion = archivo_Configuracion.Replace("usemymusic=false", "usemymusic=true");
                usar_OtraCarpeta.Checked = false;
                textBox_PathChoice.Enabled = false;
                elegir_Carpeta.Enabled = false;
                CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                textBox_PathChoice.Text = CarpetaDescargas;
                using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"))
                {
                    ArchivoDownpath.Write("");
                }
            }
        }

        private void usar_OtraCarpeta_CheckedChanged(object sender, EventArgs e)
        {
            if (usar_OtraCarpeta.Checked && archivo_Configuracion.Contains("usemymusic=true"))
            {
                archivo_Configuracion = archivo_Configuracion.Replace("usemymusic=true", "usemymusic=false");
                usar_MyMusic.Checked = false;
                textBox_PathChoice.Enabled = true;
                elegir_Carpeta.Enabled = true;
            }
        }

        private void boton_AplicarConfig_Click(object sender, EventArgs e)
        {
            using (StreamWriter ArchivoConfig = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config"))
            {
                ArchivoConfig.Write(archivo_Configuracion);
            }
            if (usar_MyMusic.Checked)
            {
                Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            }
            else
            {
                CarpetaDescargas = textBox_PathChoice.Text;
            }
            //continuar
            using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"))
            {
                ArchivoDownpath.Write(CarpetaDescargas);
            }
        }

        private void boton_Reset_Click(object sender, EventArgs e)
        {
            using (StreamWriter ArchivoConfig = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config"))
            {
                ArchivoConfig.Write("openonfinish=true;playonfinish=false;usemymusic=true;otherpath:();");
                archivo_Configuracion = ("openonfinish=true;playonfinish=false;usemymusic=true;otherpath:();");
                CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
            }

            CheckConfig();

            using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"))
            {
                ArchivoDownpath.Write("");
            }
        }

        private void elegir_Carpeta_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox_PathChoice.Text = folderBrowserDialog1.SelectedPath;
            }
        }

        private void simpleButton3_Click(object sender, EventArgs e)
        {
            lista_Descargas.CheckedItems.OfType<string>().ToList().ForEach(lista_Descargas.Items.Remove);
        }

        private void simpleButton4_Click(object sender, EventArgs e)
        {
            lista_Descargas.Items.Clear();
        }

        private void link_AbrirCarpeta_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start(CarpetaDescargas);
        }


        private void lista_Biblioteca_DoubleClick(object sender, EventArgs e)
        {
            try {
                Process.Start(mArchivos[lista_Biblioteca.SelectedIndex]);
            } catch
            {
                Process.Start(mArchivos[lista_Biblioteca.SelectedIndex]);
            }
        }
        private void lista_Descargas_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_Library_Filter.Text = lista_Biblioteca.SelectedItem.ToString();
            }
            catch
            {
                textBox_Library_Filter.Text = lista_Biblioteca.SelectedItem.ToString();
            }
        }


        private void textBox_Library_Filter_TextChanged(object sender, EventArgs e)
        {
            ListarCanciones();
        }

        private void control_Biblioteca_Paint(object sender, PaintEventArgs e)
        {
            // ListarCanciones();
            if (ultimaPestana != "controlBiblioteca")
            {
                ListarCanciones();
            } else
            {
                Application.DoEvents();
            }

        }

        private void lista_Biblioteca_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void label13_Click(object sender, EventArgs e)
        {

        }

        private void lista_Descargas_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }
    }
}




Bueno, eso es todo! Saludos

;-) ;-) ;-)

Excelente proyecto, no puede estar más que mejor, te felicito. Nada mejor que dejes el source, pues ayuda mucho a aquellos que desean entender el como desarrollaste ciertas cosas, me quito el sombrero, te felicito.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Eleкtro

Genial herramienta.

¿Has pensado en añadir una característica para poder descargar los videos también? (a la mayor calidad posible disponible en Youtube), sería muy util para descargar videoclips musicales.

Saludos!