Magazine High tech

AIR beta 3 Update

Publié le 17 décembre 2007 par Stef1

L’update d’une application AIR est une de ces fonctionnalités bien pratique, et elle n’échappe pas à la vague de modifications apporté par la beta 3.

Cette classe est une évolution de la classe updateManager de Rich Tretola, elle intègre les changements apporté par la beta 3

  1.  
  2.                 var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;
  3.                 var ns:Namespace = appXml.namespace();
  4.                 var  appId:String = appXml.ns::id[0];
  5.                 appVersion = appXml.ns::version[0];
  6.                 var appName:String = appXml.ns::filename[0];

On voit que maintenant la lecture du fichier application est intégrée dans AIR

  1.  
  2. package com.mykii.utils
  3. {
  4.    import flash.desktop.NativeApplication;
  5.    import flash.desktop.Updater;
  6.    import flash.events.Event;
  7.    import flash.filesystem.File;
  8.    import flash.filesystem.FileMode;
  9.    import flash.filesystem.FileStream;
  10.    import flash.net.URLRequest;
  11.    import flash.net.URLStream;
  12.    import flash.utils.ByteArray;
  13.    import mx.controls.Alert;
  14.    import mx.events.CloseEvent;
  15.    import mx.rpc.events.ResultEvent;
  16.    import mx.rpc.http.HTTPService;
  17.    public class UpdateManager {
  18.  
  19.            private var _constanteApplicationName:String;
  20.        public var versionURL:String;
  21.  
  22.        private var version:XML;
  23.        private var urlStream:URLStream = new URLStream();
  24.        private var fileData:ByteArray = new ByteArray();
  25.  
  26.            [Bindable] private var _currentVersion:String;
  27.        [Bindable] private var appVersion:String;
  28.  
  29.        /*
  30.        constructor
  31.        */
  32.        public function UpdateManager(versionURL:String):void{
  33.           this.versionURL = versionURL;
  34.        }
  35.        /*
  36.        load the application.xml file
  37.        */
  38.        public function loadApplicationFile():void{
  39.                 var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;
  40.                         var ns:Namespace = appXml.namespace();
  41.                         var  appId:String = appXml.ns::id[0];
  42.                          appVersion = appXml.ns::version[0];
  43.                          var appName:String = appXml.ns::filename[0];
  44.                         loadRemoteFile();
  45.        }
  46.        /*
  47.        load a remote xml file to check for new version
  48.        */
  49.        private function loadRemoteFile():void{
  50.            var http:HTTPService = new HTTPService();
  51.            http.url = versionURL;
  52.            http.useProxy=false;
  53.            http.method = "GET";
  54.            http.resultFormat="xml";
  55.            http.send();
  56.            http.addEventListener(ResultEvent.RESULT,testVersion2);
  57.        }
  58.        /*
  59.        check to see if an update exists and either
  60.        force the update or give the user the option
  61.        */
  62.        private function testVersion2(event:ResultEvent):void{
  63.           version = XML(event.result);
  64.            if((appVersion != version.@version) && version.@forceUpdate == true){
  65.                getUpdate();
  66.            }else if(appVersion != version.@version){
  67.                Alert.show("Il y a une mise à jour disponible,\nVoulez vous la télécharger maintenant? \n\nDetails:\n" +
  68.                version.@message, "Choissisez Oui ou Non", 3, null, alertClickHandler);
  69.            } else {
  70.             trace("There are no new updates available");
  71.            }
  72.        }
  73.        /*
  74.        if user wants update, call getUpdate()
  75.              */
  76.        private function alertClickHandler(event:CloseEvent):void {
  77.            if (event.detail==Alert.YES){
  78.                getUpdate();
  79.            }
  80.        }
  81.        /*
  82.        download the new AIR installer file
  83.             */
  84.        private function getUpdate():void{
  85.            var urlReq:URLRequest=new URLRequest(version.@downloadLocation);
  86.            urlStream.addEventListener(Event.COMPLETE, loaded);
  87.            urlStream.load(urlReq);
  88.        }
  89.        /*
  90.        read the new AIR file
  91.              */
  92.        private function loaded(event:Event):void {
  93.            urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
  94.            writeAirFile();
  95.        }
  96.        /*
  97.        write the new AIR installer to disk
  98.              */
  99.        private function writeAirFile():void {
  100.            var file:File = File.applicationStorageDirectory.resolvePath(_constanteApplicationName);
  101.            var fileStream:FileStream = new FileStream();
  102.                fileStream.addEventListener(Event.CLOSE, fileClosed);
  103.                fileStream.openAsync(file, FileMode.WRITE);
  104.                fileStream.writeBytes(fileData, 0, fileData.length);
  105.                fileStream.close();
  106.        }
  107.        /* close the FileStream and use the
  108.        Updater class to update the application
  109.        */
  110.        private function fileClosed(event:Event):void {
  111.            var updater:Updater = new Updater();
  112.            var airFile:File = File.applicationStorageDirectory.resolvePath(_constanteApplicationName);
  113.            updater.update(airFile,version.@version);
  114.        }
  115.                 /*
  116.                  Setter for the name of the AIR file
  117.                 */
  118.                 public function set constanteApplicationName(value:String):void{
  119.                         _constanteApplicationName = value;
  120.                 }
  121.    }
  122. }

Le fichier distant se présente sous cette forme

  1.  
  2. <?xml version="1.0"  encoding="ISO-8859-1"?>
  3. <currentVersion version="0.220"
  4. downloadLocation="http://www.mykii.eu/AIR/KIISB/KIISB.air"
  5. forceUpdate="false"
  6. message="Passage en beta 3"/>
  7.  

Retour à La Une de Logo Paperblog

A propos de l’auteur


Stef1 Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog