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

Dossier Paperblog