ePub2iPad/.src/FMain.class

165 lines
6.2 KiB
Text

' Gambas class file
Public globalFichero As String
Public Sub Boton_DesmontarEXIT_Click()
' Desmontar iPad
Shell "umount /mnt/ipad"
' Salir del Programa
Quit
End
Public Sub Boton_Seleccionar_Click()
' Mostrar formulario de Selección ePub/PDF
'form_Fichero.Show
' Vaciamos fichero anterior...
globalFichero = ""
form_Fichero.ShowModal
'Message.Info("El fichero es: " & globalFichero)
If globalFichero <> "" Then
Boton_Seleccionar.Enabled = False
Boton_SubirFichero.Enabled = True
Else
Boton_Seleccionar.Enabled = True
Boton_SubirFichero.Enabled = False
Endif
End
Public Sub Check_Librerias()
'' Librerias/Paquetes: libimobiledevice6 libimobiledevice-utils ifuse libimage-exiftool-perl
Dim errores As Integer = 0
Dim resultado As String
System.Shell = "/bin/bash"
'' chequear libimobiledevice6
Shell "dpkg-query -l libimobiledevice6 1>/dev/null 2>/dev/null ; echo -n $?" To resultado
If resultado Not "0" Then
errores += 1
Endif
'' chequear libimobiledevice-utils
Shell "dpkg-query -l libimobiledevice-utils 1>/dev/null 2>/dev/null ; echo -n $?" To resultado
If resultado <> "0" Then
errores += 1
Endif
'' chequear ifuse
Shell "dpkg-query -l ifuse 1>/dev/null 2>/dev/null ; echo -n $?" To resultado
If resultado <> "0" Then
errores += 1
Endif
If errores > 0 Then
Message.Title = "Librerias y Despendencias"
Message.Error("Hay " & errores & " librerias y/o paquetes que no están instalados en el sistema" & gb.CrLf & gb.CrLf & "Solucionelo ejecutando:" & gb.CrLf & " 'sudo apt -y install libimobiledevice6 libimobiledevice-utils ifuse'" & gb.CrLf & "sudo install -d /mnt/ipad -o ")
'' Si hay errores no se sigue
Quit
Else
'' Crear directorio de montaje /mnt/ipad
Dim USUARIO As String
USUARIO = System.User.Name
Shell "sudo install -d /mnt/ipad -o " & USUARIO
Endif
End
Public Sub Form_Open()
globalFichero = ""
Boton_Seleccionar.Enabled = False
Boton_SubirFichero.Enabled = False
' Lanzar comprobacion de Librerias y Programas
Check_Librerias
' Aviso de nombre sin espacios ni acentos
Message.Title = "ePub to iPad: Ajuste previo de ficheros"
Message.Info("Para funcionamiento optimo, por favor copie los ePub y PDF al directorio /tmp" & gb.CrLf & "Elimine los espacios y acentos del nombre del fichero en /tmp" & gb.CrLf & gb.CrLf & "No afecta a la visualización de los ficheros en el iPad")
End
Public Sub Boton_EmparejarIPAD_Click()
System.Shell = "/bin/bash"
Shell "idevicepair pair"
Message.Title = "Emparejar con iPad"
Message.Info("Continuar tras pulsar 'Confiar' en el iPad")
Shell "ifuse /mnt/ipad"
Boton_EmparejarIPAD.Enabled = False
Boton_Seleccionar.Enabled = True
End
Public Sub Boton_SubirFichero_Click()
System.Shell = "/bin/bash"
Boton_Seleccionar.Enabled = False
Boton_SubirFichero.Enabled = False
Dim RutaIpad As String
RutaIpad = "/mnt/ipad/Books/Purchases/"
Dim FichCompra As String = "/mnt/ipad/Books/Purchases/Purchases.plist"
' BACKUP Previo
Dim FichBackup, FichTMP As String
FichBackup = FichCompra & "." & Year(Now) & "-" & Month(Now) & "-" & Day(Now) & "_" & Hour(Now) & Minute(Now) & Second(Now)
FichTMP = FichCompra & ".tmp"
'Copy FichCompra To FichBackup
Shell "cp " & FichCompra & " " & FichBackup
Dim TITULO As String
Shell "echo -n $(exiftool -Title " & globalFichero & " |awk -F ': ' '{print $2}')" To TITULO
Dim MD5SUM As String
Shell "echo -n $(md5sum F " & globalFichero & " | awk '{print $1}')" To MD5SUM
Dim NOMBREFICHERO As String
Shell "echo -n $(basename " & globalFichero & ")" To NOMBREFICHERO
'Message.Info("Nombre Fichero: " & NOMBREFICHERO)
Dim TipoFichero As String
Shell "echo -n $(exiftool -FileType " & globalFichero & " | awk -F ': ' '{print $2}')" To TipoFichero
'Message.Info("Tipo de fichero: -" & TipoFichero & "-")
If TipoFichero = "PDF" Then
'Message.Info("Has seleccionado un fichero de tipo: " & TipoFichero)
' PDF -> iPad (solo copiar el PDF a la carpeta /mnt/ipad/Books/Purchases)
Shell "cp " & globalFichero & " " & RutaIpad & NOMBREFICHERO
Endif
If TipoFichero = "EPUB" Then
'Message.Info("Has seleccionado un fichero de tipo: " & TipoFichero)
' EPUB -> iPad (Copiarlo como fichero zip )
' Crear carpeta .epub
' Descomprimir directamente desde ruta ePub Origen a ruta iPad con el nombre del fichero
Shell "unzip " & globalFichero & " -d " & RutaIpad & NOMBREFICHERO
''Shell "mkdir -p " & RutaIpad & NOMBREFICHERO & "; cp " & globalFichero & " " & RutaIpad & NOMBREFICHERO & "/" & NOMBREFICHERO & ".zip"
'Message("copiado")
''Shell "cd " & RutaIpad & NOMBREFICHERO & "; unzip *.zip ; rm *.zip"
'Message("extraido")
Endif
Shell "notify-send -t 6000 'Subiendo fichero al iPad. Espere a que termine el proceso'"
' Regenerar el XML de Purchases del iPad
Dim hArchivo, hArchivoTMP As File
Dim Lineas As Integer
Dim Texto As String
hArchivo = Open FichCompra For Read
hArchivoTMP = Open FichTMP For Write Create
Dim numLineas, linea As Integer
Shell "echo -n $(wc -l " & FichCompra & " |awk '{print $1}')" To numLineas
numLineas = numLineas - 3
linea = 0
While linea < numLineas
Line Input #hArchivo, Texto
Print #hArchivoTMP, Texto
linea += 1
Wend
Close hArchivo
' Grabamos nuevos datos
Print #hArchivoTMP, " <dict>"
Print #hArchivoTMP, " <key>Inserted-By-iBooks</key>"
Print #hArchivoTMP, " <true/>"
Print #hArchivoTMP, " <key>Name</key>"
Print #hArchivoTMP, " <string>" & TITULO & "</string>"
Print #hArchivoTMP, " <key>Package Hash</key>"
Print #hArchivoTMP, " <string>" & MD5SUM & "</string>"
Print #hArchivoTMP, " <key>Path</key>"
Print #hArchivoTMP, " <string>" & NOMBREFICHERO & "</string>"
Print #hArchivoTMP, " <key>importDate</key>"
Print #hArchivoTMP, " <date>2023-07-31T18:02:06Z</date>"
Print #hArchivoTMP, " </dict>"
' Cerramos el XML
Print #hArchivoTMP, " </array>"
Print #hArchivoTMP, "</dict>"
Print #hArchivoTMP, "</plist>"
Close hArchivoTMP
Shell "cp " & FichTMP & " " & FichCompra & "; rm " & FichTMP
Message.Title = "ePub to iPad"
Message.Info("Se ha subido el fichero al iPad")
globalFichero = ""
Boton_Seleccionar.Enabled = True
End