irec fileapi - CGastrell/phonegap GitHub Wiki

fileApi

Que vamos a necesitar para la aplicacion?

  • un archivo donde podamos almacenar las guias: guias.json
  • un archivo donde podamos almacenar las entrevistas: entrevistas.json
  • un directorio donde vayamos a guardar los audios de las entrevistas: audio
  • generar archivos para las entrevistas: audio/*

Con esto en mente, es poco lo que necesitamos del fileApi. Por otro lado, vamos a cambiar la inicializacion. Ya que el resto de la aplicacion va a depender de la correcta inicializacion de fileApi vamos a hacer que la funcion initialize sea asincronica:

var fileApi = {
  ready: false, // <--solo por las dudas
  initialize: function(callback){
    var path = cordova.file.externalDataDirectory;
    //si no hay problemas, llamamos a callback con el primer
    //parametro en null (lo que seria el error)
    var onResolve = function(directoryEntry) {
      fileApi.dir = directoryEntry;
      fileApi.ready = true;
      callback && callback(null, fileApi);
    }
    //si hay un error llamamos a callback con el error
    //como primer parametro (ver arriba)
    var onError = function(err){
      callback && callback(err, fileApi);
    }
    window.resolveLocalFileSystemURL(path, onResolve, onError);
  },
  writeTextFile: function(file, content, callback) {
    var onFile = function(fileEntry) {
      fileEntry.createWriter(
        function(fileWriter){
          fileWriter.write(content);
          callback && callback(content);
        }, fileApi.onError);
    }
    fileApi.dir.getFile(file, {create: true}, onFile, fileApi.onError);
  },
  onError: function(err) {
    console.log(err);
  },
  getDir: function(dir, callback) {
    var onDir = function(dir){
      callback && callback(null, dir);
    }
    var onError = function(err) {
      callback && callback(err, null);
    }
    fileApi.dir.getDirectory(dir, {create:true}, onDir, onError);
  }
}

Ver que las funciones que usamos usan la opcion {create: true} para evitarnos el paso de saber si existe o no. Si no existe, se crea.

Inicializacion

Para inicializar fileApi vamos a llamar a fileApi.initialize desde nuestra funcion init() de esta manera:

function init(){
  console.log('init');
  // Configuracion de JQM para phonegap
  $.mobile.allowCrossDomainPages = true;
  $.support.cors = true;
  $.mobile.buttonMarkup.hoverDelay = 0;
  $.mobile.pushStateEnabled = false;
  $.mobile.defaultPageTransition = "none";

  fileApi.initialize(function(err){
    if(err) { // <-- checkeamos si hay error
      console.log('file api error');
      console.log(err);
      return; // <-- y cortamos la ejecucion de ser asi
    }

    // aca va mas codigo de inicializacion
    // sabiendo que fileApi esta inicializado
  });
}

A continuacion vemos como inicializar guias y entrevistas que necesitan acceder/crear un archivo para almacenar sus respectivos listados.