Tout d'abord, l'ajout de fichiers dans la file de chargement (loading queue) d'un CompositeMassLoader est beaucoup plus souple :

var cml:CompositeMassLoader = new CompositeMassLoader();
 
//mode strict
var file:ILoadableFile = cml.addFile("file.txt", LoadableFileType.TEXT, 5);
file.properties.put("aVariable", "aValue");
 
//mode dynamique
cml.addFile({url:"file.txt", type:LoadableFileType.TEXT, priority:5, aVariable:"aValue"});
 
//autre variante
cml.addFile(new URLRequest("file.txt"), LoadableFileType.TEXT, 5);

Il est également possible de nommer un CompositeMassLoader pour le récupérer ensuite de n'importe où dans une application :

var cml:CompositeMassLoader = new CompositeMassLoader("astorm-demo");
//...
var rml:CompositeMassLoader = CompositeMassLoader.get("astorm-demo");

Les événements sont directement envoyés depuis le CompositeMassLoader. Par ailleurs, le nouvel événement MassLoadEvent.FILE_PROGRESS permet de récupérer les données précises sur un fichier en cours de chargement :

var cml:CompositeMassLoader = new CompositeMassLoader();
//...
 
cml.addEventListener(MassLoadEvent.FILE_PROGRESS, progressHandler);
function progressHandler(evt:MassLoadEvent):void
{
   var currentFile:ILoadableFile = evt.getFile();
   trace(currentFile);
}
 
//lance le chargement
cml.start();

La récupération des données est beaucoup plus claire à la lecture :

var file:ILoadableFile = cml.addFile("anim.swf");
//...
var ldr:Loader = file.getData(DataType.LOADER);

L'inclusion des variables dans les URL, très pratique pour les changement de langues ou alors lorsqu'un fichier SWF est destiné à être mis dans différentes page HTML :

var cml:CompositeMassLoader = new CompositeMassLoader();
var variables:IMap = cml.loadableFileFactory.defaultVariables;
 
//création des variables
variables.put("BASE_PATH", "./resources");
variables.put("PICTURES_PATH", "${BASE_PATH}/pictures");
 
//création des fichiers
cml.addFile("${BASE_PATH}/engine.swf");
cml.addFile("${PICTURES_PATH}/header.png");
 
cml.start();

Il y a également eu différentes modifications dans les données et comportement par défaut (typiquement un fichier image est chargé avec un Loader, un CompositeMassLoader utilise un PriorityMassLoader, ...) ainsi que de nouvelles classes utiles venant parfaire l'API (Properties, ParseUtils, VariableReplacer, ...).

Pour une utilisation un peu plus avancée, il est désormais possible de spécifier une liste de fichiers à charger sans pour autant mettre de dépendance :

<?xml version="1.0" encoding="utf-8" ?>
<application>
   <variables>
      <var name="BASE_PATH">./resources</var>
      <var name="PICTURES_PATH">${BASE_PATH}/pictures</var>
   </variables>
   <files>
      <file url="${BASE_PATH}/engine.swf" />
      <file url="$PICTURES_PATH}/heander.png" />
   </files>
</application>
var configLoader:ApplicationConfigLoader = new ApplicationConfigLoader();
configLoader.addEventListener(Event.COMPLETE, completeHandler);
configLoader.load(new URLRequest("config.xml");
 
function completeHandler(evt:Event):void
{
   //récupère tous les fichiers
   var files:Array = configLoader.applicationContext.enumerateAll();
   trace(files);
}

Et il y a évidemment plein d'autres nouvelles fonctionnalités de ce coté-la ! Je tâcherai de faire des tutoriaux plus avancés lorsque la version 2.0 sera officielle.

Encore deux mots sur Masapi : bien que ce projet s'adresse à des développeurs, j'ai essayé de le rendre un peu plus simple d'utilisation aux personnes moins à l'aise en AS3. Je suis donc ouverts aux idées qui pourraient survenir en ce sens :)

Pour terminer, voici une listes des pincipaux changements depuis la version 1.5 :

  • package ch.capi.net.files rendu publique (classes de chargement)
  • ajout des index sur les fichiers (permet de savoir leur position dans la loading queue)
  • ajout de la gestion des variables (url dynamique) dans les dépendances
  • support Bitmap pour la récupération des données
  • nouvel événement MassLoadEvent.FILE_PROGRESS
  • possibilité de nommer un CompositeMassLoader ou ApplicationContext et de le récupérer n'importe ou
  • possibilité de gérer des dépendances fictives (et dossiers fictifs)
  • possibilité de détruire un fichier plus utilisé
  • renommage du package ch.capi.core en ch.capi.net.app

N'hésitez pas à me donner vos retours et critiques ! Et en prime, deux sites réalisés par Kalou utilisant Masapi : Courmayeur-Montblanc et ValaisArtDeVivre.