SoundClouding/.src/FMain.class

132 lines
5.1 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", "")
'Eliminamos cadena solo para Escritorio
cadenaDrag = Replace(Drag.Paste("text/plain"), "app=desktop&", "")
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 <> "" Then
'Eliminamos cadena solo para Escritorio
txtURL.Text = Replace(txtURL.Text, "app=desktop&", "")
' 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
Shell "notify-send -t 6000 '📽️ SoundClouding:\nDescargando audio/vídeo...\nEspere a que finalice'"
labelProcesando.Text = "Descargando... Espere a que finalice"
Wait 0.1
'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 ; yt-dlp " & 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 ; yt-dlp " & txtURL.Text & " --embed-thumbnail" Wait ' Descargar por ID (-f)
'hProceso = Shell ("cd " & User.Home & "/SoundClouding ; yt-dlp " & txtURL.Text & " --embed thumbnail --ignore-errors") 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