SoundClouding/.src/FMain.class
2023-06-26 23:24:21 +02:00

124 lines
4.6 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 "))
Quit
Endif
End