diff options
author | Jose Antonio Marquez | 2012-02-07 11:14:57 -0800 |
---|---|---|
committer | Jose Antonio Marquez | 2012-02-07 11:14:57 -0800 |
commit | c4c5a8b49bb26d6344edceba73834754bb9930cf (patch) | |
tree | dff25a90b9121d8dcadae5ddcdaed51e1cd0df5c | |
parent | 72d945218dd470770d6a85a557153a58364f9169 (diff) | |
download | ninja-c4c5a8b49bb26d6344edceba73834754bb9930cf.tar.gz |
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.
-rw-r--r-- | js/io/system/ninjalibrary.js | 88 | ||||
-rw-r--r-- | 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, { | |||
42 | // | 42 | // |
43 | this.chromeApi = chrome; | 43 | this.chromeApi = chrome; |
44 | // | 44 | // |
45 | var i, libs, xhr = new XMLHttpRequest(), tocopylibs = []; | 45 | var i, l, libs, libjson, xhr = new XMLHttpRequest(), tocopylibs = []; |
46 | //Getting known json list of libraries to copy to chrome | 46 | //Getting known json list of libraries to copy to chrome |
47 | xhr.open("GET", '/ninja-internal/js/io/system/ninjalibrary.json', false); | 47 | xhr.open("GET", '/ninja-internal/js/io/system/ninjalibrary.json', false); |
48 | xhr.send(); | 48 | xhr.send(); |
@@ -52,9 +52,9 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { | |||
52 | libs = JSON.parse(xhr.response); | 52 | libs = JSON.parse(xhr.response); |
53 | // | 53 | // |
54 | if (chromeLibs.length > 0) { | 54 | if (chromeLibs.length > 0) { |
55 | //Compare (always deleting for testing) | 55 | //TODO: Remove |
56 | for (i=0; chromeLibs[i]; i++) { | 56 | for (i=0; chromeLibs[i]; i++) { |
57 | this.chromeApi.directoryDelete(chromeLibs[i]); | 57 | this.chromeApi.directoryDelete(chromeLibs[i]); |
58 | } | 58 | } |
59 | } else { | 59 | } else { |
60 | //No library is present, must copy all | 60 | //No library is present, must copy all |
@@ -84,12 +84,58 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { | |||
84 | if (xhr.readyState === 4) { //TODO: add check for mime type | 84 | if (xhr.readyState === 4) { //TODO: add check for mime type |
85 | //Creating new file from loaded content | 85 | //Creating new file from loaded content |
86 | this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response, 'text/plain'); | 86 | this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response, 'text/plain'); |
87 | //this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response, 'text/plain', function (v){console.log(v)}); | ||
88 | } else { | 87 | } else { |
89 | //Error | 88 | //Error creating single file library |
90 | } | 89 | } |
91 | } else { | 90 | } else { |
92 | // | 91 | //Creating root folder |
92 | this.chromeApi.directoryNew('/'+tocopylibs[i].name); | ||
93 | //Getting file contents | ||
94 | xhr = new XMLHttpRequest(); | ||
95 | xhr.open("GET", tocopylibs[i].path, false); | ||
96 | xhr.send(); | ||
97 | //Checking for status | ||
98 | if (xhr.readyState === 4) { | ||
99 | // | ||
100 | libjson = JSON.parse(xhr.response); | ||
101 | // | ||
102 | for (l=0; libjson.directories[l]; l++) { | ||
103 | libjson.dirsToCreate = libjson.directories.length; | ||
104 | libjson.dirsCreated = 0; | ||
105 | libjson.filesToCreate = libjson.files.length; | ||
106 | libjson.filesCreated = 0; | ||
107 | libjson.api = this.chromeApi; | ||
108 | libjson.local = tocopylibs[i].name; | ||
109 | this.createDirectory(tocopylibs[i].name, libjson.directories[l], function (status) { | ||
110 | //Checking for success on directories created | ||
111 | if (status) { | ||
112 | this.dirsCreated++; | ||
113 | } | ||
114 | //All directories created | ||
115 | if (this.dirsCreated === this.dirsToCreate) { | ||
116 | var xhr, i; | ||
117 | for (i=0; this.files[i]; i++) { | ||
118 | xhr = new XMLHttpRequest(); | ||
119 | xhr.open("GET", this.root+this.files[i], false); | ||
120 | xhr.send(); | ||
121 | //Checking for status | ||
122 | if (xhr.readyState === 4) { | ||
123 | this.api.fileNew(this.local+'/'+this.files[i], xhr.response, 'text/plain', function (status) { | ||
124 | if (status) { | ||
125 | this.filesCreated++; | ||
126 | } | ||
127 | if (this.filesCreated === this.filesToCreate) { | ||
128 | //TODO: Add logic for task completed | ||
129 | } | ||
130 | }.bind(this)); | ||
131 | } | ||
132 | } | ||
133 | } | ||
134 | }.bind(libjson)); | ||
135 | } | ||
136 | } else { | ||
137 | //Error | ||
138 | } | ||
93 | } | 139 | } |
94 | } | 140 | } |
95 | } else { | 141 | } else { |
@@ -99,18 +145,34 @@ exports.NinjaLibrary = Montage.create(Object.prototype, { | |||
99 | //Error | 145 | //Error |
100 | } | 146 | } |
101 | } | 147 | } |
102 | }/* | 148 | }, |
103 | , | ||
104 | //////////////////////////////////////////////////////////////////// | 149 | //////////////////////////////////////////////////////////////////// |
105 | // | 150 | // |
106 | createFolder: { | 151 | createDirectory: { |
107 | enumerable: true, | 152 | enumerable: true, |
108 | value: function(name) { | 153 | value: function(root, folder, callback) { |
109 | // | 154 | // |
110 | this.chromeApi.directoryNew(name); | 155 | if (folder.name) { |
156 | if (root) { | ||
157 | dir = root+'/'+folder.name; | ||
158 | } else { | ||
159 | dir = folder.name; | ||
160 | } | ||
161 | // | ||
162 | this.chromeApi.directoryNew(dir, function (status) {if (callback)callback(status)}); | ||
163 | } | ||
164 | // | ||
165 | if (folder.children) { | ||
166 | for (var j in folder.children) { | ||
167 | if (root) { | ||
168 | this.createDirectory(root+'/'+folder.name, folder.children[j]); | ||
169 | } else { | ||
170 | this.createDirectory(folder.name, folder.children[j]); | ||
171 | } | ||
172 | } | ||
173 | } | ||
111 | } | 174 | } |
112 | } | 175 | } |
113 | */ | ||
114 | //////////////////////////////////////////////////////////////////// | 176 | //////////////////////////////////////////////////////////////////// |
115 | //////////////////////////////////////////////////////////////////// | 177 | //////////////////////////////////////////////////////////////////// |
116 | }); | 178 | }); |
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 @@ | |||
1 | { | 1 | { |
2 | "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.", | 2 | "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.", |
3 | "version": "0.0.0.0", | 3 | "version": "0.0.0.0", |
4 | "root": "/ninja-internal/node_modules/montage/", | ||
4 | "directories": [{"name": "core", | 5 | "directories": [{"name": "core", |
5 | "children": [{"name": "converter"}, {"name": "event"}, {"name": "geometry"}, {"name": "shim"}] | 6 | "children": [{"name": "converter"}, {"name": "event"}, {"name": "geometry"}, {"name": "shim"}] |
6 | }, | 7 | }, |