27 ago 2012

Actualizar automáticamente nuestra aplicación (2)

Hasta aquí ya hemos visto el procedimiento "general" y parte del que yo he seguido. Hora de ser más concretos, ¿no?

Por si no lo había nombrado antes, será escrito en Delphi, y la llamaremos TAppUpdate (que bonitoh)

Opté por dejar solo una función pública, esto quiere decir, que a la hora de incorporar la class a nuestro programa será tan fácil como crear la instancia y ceder el control al módulo :D

      with TAppUpdate.Create do AppUpdate(...);


Nota: ¡Tendremos que liberar la instancia!

¡Bien! Hablemos ahora de los parámetros que necesitaremos internamente (los cuales se pasarán por AppUpdate):
  • Dirección web con la información para comunicarnos con el programa
  • Dirección web estática/nodo para la descarga de la actualización
  • Nombre de la aplicación (facilitar su identificación)
  • Versión actual de la aplicación
Las cosas claras, inicialmente, esto es lo básico para poder realizar una actualización vía web. Como nota personal, he de dejar claro que me salté el segundo punto, pues lo agregué de manera implícita a modo de nodo (total... para un par de aplicaciones que tendré con este módulo, no necesito un host diferente) El primer punto lo mantuve como parámetro, pues podría tener varias listas para facilitarme la clasificación. En todo caso, si es una class, como tal, debería estar preparada con la información necesaria (evitando colocar cosas implícitas en ella).

      type
        TAppUpdate = class
        private
          URL: String;
          App: String;
          Ver: Word;

          { funciones y procedimientos internos }

        public
          procedure AppUpdate(sURL, sAppName: String; iVer: Word);
      end;

      procedure TAppUpdate.AppUpdate(sURL, sAppName: String; iVer: Word);
      begin

        URL := sURL;
        App := sAppName;
        Ver := iVer;

        { Operaciones principales }
      end;


¡Vale! Hemos declarado tres variables internas, donde guardaremos los datos recibidos por la función pública. Si os fijáis, podréis ver que justo debajo hemos dejado un hueco para las operaciones a realizar.

En primer lugar tendremos que hacer un check, el cual comprobará si existe una actualización.
En segundo lugar descargaremos si el usuario desea actualizar (En mi caso lo he puesto opcional, ¡cada cual a su gusto!).
En tercer lugar, si procede, desempaquetaremos los recursos (ya sea un zip/cab/...).
Y por último, operaciones externas y reinicio de la aplicación.

Bien, separemos estos 4 procesos en funciones/procedimientos.

        ...
        Ver := iVer;

        if not CheckUpdate then
         Exit; 

        {Aquí podemos preguntar, en caso de ser opcional} 

        DownloadUpdate;
        UnZipUpdate;  { En mi caso lo extraigo de un zip (librerías a gusto) } 

        RestartApp;
      end; 


Y listo, básicamente ese es el procedimiento que se encargará de todo, delegando responsabilidad a los subprogramas.

En el siguiente capítulo le daremos un toque personal, mandando feedback de las operaciones al usuario, ¡qué nadie quiere estar esperando 2 minutos sin saber que pasa! Y aquí entraremos en el terreno de los formularios y componentes creados en tiempo de ejecución :p

Salu2!

No hay comentarios:

Publicar un comentario