• [^] # Re: Liberté ?

    Posté par . En réponse à la dépêche Firefox OS est lancé. Évalué à 4. Dernière modification le 08 août 2013 à 00:53.

    La documentation n'est pas facile à trouver et pas très claire pour un néophyte comme moi. Donc il semblerait que pour stocker un fichier sur la carte SD, il faille utiliser Device Storage API (réservé aux applications privilégiées).

    Un Blob ne permet pas grand chose pour la manipulation des fichiers. Il faut donc trouver un truc un peu plus C-Like, FileHandle API, mais ça se complique car avant d'avoir un fichier il faut contacter la base de données de l'application via IndexedDB API.

    Je me lance avec le code suivant :

    const DB_NAME = "MyDatabase";
    const FILE_NAME = "example.txt";
    // Interrogation de la base.
    var idbReq = indexedDB.open(DB_NAME);
    idbReq.onsuccess = function(event){
     var db = event.target.result;
     // Création d'un nouveau fichier.
     var handleReq = db.mozCreateFileHandle(FILE_NAME, "binary");
     handleReq.onsuccess = function(event){
     var handle = event.target.result;
     // Pour modifier le fichier, on passe par un LockedFile.
     lf = handle.open("readwrite");
     writeFile(lf);
     lf.flush()
     // Maintenant que le fichier est modifié, on peut le stocker.
     // getFile() retourne un objet File dérivé de Blob que l'on peut stocker.
     handle.getFile().onsuccess = function(event){
     var file = event.target.result;
     storeFile(file);
     };
     };
    };
    // Manipulation du fichier.
    function writeFile(lf){
     lf.write("This is an apple.");
     lf.location = 9;
     lf.write(" sam");
    }
    // Stockage.
    function storeFile(blob){
     // navigator est fournit par l'objet window.
     var sdcard = navigator.getDeviceStorage("sdcard");
     var request = sdcard.addNamed(blob, FILE_NAME);
     request.onsuccess = function(event){
     var name = event.target.result;
     console.log("File '" + name + "' successfully wrote on the sdcard.");
     };
     request.onerror = function(event){
     console.warn("Unable to write file: " + this.error);
     };
    }

    Je ne sais pas si ce code est correct et la documentation n'aide pas.