124 lines
4.7 KiB
Text
124 lines
4.7 KiB
Text
' Gambas class file
|
|
|
|
'' Instalar para todos los usuarios
|
|
' sudo apt-get -y install yt-dlp
|
|
|
|
'' Forma de uso (incluye imagen en audio)
|
|
' yt-dlp https://soundcloud.com/grupo/cancion --embed-thumbnail
|
|
|
|
Public hProceso As Process
|
|
|
|
Public Sub Form_Open()
|
|
Me.Title = "SoundClouding - version " & Application.Version
|
|
Giro.Visible = False
|
|
Giro.Stop
|
|
' Definimos la shell para llamadas...
|
|
System.Shell = "/bin/bash"
|
|
CompruebaDL()
|
|
labelProcesando.Text = ""
|
|
End
|
|
|
|
|
|
Public Sub Form_Drop()
|
|
Dim cadenaDrag As String
|
|
'Message.Info(("Recibido en pegado:" & Drag.Format))
|
|
If Drag.Format = "text/plain" Then
|
|
'Borramos caracteres NULL (\x00) del codigo UNICODE recibido
|
|
'cadenaDrag = Replace(Drag.Paste("text/unicode"), "\x00", "")
|
|
cadenaDrag = Replace(Drag.Paste("text/plain"), "\x00", "")
|
|
txtURL.Text = cadenaDrag
|
|
Else
|
|
Message.Title = ("URL no válida")
|
|
Message.Warning(("Solo puede arrastrar y soltar una URL") & gb.CrLf & ("Si tiene algún problema, pruebe a cortar y pegar la dirección"))
|
|
Endif
|
|
End
|
|
|
|
Public Sub botonDescargar_Click()
|
|
Dim NombreFichero As String
|
|
'Crear la carpeta SoundClouding
|
|
Shell "mkdir -p " & User.Home & "/SoundClouding" Wait
|
|
|
|
' Desactivamos para evitar pulsar más de una vez a los nerviosos
|
|
botonDescargar.Enabled = False
|
|
|
|
If txtURL.Text <> ""
|
|
' Mostramos que estamos haciendo algo...
|
|
labelProcesando.Text = ("Chequeando URL y ficheros multimedia...")
|
|
' Obtener el nombre de fichero
|
|
'Shell "echo -ne $(yt-dlp " & txtURL.Text & " --get-filename)" To NombreFichero
|
|
'Shell "echo -ne $(yt-dlp " & txtURL.Text & " -F 2>/dev/null|grep mp4|grep -v 'only'|tail -1|awk '{print $1})" To NombreFichero
|
|
Shell "echo -ne $(yt-dlp " & txtURL.Text & " -F 2>/dev/null|grep mp4|grep -v 'only'|tail -1|awk '{print $1}')" To NombreFichero
|
|
'Message.Info(("ID de video:" & NombreFichero))
|
|
|
|
If NombreFichero = ""
|
|
Message.Title = ("Error en URL")
|
|
Message.Error(("La URL indicada no se puede procesar para extraer audio/vídeo"))
|
|
txtURL.Text = ""
|
|
Else
|
|
Dim MejorFormato As String
|
|
'' Obtener el ID del mejor formato MP4
|
|
Shell "echo -ne $(yt-dlp -F " & txtURL.Text & " 2>/dev/null|grep mp4|grep -v 'only'|tail -1|awk '{print $1}' )" To MejorFormato
|
|
labelProcesando.Text = ("Descargando multimedia (audio/vídeo)")
|
|
'Giro.Visible = True
|
|
'Giro.Start
|
|
'Giro.Refresh
|
|
txtGira.Visible = True
|
|
Wait 0.1
|
|
' Descargamos musica/Video e incluimos la imagen de la caratula embebida
|
|
If chkMusica.Value Then
|
|
'Shell "cd " & User.Home & "/SoundClouding ; youtube-dl " & txtURL.Text & " --embed-thumbnail -x --audio-format mp3 " Wait
|
|
hProceso = Shell ("cd " & User.Home & "/SoundClouding ; yt-dlp " & txtURL.Text & " -x --audio-format mp3 ") For Read As "Proceso"
|
|
Else
|
|
'Shell "cd " & User.Home & "/SoundClouding ; youtube-dl " & txtURL.Text & " --embed-thumbnail" Wait ' Descargar por ID (-f)
|
|
hProceso = Shell ("cd " & User.Home & "/SoundClouding ; yt-dlp -f " & MejorFormato & " " & txtURL.Text) For Read As "Proceso"
|
|
Endif
|
|
Do While hProceso.State = Process.Running
|
|
Select Case txtGira.Text
|
|
Case "|"
|
|
txtGira.Text = "/"
|
|
Case "/"
|
|
txtGira.Text = "-"
|
|
Case "-"
|
|
txtGira.Text = "\\"
|
|
Case "\\"
|
|
txtGira.Text = "|"
|
|
Case Else
|
|
txtGira.Text = "|"
|
|
End Select
|
|
Wait 0.1
|
|
Loop
|
|
'Giro.Stop
|
|
'Giro.Visible = False
|
|
txtGira.Visible = False
|
|
labelProcesando.Text = "Descarga finalizada en: " & User.Home & "/SoundClouding"
|
|
Message.Title = ("Descarga finalizada")
|
|
Message.Info(("Se ha descargado el audio/vídeo en: ") & User.Home & "/SoundClouding")
|
|
txtURL.Text = ""
|
|
Endif
|
|
Else
|
|
Message.Title = ("URL no válida")
|
|
Message.Warning(("Puede arrastrar y soltar una URL") & gb.CrLf & ("Si tiene algún problema, pruebe a cortar y pegar la dirección"))
|
|
Endif
|
|
' Reactivamos el boton
|
|
botonDescargar.Enabled = True
|
|
labelProcesando.Text = ""
|
|
End
|
|
|
|
Public Sub Proceso_Read()
|
|
Dim sline As String
|
|
sline = Read #Last, Lof(Last)
|
|
txtSalida.Text = sline
|
|
End
|
|
|
|
|
|
Public Function CompruebaDL()
|
|
' Comprobamos si existe youtube-dl (VERSION )
|
|
Dim Resultado As String
|
|
Shell "yt-dlp --version 1>/dev/null 2>/dev/null; echo -n $?" To Resultado
|
|
If Resultado <> "0"
|
|
Message.Title = ("Error yt-dlp")
|
|
Message.Error(("No se ha localizado la herramienta externa yt-dlp") & gb.CrLf & ("* Debe instalarlo desde su gestor de paquetes") & gb.CrLf & ("* También puede descargarlo desde: https://yt-dl.org/latest/yt-dlp ") & gb.CrLf & ("* Si lo tiene instalado cree un link en /usr/local/bin/"))
|
|
Quit
|
|
Endif
|
|
End
|
|
|