https://foro.gambas-es.org/viewtopic.php?f=1&t=538
-----------------------------------
Cubel
Miercoles, 31 Marzo 2010, 08:23

Mostrar Información Del Terminal En Gambas.
-----------------------------------
Hola buenos días!

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:
[url=http://foro.gambas-es.org/viewtopic.php?f=4&t=534]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
[code linenumbers=false syntax=gambas]
'' 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
[/code]
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.


-----------------------------------
shordi
Miercoles, 31 Marzo 2010, 09:29

Re: Mostrar Información Del Terminal En Gambas.
-----------------------------------
Sobre tu pregunta en concreto no te puedo decir mucho. Pero el problema que intentas resolver ya está resuelto hace mucho... la solución (en ubuntu, debian y devidados) se llama apt-get.
En otras palabras ¿por qué no te montas un pequeño repositorio con tus programas en un servidor web? Lo añades al fichero /etc/apt/sources.list y a partir de ahí con sólo actualizar tú el repositorio a tus clientes se les actualiza como cualquier otra aplicación del sistema.

Siempre mola hacerse las cosas uno, que las entiende mejor, pero también es penoso pasarse la vida reinventando la rueda... (lo digo por experiencia).

Saludos.


-----------------------------------
Cubel
Miercoles, 31 Marzo 2010, 10:50

Re: Mostrar Información Del Terminal En Gambas.
-----------------------------------
Bueno... lo de hacerse lo mirare porque es buena idea a la hora de actualizar... 
Pero mi duda de lo del apt-get no lo entendido... o tu no has entendido lo que quiero yo.

El sistema de descarga ya lo tengo creado y no necesito lo del apt-get. Lo que necesito es que en descarga me muestre los datos que deberian salir en la consola, pero que me salgan en un campo de texto.


-----------------------------------
fabianfv
Miercoles, 31 Marzo 2010, 20:02

Re: Mostrar Información Del Terminal En Gambas.
-----------------------------------
Hola Cubel. ¿Ya miraste los ejemplos del capítulo 4 "Gestión de procesos" del libro de Gambas? Allí hay un ejemplo que, si no recuerdo mal, trata sobre cómo capturar la salida de un comando para mostrar una barra de progreso. La forma de hacerlo es como si de flujos (streams) se tratara, es decir, del mismo modo en que se leen archivos en Gambas.


-----------------------------------
Cubel
Miercoles, 31 Marzo 2010, 21:03

Re: Mostrar Información Del Terminal En Gambas.
-----------------------------------
No. Acabo de llegar a casa y ahora nada mas cene me voy a poner a leerlo... Supongo que no tendré ningún problema pero si tengo os pediré ayuda ok?

________________
EDITO:
------------


Hola buenos días, 

Anoche estuve leyendo el manual de gambas, y bueno, con la clase EXEC se puede sacar el porcentaje de la descarga. Pero hay un apartado donde dice:
“Vamos a trabajar con la aplicación auxiliar curl, que es un programa de línea de comandos que nos permite precisamente lo que queremos: descargar un fichero desde una URL. Si no tenemos curl ya instalado, aprovecharemos para hacerlo ahora, ya que está disponible para todas las distribuciones GNU/Linux habituales, así como para FreeBSD. Para ello, consultamos desde Synaptic, Yast, RpmDrake o nuestro gestor habitual de paquetes en otras distribuciones.”

Mi duda es, si yo genero una aplicación utilizando el comando de curl, todos los usuarios que se instalen la aplicación deberán instalarse también la aplicación curl? 
En caso de que tengan que instalarlo, mi aplicación se va al traste, porque mi objetivo es hacer una aplicación de la cual se pueda sacar gran rendimiento pero que este hecha para gente que no ha tocado en su vida un ordenador o que al pasarse de Windows a Linux este desorientada…  Si una persona que no sabe cómo funciona Linux le tienes que decir, vete a Synaptic o a trabes de la consola (que es peor porque cuando le pida la contraseña de superusuario vera que no inserta ningún carácter y lo primero que pensara que el teclado no funciona o vete a saber…) 

Alguien me podría orientar un poco con esto?


