Como dice nuestro compañero jguardon, creo este hilo del foro en primer momento para que me ayudéis, y como segundo, por si le puede ser de utilidad a otro usuario.
Todo empezó anoche en el cual vi un hilo titulado “ Ayuda. Como Mostrar Las Operaciones De Una Terminal?” la dirección es esta:
http://foro.gambas-es.org/viewtopic.php?f=4&t=534
Por lo que entendí, el usuario romeox quería saber como mostrar en un campo de texto, lo mostrado por el terminal, y el usuario abarzuaf le propuso un par de métodos.
Ahora viene mi problema.
Yo tengo hecho un sistema de actualización, un poco chapucero (porque aun no se hacerlo de otra forma ya que no hace mucho que empecé en gambas) pero es valido.
Todo funciona de la siguiente forma.
Supongamos que mi aplicación esta en la versión 0.2.20, y nada mas encenderla pregunta a la base de datos si hay una versión mas alta. Y efectivamente esta la versión 0.2.21
'' aquí supongamos que tenemos un modulo que lleve una apertura de conexión (que lo aprendí aquí en el foro)
'' ahora tenemos la función para comprobar actualización
PUBLIC SUB comprobarActualizacion()
DIM programa AS Result
DIM respuestaPregunta AS Integer
'' con la siguiente consulta traerá todos los datos que de la versión mas alta en caso de que sea mayor que la que nosotros tenemos en el programa
programa = conexionDB.conectar("SELECT * FROM programas WHERE nombre = '" & Application.Name & "' AND version > '" & Application.Version & "' ORDER BY version DESC LIMIT 0 , 1")
IF programa.Count > 0 THEN '' aquí comprobamos que trae datos, si es mayor a 0 significa que tiene un dato entones tiene que tener una versión mas reciente en el servidor
IF programa!version > Application.Version THEN '' esto lo puse en un anterior función que hice pero lo mantengo para que haga un tipo de segunda verificación de la versión.
respuestaPregunta = Message.Question("Hay una nueva versión del programa: " & Application.Name & ".\n¿Quieres actualizarla a la versión:" & programa!version & "?\nActualmente esta instalada la versión: " & Application.Version & "\nEl programa se cerrara automáticamente.", "Actualizar", "Cancelar")
'' en caso de pulsar que si que quieres actualizar, procederá con lo siguiente:
IF respuestaPregunta = 1 THEN
Desktop.Open("http://" & programa!url) '' coge la url de donde esta la aplicación (esto es un campo de la base de datos mysql
'' ahora en el SHELL a crear la carpeta, descargar y acto seguido con un \n hacemos que nautilus muestre la carpeta y su contenido que debería ser en mi caso un .deb con una versión mas alta.
SHELL "wget -P/tmp/Actualizacion_Gambas http://" & programa!url & "\nnautilus /tmp/Actualizacion_Gambas"
conexionDB.datosBase.Close
formularioMadre.Close
ENDIF
ENDIF
ENDIF
END
'' ahora tenemos la función para comprobar actualización
PUBLIC SUB comprobarActualizacion()
DIM programa AS Result
DIM respuestaPregunta AS Integer
'' con la siguiente consulta traerá todos los datos que de la versión mas alta en caso de que sea mayor que la que nosotros tenemos en el programa
programa = conexionDB.conectar("SELECT * FROM programas WHERE nombre = '" & Application.Name & "' AND version > '" & Application.Version & "' ORDER BY version DESC LIMIT 0 , 1")
IF programa.Count > 0 THEN '' aquí comprobamos que trae datos, si es mayor a 0 significa que tiene un dato entones tiene que tener una versión mas reciente en el servidor
IF programa!version > Application.Version THEN '' esto lo puse en un anterior función que hice pero lo mantengo para que haga un tipo de segunda verificación de la versión.
respuestaPregunta = Message.Question("Hay una nueva versión del programa: " & Application.Name & ".\n¿Quieres actualizarla a la versión:" & programa!version & "?\nActualmente esta instalada la versión: " & Application.Version & "\nEl programa se cerrara automáticamente.", "Actualizar", "Cancelar")
'' en caso de pulsar que si que quieres actualizar, procederá con lo siguiente:
IF respuestaPregunta = 1 THEN
Desktop.Open("http://" & programa!url) '' coge la url de donde esta la aplicación (esto es un campo de la base de datos mysql
'' ahora en el SHELL a crear la carpeta, descargar y acto seguido con un \n hacemos que nautilus muestre la carpeta y su contenido que debería ser en mi caso un .deb con una versión mas alta.
SHELL "wget -P/tmp/Actualizacion_Gambas http://" & programa!url & "\nnautilus /tmp/Actualizacion_Gambas"
conexionDB.datosBase.Close
formularioMadre.Close
ENDIF
ENDIF
ENDIF
END
Perdonar si tiene algún fallo ya que lo he ido copiando al mismo tiempo que lo depuraba e insertaba comentarios para que se entendiese y no se si me abre dejado algun if por cerrar o algo por el estilo.
Ahora que sabéis como actualizo, esta función va perfectamente pero no me muestra nada, es decir se pone a descargar, me cierra mi aplicación, esperas unos segundos y de repente se te abre nautilus con el .deb dentro. Esto no hay problema porque igual la espera es de 5 segundos, pero si pillas una conexión lenta podría durar minutos, y pienso que cuando algo dura tanto, no hay ningún usuario que aguante sin tocar nada en el ordenador. Mi pregunta es... con el proceso que explican en el otro hilo, abría forma de mostrar lo que sale en el terminal? Es decir, y yo el comando SHELL lo pongo en un terminal, me muestra el porcentaje de descarga algo parecido a esto si mal no recuerdo:
32 kb ….. …. …. …. …. …. 1%
71 kb …. …. …. …. …. …. 2%
etc....
A mi en un principio me gustaría poder mostrar esto en un campo de texto, e incluso si se puede, me gustaría tomar de alguna forma el numero del porcentaje para hacer un ProgressBar que muestre la barrita cargándose hasta el 100%
Bueno mientras alguien me contesta yo sigo intentando hacer que esto sea posible, si consigo algo lo pondré enseguida aquí para que otros puedan copiarlo para su aplicación.