From d9211251164c1a19213da85b2585a91b65e4a14b Mon Sep 17 00:00:00 2001 From: luisgulo Date: Sat, 5 Aug 2023 00:01:12 +0200 Subject: [PATCH] ePub2iPad - primera subida codigo liberado --- .directory | 2 + .gitignore | 18 +++++ .hidden/CHANGELOG | 3 + .icon.png | Bin 0 -> 9301 bytes .project | 23 ++++++ .src/FMain.class | 160 ++++++++++++++++++++++++++++++++++++++++ .src/FMain.form | 65 ++++++++++++++++ .src/form_Fichero.class | 13 ++++ .src/form_Fichero.form | 16 ++++ iPad-logo-pantalla.png | Bin 0 -> 14987 bytes 10 files changed, 300 insertions(+) create mode 100644 .directory create mode 100644 .gitignore create mode 100644 .hidden/CHANGELOG create mode 100644 .icon.png create mode 100644 .project create mode 100644 .src/FMain.class create mode 100644 .src/FMain.form create mode 100644 .src/form_Fichero.class create mode 100644 .src/form_Fichero.form create mode 100644 iPad-logo-pantalla.png diff --git a/.directory b/.directory new file mode 100644 index 0000000..06dab1c --- /dev/null +++ b/.directory @@ -0,0 +1,2 @@ +[Desktop Entry] +Icon=./.icon.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..944c803 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +#---- Gambas files to ignore (v5) +*.gambas +.lock +*~ +core +core.* +vgcore +vgcore.* +.kdbg* +.*.prof +.lang/*.pot +.gambas/* +.settings +.startup +.list +.info +.fuse_hidden* +#---- diff --git a/.hidden/CHANGELOG b/.hidden/CHANGELOG new file mode 100644 index 0000000..e321440 --- /dev/null +++ b/.hidden/CHANGELOG @@ -0,0 +1,3 @@ +* Fri Aug 04 2023 luisgulo 1.0.2 +- Version Inicial + diff --git a/.icon.png b/.icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec8a6b8b0187e23273b5f0af730bfa33dfcae00 GIT binary patch literal 9301 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 Zy;z-|U8+{th@2Aws3>YERLNO{|1a9SMr8m1 literal 0 HcmV?d00001 diff --git a/.project b/.project new file mode 100644 index 0000000..5b18389 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ +# Gambas Project File 3.0 +Title=ePub2iPad +Startup=FMain +Icon=iPad-logo-pantalla.png +Version=1.0.2 +Component=gb.image +Component=gb.gui +Component=gb.form +Description="Transferir ePUBs y PDF a biblioteca eBook de iPAD\nNota: No soporta inclusion de libros con DRM" +Authors="luisgulo (soloconlinux.org.es)" +TabSize=2 +Language=es_ES +Maintainer=luisgulo +Vendor=SoloConLinux +Address=luisgulo@gmail.com +Url=https://repositorio.soloconlinux.org.es +License=General Public License +PackageName=epub2ipad-1.0.2 +Packager=1 +Systems=debian +Menus=debian:"Applications/File Management" +Groups=debian:"utils" +ExtraDependencies=debian:"libimobiledevice6\t\t\nlibimobiledevice-utils\t\t\nifuse\t\t\nlibimage-exiftool-perl\t\t" diff --git a/.src/FMain.class b/.src/FMain.class new file mode 100644 index 0000000..c7b149e --- /dev/null +++ b/.src/FMain.class @@ -0,0 +1,160 @@ +' 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 +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 + 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, " " + Print #hArchivoTMP, " Inserted-By-iBooks" + Print #hArchivoTMP, " " + Print #hArchivoTMP, " Name" + Print #hArchivoTMP, " " & TITULO & "" + Print #hArchivoTMP, " Package Hash" + Print #hArchivoTMP, " " & MD5SUM & "" + Print #hArchivoTMP, " Path" + Print #hArchivoTMP, " " & NOMBREFICHERO & "" + Print #hArchivoTMP, " importDate" + Print #hArchivoTMP, " 2023-07-31T18:02:06Z" + Print #hArchivoTMP, " " + ' Cerramos el XML + Print #hArchivoTMP, " " + Print #hArchivoTMP, "" + Print #hArchivoTMP, "" + 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 diff --git a/.src/FMain.form b/.src/FMain.form new file mode 100644 index 0000000..4ff07a5 --- /dev/null +++ b/.src/FMain.form @@ -0,0 +1,65 @@ +# Gambas Form File 3.0 + +{ Form Form + MoveScaled(0,0,86,63) + Text = ("ePub to iPad") + Icon = Picture["iPad-logo-pantalla.png"] + Resizable = False + { PictureBox1 PictureBox + MoveScaled(0,11,21,20) + Picture = Picture.Load("iPad-logo-pantalla.png") + Stretch = True + } + { LCDLabel1 LCDLabel + MoveScaled(23,1,49,7) + Text = ("epub to ipad") + Alignment = Align.Center + } + { Label1 Label + MoveScaled(23,8,49,5) + Text = ("1. Conecte el iPad con el cable USB al Ordenador") + } + { Label2 Label + MoveScaled(23,12,49,5) + Text = ("2. Pulse el botón \"Emparejar con iPad\"") + } + { Boton_EmparejarIPAD Button + MoveScaled(23,17,24,6) + Text = ("Emparejar con iPad") + Picture = Picture["icon:/22/usb"] + } + { Label3 Label + MoveScaled(23,22,49,6) + Text = ("3. Pulse en el iPad \"Confiar en el ordenador\"") + } + { Label4 Label + MoveScaled(23,27,49,5) + Text = ("4. Seleccione el ePUB o PDF que quiera enviar al iPAD") + } + { Boton_Seleccionar Button + MoveScaled(23,32,24,6) + Text = ("Seleccionar ePUB/PDF") + Picture = Picture["icon:/22/pdf"] + } + { !Boton_SubirFichero Button + MoveScaled(23,43,24,6) + #Public = True + Enabled = False + Text = ("Enviar al iPad") + Picture = Picture["icon:/22/book"] + } + { Boton_DesmontarEXIT Button + MoveScaled(22,55,49,6) + Text = ("Desmontar iPad y Salir") + Picture = Picture["icon:/22/close"] + } + { Label5 Label + MoveScaled(23,38,49,5) + Text = ("5. Ahora simplemente pulse \"Enviar al iPad\".") + } + { Label6 Label + MoveScaled(4,30,12,5) + Font = Font["Roboto,Bold"] + Text = ("SoloConLinux") + } +} diff --git a/.src/form_Fichero.class b/.src/form_Fichero.class new file mode 100644 index 0000000..901aba4 --- /dev/null +++ b/.src/form_Fichero.class @@ -0,0 +1,13 @@ +' Gambas class file + + +Public Sub Boton_Cerrar_Click() + If FileChooserEPUB.SelectedPath = "" Then + FMain.globalFichero = "" + FMain.Boton_SubirFichero.Enabled = False + Else + FMain.globalFichero = FileChooserEPUB.SelectedPath + FMain.Boton_SubirFichero.Enabled = True + Endif + Me.Close +End diff --git a/.src/form_Fichero.form b/.src/form_Fichero.form new file mode 100644 index 0000000..e1759a7 --- /dev/null +++ b/.src/form_Fichero.form @@ -0,0 +1,16 @@ +# Gambas Form File 3.0 + +{ Form Form + MoveScaled(0,0,92,73) + Text = ("Seleccione un fichero ePUB o PDF ") + Icon = Picture["iPad-logo-pantalla.png"] + Resizable = False + { FileChooserEPUB FileChooser + MoveScaled(1,1,90,63) + Filter = [("*.epub"), ("ePUB"), ("*.pdf"), ("PDF")] + } + { Boton_Cerrar Button + MoveScaled(74,66,17,5) + Text = ("Aceptar") + } +} diff --git a/iPad-logo-pantalla.png b/iPad-logo-pantalla.png new file mode 100644 index 0000000000000000000000000000000000000000..9a61110dd323776c3e9945ae7d05353e235c6e2a GIT binary patch literal 14987 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 mOq