27 ago 2012

Actualizar automáticamente nuestra aplicación (3)

¡Feedback de descarga! En esta parte vamos a crear el formulario con su ProgressBar que servirá de base para conocer como va la descarga (todo un detalle~!).

Problema #1: La class TAppUpdate se hará responsable de instanciar el formulario, esto incluye su liberación.
Problema #2: Se controlará los mensajes que se programen, para simplificar, manejaremos el evento de descarga (equiparando la "barrita de carga" con el porcentaje de la descarga).

Nota: Para el proceso de descarga usaremos funciones definidas por la casa, más de lo mismo, esto es a gusto del programador. (También podéis mirar la API de WinInet) http://msdn.microsoft.com/en-us/library/windows/desktop/aa383630(v=vs.85).aspx

Al grano.

Crearemos el formulario nada más instanciar la clase TAppUpdate, por lo que vamos a tener que declarar el constructor Create en las declaraciones públicas. A su vez, declararemos el destructor Destroy.

      constructor TAppUpdate.Create;      
      begin        
        inherited;
      
        Frm := TForm.Create(nil);      
        with Frm do begin
          Name := 'Updater';
          BorderStyle := bsNone;
          Width := 380;
          Height := 30;
          Position := poScreenCenter;
          Visible := True;
        end;

        Bar := TProgressBar.Create(Frm);

        with Bar do begin
          Name := 'Bar';
          Parent := Frm;
          Width := 380;
          Height := 30;
          Min := 0;
          Max := 100;
          Visible := True;
        end;
     end;

La variable 'Frm' y 'Bar' estarán declaradas en el apartado privado, pues es de uso interno. Las usaremos en el método destructor de clase.


      destructor TAppUpdate.Destroy;      
      begin
        Bar.Free;
        Frm.Free;

        inherited;
      end;

¡Y con esto terminamos por completo las funciones públicas! Y ya para terminar este capítulo, veremos el procedimiento de CheckUpdate. En el cual, veremos ya el método de descarga vía web

      function TAppUpdate.CheckUpdate: Boolean;
      begin
        with TDownloadURL.Create(nil) do begin
          try
            URL := Self.URL;
            FileName := 'CheckUpdate.txt';  

            ExecuteTarget(nil);
          except
            Result := False;
            Free;
            Exit;
          end;
            Free;
        end;
       

       { Procesamos el archivo.txt, que contendrá la información necesaria }


       DeleteFile('CheckUpdate.txt');
     end; 


- Ey...
- ¿Dime?
- Pero esto que eeeeeeeeees!!!


Nada hamijos, en primer lugar, creamos 'on the fly' la descarga, pasando la URL donde encontraremos la información necesaria y el archivo de destino, en este caso ¡texto plano! al finalizar, deberemos procesar ese texto a gusto del consumidor :3 (Con la class TStringList y sus delimitadores lo tenemos tirado). En dicho procesamiento decidiremos si proseguimos y actualizamos o no (comparando versiones y tal).

La razón del bloque try-except: en caso de no estar conectado a la red, no queremos que nuestro programa se cuelgue y se pete de errores, ¿verdad?, pues majetes, una solución práctica es esa, en el mismo check de updates, si detectamos cualquier error, pues nada, cerramos todo el tinglado y dejamos que la aplicación corra como siempre.

Cualquier duda, aquí estoy.

Salu2



No hay comentarios:

Publicar un comentario