From c4c5a8b49bb26d6344edceba73834754bb9930cf Mon Sep 17 00:00:00 2001 From: Jose Antonio Marquez Date: Tue, 7 Feb 2012 11:14:57 -0800 Subject: Adding ability to copy an entire library for Ninja Added the functionality to copy an entire directory/library from a JSON descriptor file into the app sandbox. Need to add logic to dispatch a 'synchronized' event for Ninja to know everything is up to date. --- js/io/system/ninjalibrary.js | 88 +++++++++++++++++++++++++++++++++++++------- node_modules/descriptor.json | 1 + 2 files changed, 76 insertions(+), 13 deletions(-) diff --git a/js/io/system/ninjalibrary.js b/js/io/system/ninjalibrary.js index e3d855f1..09cf7407 100644 --- a/js/io/system/ninjalibrary.js +++ b/js/io/system/ninjalibrary.js @@ -42,7 +42,7 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { // this.chromeApi = chrome; // - var i, libs, xhr = new XMLHttpRequest(), tocopylibs = []; + var i, l, libs, libjson, xhr = new XMLHttpRequest(), tocopylibs = []; //Getting known json list of libraries to copy to chrome xhr.open("GET", '/ninja-internal/js/io/system/ninjalibrary.json', false); xhr.send(); @@ -52,9 +52,9 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { libs = JSON.parse(xhr.response); // if (chromeLibs.length > 0) { - //Compare (always deleting for testing) - for (i=0; chromeLibs[i]; i++) { - this.chromeApi.directoryDelete(chromeLibs[i]); + //TODO: Remove + for (i=0; chromeLibs[i]; i++) { + this.chromeApi.directoryDelete(chromeLibs[i]); } } else { //No library is present, must copy all @@ -84,12 +84,58 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { if (xhr.readyState === 4) { //TODO: add check for mime type //Creating new file from loaded content this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response, 'text/plain'); - //this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response, 'text/plain', function (v){console.log(v)}); } else { - //Error + //Error creating single file library } } else { - // + //Creating root folder + this.chromeApi.directoryNew('/'+tocopylibs[i].name); + //Getting file contents + xhr = new XMLHttpRequest(); + xhr.open("GET", tocopylibs[i].path, false); + xhr.send(); + //Checking for status + if (xhr.readyState === 4) { + // + libjson = JSON.parse(xhr.response); + // + for (l=0; libjson.directories[l]; l++) { + libjson.dirsToCreate = libjson.directories.length; + libjson.dirsCreated = 0; + libjson.filesToCreate = libjson.files.length; + libjson.filesCreated = 0; + libjson.api = this.chromeApi; + libjson.local = tocopylibs[i].name; + this.createDirectory(tocopylibs[i].name, libjson.directories[l], function (status) { + //Checking for success on directories created + if (status) { + this.dirsCreated++; + } + //All directories created + if (this.dirsCreated === this.dirsToCreate) { + var xhr, i; + for (i=0; this.files[i]; i++) { + xhr = new XMLHttpRequest(); + xhr.open("GET", this.root+this.files[i], false); + xhr.send(); + //Checking for status + if (xhr.readyState === 4) { + this.api.fileNew(this.local+'/'+this.files[i], xhr.response, 'text/plain', function (status) { + if (status) { + this.filesCreated++; + } + if (this.filesCreated === this.filesToCreate) { + //TODO: Add logic for task completed + } + }.bind(this)); + } + } + } + }.bind(libjson)); + } + } else { + //Error + } } } } else { @@ -99,18 +145,34 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { //Error } } - }/* -, + }, //////////////////////////////////////////////////////////////////// // - createFolder: { + createDirectory: { enumerable: true, - value: function(name) { + value: function(root, folder, callback) { // - this.chromeApi.directoryNew(name); + if (folder.name) { + if (root) { + dir = root+'/'+folder.name; + } else { + dir = folder.name; + } + // + this.chromeApi.directoryNew(dir, function (status) {if (callback)callback(status)}); + } + // + if (folder.children) { + for (var j in folder.children) { + if (root) { + this.createDirectory(root+'/'+folder.name, folder.children[j]); + } else { + this.createDirectory(folder.name, folder.children[j]); + } + } + } } } -*/ //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// }); diff --git a/node_modules/descriptor.json b/node_modules/descriptor.json index 27342af7..29273403 100644 --- a/node_modules/descriptor.json +++ b/node_modules/descriptor.json @@ -1,6 +1,7 @@ { "copyright": "This file contains proprietary software owned by Motorola Mobility, Inc. No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder. (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.", "version": "0.0.0.0", + "root": "/ninja-internal/node_modules/montage/", "directories": [{"name": "core", "children": [{"name": "converter"}, {"name": "event"}, {"name": "geometry"}, {"name": "shim"}] }, -- cgit v1.2.3