From 23d958580a785ae265bb0a78f238093cc93cee85 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Sat, 4 Feb 2012 22:32:18 -0800
Subject: Setting up Chrome File System API class
Chrome file system API will be used to copy over files from the sandboxed app into the sandboxed file system directory (in Chrome) to then be used by the core API and the cloud.
---
js/io/system/chromeapi.js | 295 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 295 insertions(+)
create mode 100644 js/io/system/chromeapi.js
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
new file mode 100644
index 00000000..d1ff6da3
--- /dev/null
+++ b/js/io/system/chromeapi.js
@@ -0,0 +1,295 @@
+/*
+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.
+ */
+
+/* /////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////
+NOTES:
+////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////// */
+//
+var Montage = require("montage/core/core").Montage;
+////////////////////////////////////////////////////////////////////////
+//
+exports.ChromeApi = Montage.create(Object.prototype, {
+ ////////////////////////////////////////////////////////////////////
+ //Needs size in MBs for fileSystem init
+ init: {
+ enumerable: true,
+ value: function(size) {
+ //
+ if (window.webkitRequestFileSystem) {
+ //Current way to init Chrome's fileSystem API
+ window.webkitRequestFileSystem(window.PERSISTENT, size*1024*1024, function (fs) {
+ this.fileSystem = fs;
+ }).bind(this);
+ } else {
+ //No fileSystem API
+ }
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ _fileSystem: {
+ enumerable: false,
+ value: null
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ fileSystem: {
+ enumerable: false,
+ get: function() {
+ return this._fileSystem;
+ },
+ set: function(value) {
+ this._fileSystem = value;
+ }
+ }
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+});
+////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////
+
+
+
+//window.webkitRequestFileSystem(window.PERSISTENT, 10*1024*1024 /*10MB*/, function (fs) {
+
+
+
+ /*
+for (var i=1; i<50; i++) {
+ fs.root.getDirectory('montage0.0.0.'+i, {}, function(dirEntry) {
+ //
+ dirEntry.removeRecursively(function() {
+ console.log('Directory removed.');
+ });
+ });
+ }
+*/
+
+
+
+
+
+
+ //
+ /*
+var xhr = new XMLHttpRequest(), dir, mjs;
+ //
+ xhr.open("GET", '/ninja-internal/node_modules/descriptor.json', false);
+ xhr.send();
+ //
+ if (xhr.readyState === 4) {
+ //
+ mjs = JSON.parse(xhr.response);
+ //
+ if (mjs.version) {
+ //Checking for version to exist
+ fs.root.getDirectory('montage'+mjs.version, {}, function(dirEntry) {
+ //Already copied, nothing
+ console.log('montage'+mjs.version+' has already been created');
+ }, function (e) {
+ //Not present, should be copied
+ createFolder(false, {name: 'montage'+mjs.version});
+ //
+ for (var i in mjs.directories) {
+ createFolder('montage'+mjs.version, mjs.directories[i]);
+ }
+ //
+
+
+ for (var j in mjs.files) {
+
+ var frqst = new XMLHttpRequest();
+ frqst.open("GET", '/ninja-internal/node_modules/montage/'+mjs.files[j], false);
+ frqst.send();
+
+ if (frqst.readyState === 4) {
+ createFile('montage'+mjs.version+'/'+mjs.files[j], frqst.response);
+ }
+ }
+
+ //
+ console.log('montage'+mjs.version+' was created');
+ }, folderError);
+ }
+
+ }
+ //
+ function createFile (path, content) {
+ //
+ fs.root.getFile(path, {create: true}, function(fileEntry) {
+ //
+ fileEntry.createWriter(function(fileWriter) {
+ //
+ //console.log(path);
+ var bb = new window.WebKitBlobBuilder;
+ bb.append(content);
+ fileWriter.write(bb.getBlob('text/plain'));
+ }, fileError);
+
+ }, fileError);
+ }
+ //
+ function createFolder(root, folder) {
+ if (folder.name) {
+ if (root) {
+ dir = root+'/'+folder.name;
+ } else {
+ dir = folder.name;
+ }
+ //
+ //console.log(dir);
+ //
+ fs.root.getDirectory(dir, {create: true}, function(dirEntry) {
+ //
+ }, folderError);
+ }
+ //
+ if (folder.children) {
+ for (var i in folder.children) {
+ if (root) {
+ createFolder(root+'/'+folder.name, folder.children[i]);
+ } else {
+ createFolder(folder.name, folder.children[i]);
+ }
+ }
+ }
+ }
+ //
+ function folderError (e) {
+ console.log(e);
+ }
+ function fileError (e) {
+ console.log(e);
+ }
+
+
+ setTimeout( function () {
+ for (var m in mjs.files) {
+
+ fs.root.getFile('montage'+mjs.version+'/'+mjs.files[m], {}, function(fileEntry) {
+
+ console.log(mjs.files[m]);
+
+ fileEntry.file(function(file) {
+
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ //console.log(e.target.file.name);
+ var test = this.createFile({uri: '/Users/kgq387/Desktop/Ninja Cloud/Disk/'+e.target.file.name, contents: e.target.result});
+ }.bind(this);
+
+ reader.file = file;
+ reader.readAsText(file);
+
+ }.bind(this));
+
+ }.bind(this));
+
+ }}.bind(this), 5000);
+*/
+
+
+
+
+
+ //}.bind(this));
+
+
+
+
+
+
+
+ ////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////
+ //TODO: Remove, this is only for testing
+
+
+ /*
+window.webkitRequestFileSystem(window.PERSISTENT, 10*1024*1024 , function (fs) {
+
+
+ var start = new Date().getTime();
+
+ for (var i=0; i<250; i++) {
+
+ fs.root.getFile('test'+i+'.txt', {create: true}, function(fileEntry) {
+
+ fileEntry.createWriter(function(fileWriter) {
+
+
+ var xhr = new XMLHttpRequest();
+ //
+ xhr.open("GET", '/ninja-internal/js/io/templates/descriptor.json', false);
+ xhr.send();
+ //
+ if (xhr.readyState === 4) {
+ var bb = new window.WebKitBlobBuilder;
+ bb.append(xhr.response);
+ fileWriter.write(bb.getBlob('text/plain'));
+ }
+
+ });
+
+ });
+
+ }
+
+ var end = new Date().getTime();
+ var time = end - start;
+ console.log('Create execution time: ' + time);
+
+ start = new Date().getTime();
+
+ for (var j=0; j<250; j++) {
+
+ fs.root.getFile('test'+j+'.txt', {create: true}, function(fileEntry) {
+
+
+
+ fileEntry.file(function(file) {
+
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ //console.log(this, e.target);
+ var test = this.createFile({uri: '/Users/kgq387/Desktop/Ninja Cloud/Disk/'+e.target.file.name, contents: e.target.result});
+ console.log(e.target.file.name);
+
+ }.bind(this);
+
+ reader.file = file;
+ reader.readAsText(file);
+
+ }.bind(this));
+
+ }.bind(this));
+
+ }
+
+
+ end = new Date().getTime();
+ time = end - start;
+ console.log('Read execution time: ' + time);
+
+ for (var k=0; k<250; k++) {
+
+ fs.root.getFile('test'+k+'.txt', {create: true}, function(fileEntry) {
+
+ fileEntry.remove(function(fileWriter) {
+
+
+ });
+
+ });
+
+ }
+
+
+
+ }.bind(this));
+*/
\ No newline at end of file
--
cgit v1.2.3
From 8c530e9291721083ba11746fc5b3da66dc692120 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Sun, 5 Feb 2012 10:42:58 -0800
Subject: Setting up IO Ninja Library
This class will be used to copy locally the library needed for Ninja's IO.
---
js/io/system/chromeapi.js | 49 ++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index d1ff6da3..04e62b11 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -7,6 +7,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
/* /////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
NOTES:
+ The init function starts up the file system API, and a size must be
+ set, no unlimited available as of now.
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////// */
//
@@ -24,9 +26,11 @@ exports.ChromeApi = Montage.create(Object.prototype, {
//Current way to init Chrome's fileSystem API
window.webkitRequestFileSystem(window.PERSISTENT, size*1024*1024, function (fs) {
this.fileSystem = fs;
- }).bind(this);
+ }.bind(this));
+ return true;
} else {
//No fileSystem API
+ return false;
}
}
},
@@ -46,6 +50,49 @@ exports.ChromeApi = Montage.create(Object.prototype, {
set: function(value) {
this._fileSystem = value;
}
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ directoryNew: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+
+ ////////////////////////////////////////////////////////////////////
+ //
+ directoryDelete: {//TODO: Make sure it uses a force delete
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ directoryContents: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ directoryCopy: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ directoryRename: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ directoryMove: {
+ enumerable: true,
+ value: function() {
+ }
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
--
cgit v1.2.3
From 20803c71179bcffeaeaba4375bd06155d21dafe6 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Sun, 5 Feb 2012 22:46:24 -0800
Subject: Setting up Chrome IO class
---
js/io/system/chromeapi.js | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index 04e62b11..6bf6b9fe 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -25,8 +25,14 @@ exports.ChromeApi = Montage.create(Object.prototype, {
if (window.webkitRequestFileSystem) {
//Current way to init Chrome's fileSystem API
window.webkitRequestFileSystem(window.PERSISTENT, size*1024*1024, function (fs) {
+ //Storing reference to instance
this.fileSystem = fs;
- }.bind(this));
+ //Dispatching action ready event
+ var readyEvent = document.createEvent("CustomEvent");
+ readyEvent.initEvent('ready', true, true);
+ this.dispatchEvent(readyEvent);
+ }.bind(this), function (e) {return false}); //Returns false on error (not able to init)
+ //
return true;
} else {
//No fileSystem API
@@ -93,6 +99,15 @@ exports.ChromeApi = Montage.create(Object.prototype, {
enumerable: true,
value: function() {
}
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ getLocalLibrary: {
+ enumerable: false,
+ value: function () {
+ //
+ return {};
+ }
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
--
cgit v1.2.3
From 295d72960cad391850803e8c4e83d5133bbe82f7 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Mon, 6 Feb 2012 11:40:15 -0800
Subject: Setting up library detection for Chrome File System
---
js/io/system/chromeapi.js | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index 6bf6b9fe..f4e04a09 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -31,6 +31,8 @@ exports.ChromeApi = Montage.create(Object.prototype, {
var readyEvent = document.createEvent("CustomEvent");
readyEvent.initEvent('ready', true, true);
this.dispatchEvent(readyEvent);
+ //Building data of local Ninja Library
+ this._listNinjaChromeLibrary();
}.bind(this), function (e) {return false}); //Returns false on error (not able to init)
//
return true;
@@ -73,10 +75,17 @@ exports.ChromeApi = Montage.create(Object.prototype, {
}
},
////////////////////////////////////////////////////////////////////
- //
+ //Returns the directory contents to a callback function
directoryContents: {
enumerable: true,
- value: function() {
+ value: function(directory, callback) {
+ //Creating instance of directory reader
+ this.fileSystem.directoryReader = directory.createReader();
+ //Getting directory contents and sending results to callback
+ this.fileSystem.directoryReader.readEntries(function(results) {
+ //Calling callback with results (null if invalid directory)
+ callback(results);
+ }, function (e) {callback(null)});
}
},
////////////////////////////////////////////////////////////////////
@@ -102,11 +111,24 @@ exports.ChromeApi = Montage.create(Object.prototype, {
},
////////////////////////////////////////////////////////////////////
//
- getLocalLibrary: {
+ _listNinjaChromeLibrary: {
enumerable: false,
value: function () {
+ function parseLibrary (contents) {
+ //
+ var lib = [];
+ //
+
+
+
+ //Dispatching action ready event
+ var libraryEvent = document.createEvent("CustomEvent");
+ libraryEvent.initEvent('library', true, true);
+ libraryEvent.ninjaChromeLibrary = lib;
+ this.dispatchEvent(libraryEvent);
+ };
//
- return {};
+ this.directoryContents(this.fileSystem.root, parseLibrary.bind(this));
}
}
////////////////////////////////////////////////////////////////////
--
cgit v1.2.3
From 0db246b19dc0b50f4f663a147ec92c49e656ae35 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Mon, 6 Feb 2012 16:32:15 -0800
Subject: Adding logic to copy ninja libraries
Setting up the logic to handling copying ninja required libraries into the app local file system sandbox to be used by cloud simulator.
---
js/io/system/chromeapi.js | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index f4e04a09..fb141687 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -69,9 +69,16 @@ exports.ChromeApi = Montage.create(Object.prototype, {
////////////////////////////////////////////////////////////////////
//
- directoryDelete: {//TODO: Make sure it uses a force delete
+ directoryDelete: {
enumerable: true,
- value: function() {
+ value: function(directoryPath, callback) {
+ //
+ this.fileSystem.getDirectory(directoryPath, {}, function(dirEntry) {
+ //
+ dirEntry.removeRecursively(function() {
+ callback(true);
+ });
+ }, function (e) {callback(false)});
}
},
////////////////////////////////////////////////////////////////////
--
cgit v1.2.3
From ad85ff92ba44fb3c8ccf24c2f1b9296804dfa8ca Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Mon, 6 Feb 2012 22:33:42 -0800
Subject: Single file library syncing
Added the ability to store locally in chrome single file libraries used by Ninja. Working on adding multi-file libraries.
---
js/io/system/chromeapi.js | 51 ++++++++++++++++++++++++++++++++++++++---------
1 file changed, 42 insertions(+), 9 deletions(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index fb141687..6df41fd3 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -9,6 +9,9 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
NOTES:
The init function starts up the file system API, and a size must be
set, no unlimited available as of now.
+
+ Core API reference in NINJA: this.application.ninja.coreIoApi
+
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////// */
//
@@ -61,24 +64,51 @@ exports.ChromeApi = Montage.create(Object.prototype, {
},
////////////////////////////////////////////////////////////////////
//
+ fileNew: {
+ enumerable: true,
+ value: function(filePath, content, mime, callback) {
+ //
+ this.fileSystem.root.getFile(filePath, {create: true}, function(f) {
+ //
+ f.createWriter(function(writer) {
+ //
+ var b = new window.WebKitBlobBuilder;
+ b.append(content);
+ writer.write(b.getBlob(mime));
+ //
+ if (callback) callback(true);
+ }, function (e) {if (callback) callback(false)});
+ }, function (e) {if (callback) callback(false)});
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //Creating directory from path, callback optional
directoryNew: {
enumerable: true,
- value: function() {
+ value: function(directoryPath, callback) {
+ //Checking for directory not to already exist
+ this.fileSystem.root.getDirectory(directoryPath, {}, function(dir) {
+ if (callback) callback(false);
+ return; //Directory already exists
+ });
+ //Creating new directory
+ this.fileSystem.root.getDirectory(directoryPath, {create: true}, function(dir) {
+ if (callback) callback(true);
+ }, function (e) {if (callback) callback(false)});
}
},
-
////////////////////////////////////////////////////////////////////
//
directoryDelete: {
enumerable: true,
value: function(directoryPath, callback) {
//
- this.fileSystem.getDirectory(directoryPath, {}, function(dirEntry) {
+ this.fileSystem.root.getDirectory(directoryPath, {}, function(dir) {
//
- dirEntry.removeRecursively(function() {
- callback(true);
+ dir.removeRecursively(function() {
+ if (callback) callback(true);
});
- }, function (e) {callback(false)});
+ }, function (e) {if (callback) callback(false)});
}
},
////////////////////////////////////////////////////////////////////
@@ -125,9 +155,12 @@ exports.ChromeApi = Montage.create(Object.prototype, {
//
var lib = [];
//
-
-
-
+ for(var i=0; contents[i]; i++) {
+ //
+ if (contents[i].isDirectory) {
+ lib.push(contents[i].name);
+ }
+ }
//Dispatching action ready event
var libraryEvent = document.createEvent("CustomEvent");
libraryEvent.initEvent('library', true, true);
--
cgit v1.2.3
From 111509d5cbbd54b11afbc49f7c78d0c0548bb617 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Tue, 7 Feb 2012 12:06:21 -0800
Subject: Adding mime-type detection for new file
---
js/io/system/chromeapi.js | 288 +++++++---------------------------------------
1 file changed, 44 insertions(+), 244 deletions(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index 6df41fd3..2fc8769c 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -66,13 +66,54 @@ exports.ChromeApi = Montage.create(Object.prototype, {
//
fileNew: {
enumerable: true,
- value: function(filePath, content, mime, callback) {
+ value: function(filePath, content, callback) {
//
this.fileSystem.root.getFile(filePath, {create: true}, function(f) {
//
f.createWriter(function(writer) {
//
- var b = new window.WebKitBlobBuilder;
+ var b, mime, type = filePath.split('.');
+ type = type[type.length-1];
+ switch (type) {
+ case 'bmp':
+ mime = 'image/bmp';
+ break;
+ case 'gif':
+ mime = 'image/gif';
+ break;
+ case 'jpeg':
+ mime = 'image/jpeg';
+ break;
+ case 'jpg':
+ mime = 'image/jpeg';
+ break;
+ case 'png':
+ mime = 'image/png';
+ break;
+ case 'rtf':
+ mime = 'application/rtf';
+ break;
+ case 'tif':
+ mime = 'image/tiff';
+ break;
+ case 'tiff':
+ mime = 'image/tiff';
+ break;
+ case 'pdf':
+ mime = 'application/pdf';
+ break;
+ case 'zip':
+ mime = 'application/zip';
+ break;
+ case 'svg':
+ mime = 'image/svg+xml';
+ break;
+ default:
+ mime = 'text/'+type;
+ break;
+ }
+ //
+ b = new window.WebKitBlobBuilder;
b.append(content);
writer.write(b.getBlob(mime));
//
@@ -175,245 +216,4 @@ exports.ChromeApi = Montage.create(Object.prototype, {
////////////////////////////////////////////////////////////////////
});
////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////
-
-
-
-//window.webkitRequestFileSystem(window.PERSISTENT, 10*1024*1024 /*10MB*/, function (fs) {
-
-
-
- /*
-for (var i=1; i<50; i++) {
- fs.root.getDirectory('montage0.0.0.'+i, {}, function(dirEntry) {
- //
- dirEntry.removeRecursively(function() {
- console.log('Directory removed.');
- });
- });
- }
-*/
-
-
-
-
-
-
- //
- /*
-var xhr = new XMLHttpRequest(), dir, mjs;
- //
- xhr.open("GET", '/ninja-internal/node_modules/descriptor.json', false);
- xhr.send();
- //
- if (xhr.readyState === 4) {
- //
- mjs = JSON.parse(xhr.response);
- //
- if (mjs.version) {
- //Checking for version to exist
- fs.root.getDirectory('montage'+mjs.version, {}, function(dirEntry) {
- //Already copied, nothing
- console.log('montage'+mjs.version+' has already been created');
- }, function (e) {
- //Not present, should be copied
- createFolder(false, {name: 'montage'+mjs.version});
- //
- for (var i in mjs.directories) {
- createFolder('montage'+mjs.version, mjs.directories[i]);
- }
- //
-
-
- for (var j in mjs.files) {
-
- var frqst = new XMLHttpRequest();
- frqst.open("GET", '/ninja-internal/node_modules/montage/'+mjs.files[j], false);
- frqst.send();
-
- if (frqst.readyState === 4) {
- createFile('montage'+mjs.version+'/'+mjs.files[j], frqst.response);
- }
- }
-
- //
- console.log('montage'+mjs.version+' was created');
- }, folderError);
- }
-
- }
- //
- function createFile (path, content) {
- //
- fs.root.getFile(path, {create: true}, function(fileEntry) {
- //
- fileEntry.createWriter(function(fileWriter) {
- //
- //console.log(path);
- var bb = new window.WebKitBlobBuilder;
- bb.append(content);
- fileWriter.write(bb.getBlob('text/plain'));
- }, fileError);
-
- }, fileError);
- }
- //
- function createFolder(root, folder) {
- if (folder.name) {
- if (root) {
- dir = root+'/'+folder.name;
- } else {
- dir = folder.name;
- }
- //
- //console.log(dir);
- //
- fs.root.getDirectory(dir, {create: true}, function(dirEntry) {
- //
- }, folderError);
- }
- //
- if (folder.children) {
- for (var i in folder.children) {
- if (root) {
- createFolder(root+'/'+folder.name, folder.children[i]);
- } else {
- createFolder(folder.name, folder.children[i]);
- }
- }
- }
- }
- //
- function folderError (e) {
- console.log(e);
- }
- function fileError (e) {
- console.log(e);
- }
-
-
- setTimeout( function () {
- for (var m in mjs.files) {
-
- fs.root.getFile('montage'+mjs.version+'/'+mjs.files[m], {}, function(fileEntry) {
-
- console.log(mjs.files[m]);
-
- fileEntry.file(function(file) {
-
- var reader = new FileReader();
- reader.onloadend = function(e) {
- //console.log(e.target.file.name);
- var test = this.createFile({uri: '/Users/kgq387/Desktop/Ninja Cloud/Disk/'+e.target.file.name, contents: e.target.result});
- }.bind(this);
-
- reader.file = file;
- reader.readAsText(file);
-
- }.bind(this));
-
- }.bind(this));
-
- }}.bind(this), 5000);
-*/
-
-
-
-
-
- //}.bind(this));
-
-
-
-
-
-
-
- ////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////
- //TODO: Remove, this is only for testing
-
-
- /*
-window.webkitRequestFileSystem(window.PERSISTENT, 10*1024*1024 , function (fs) {
-
-
- var start = new Date().getTime();
-
- for (var i=0; i<250; i++) {
-
- fs.root.getFile('test'+i+'.txt', {create: true}, function(fileEntry) {
-
- fileEntry.createWriter(function(fileWriter) {
-
-
- var xhr = new XMLHttpRequest();
- //
- xhr.open("GET", '/ninja-internal/js/io/templates/descriptor.json', false);
- xhr.send();
- //
- if (xhr.readyState === 4) {
- var bb = new window.WebKitBlobBuilder;
- bb.append(xhr.response);
- fileWriter.write(bb.getBlob('text/plain'));
- }
-
- });
-
- });
-
- }
-
- var end = new Date().getTime();
- var time = end - start;
- console.log('Create execution time: ' + time);
-
- start = new Date().getTime();
-
- for (var j=0; j<250; j++) {
-
- fs.root.getFile('test'+j+'.txt', {create: true}, function(fileEntry) {
-
-
-
- fileEntry.file(function(file) {
-
- var reader = new FileReader();
- reader.onloadend = function(e) {
- //console.log(this, e.target);
- var test = this.createFile({uri: '/Users/kgq387/Desktop/Ninja Cloud/Disk/'+e.target.file.name, contents: e.target.result});
- console.log(e.target.file.name);
-
- }.bind(this);
-
- reader.file = file;
- reader.readAsText(file);
-
- }.bind(this));
-
- }.bind(this));
-
- }
-
-
- end = new Date().getTime();
- time = end - start;
- console.log('Read execution time: ' + time);
-
- for (var k=0; k<250; k++) {
-
- fs.root.getFile('test'+k+'.txt', {create: true}, function(fileEntry) {
-
- fileEntry.remove(function(fileWriter) {
-
-
- });
-
- });
-
- }
-
-
-
- }.bind(this));
-*/
\ No newline at end of file
+////////////////////////////////////////////////////////////////////////
\ No newline at end of file
--
cgit v1.2.3
From af58afcffff5ac556d16f050a325ac0406897fcd Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Tue, 7 Feb 2012 17:03:44 -0800
Subject: Copy local library to cloud
Adding functionality to copy a local library to the cloud. Currently creating directory structure. Need to add ability to copy files and ensure proper mime-type is set.
---
js/io/system/chromeapi.js | 43 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 41 insertions(+), 2 deletions(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index 2fc8769c..fc93b22a 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -7,11 +7,10 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
/* /////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
NOTES:
+
The init function starts up the file system API, and a size must be
set, no unlimited available as of now.
- Core API reference in NINJA: this.application.ninja.coreIoApi
-
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////// */
//
@@ -123,6 +122,46 @@ exports.ChromeApi = Montage.create(Object.prototype, {
}
},
////////////////////////////////////////////////////////////////////
+ //
+ fileDelete: {
+ enumerable: true,
+ value: function(filePath, callback) {
+ this.fileSystem.root.getFile(filePath, {create: false}, function(file) {
+ file.remove(function() {
+ if (callback) callback(true);
+ });
+ }, function (e) {if (callback) callback(false)});
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ fileContent: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ fileCopy: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ fileRename: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
+ //
+ fileMove: {
+ enumerable: true,
+ value: function() {
+ }
+ },
+ ////////////////////////////////////////////////////////////////////
//Creating directory from path, callback optional
directoryNew: {
enumerable: true,
--
cgit v1.2.3
From 687cfbbae1df2392267e9602f955f6eadd5b339d Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Tue, 7 Feb 2012 23:13:15 -0800
Subject: Mime type fixes
Trying to fix mime type issues in FileSystem, Chrome does not support reponseType 'blob', so looking at alternatives.
---
js/io/system/chromeapi.js | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index fc93b22a..c19a7d3b 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -71,7 +71,7 @@ exports.ChromeApi = Montage.create(Object.prototype, {
//
f.createWriter(function(writer) {
//
- var b, mime, type = filePath.split('.');
+ var mime, blob = new window.WebKitBlobBuilder, type = filePath.split('.');
type = type[type.length-1];
switch (type) {
case 'bmp':
@@ -112,9 +112,8 @@ exports.ChromeApi = Montage.create(Object.prototype, {
break;
}
//
- b = new window.WebKitBlobBuilder;
- b.append(content);
- writer.write(b.getBlob(mime));
+ blob.append(content);
+ writer.write(blob.getBlob(mime));
//
if (callback) callback(true);
}, function (e) {if (callback) callback(false)});
@@ -137,7 +136,19 @@ exports.ChromeApi = Montage.create(Object.prototype, {
//
fileContent: {
enumerable: true,
- value: function() {
+ value: function(filePath, callback) {
+ //
+ this.fileSystem.root.getFile(filePath, {}, function(f) {
+ f.file(function(file) {
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ if (callback) {
+ callback({content: this.result, data: file, file: f, url: f.toURL()});
+ }
+ };
+ reader.readAsText(file);
+ }, function (e) {if (callback) callback(false)});
+ }, function (e) {if (callback) callback(false)});
}
},
////////////////////////////////////////////////////////////////////
--
cgit v1.2.3
From 4bfac53c9a77a3af35d029757eece53f4b7212ed Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Wed, 8 Feb 2012 13:11:48 -0800
Subject: Fixed data type issue on copying library files
Fixed the methods to allow for ArrayBuffer data to be sent, fixes saving files that are not plain text.
---
js/io/system/chromeapi.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index c19a7d3b..eee7409d 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -146,7 +146,7 @@ exports.ChromeApi = Montage.create(Object.prototype, {
callback({content: this.result, data: file, file: f, url: f.toURL()});
}
};
- reader.readAsText(file);
+ reader.readAsArrayBuffer(file);
}, function (e) {if (callback) callback(false)});
}, function (e) {if (callback) callback(false)});
}
--
cgit v1.2.3
From c627ebb5735d55218813b073c655dae6cded6040 Mon Sep 17 00:00:00 2001
From: Ananya Sen
Date: Fri, 10 Feb 2012 15:50:14 -0800
Subject: show iframeContainer if all documents are closed
Signed-off-by: Ananya Sen
---
js/io/system/chromeapi.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'js/io/system/chromeapi.js')
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js
index eee7409d..e53d4841 100644
--- a/js/io/system/chromeapi.js
+++ b/js/io/system/chromeapi.js
@@ -180,7 +180,7 @@ exports.ChromeApi = Montage.create(Object.prototype, {
//Checking for directory not to already exist
this.fileSystem.root.getDirectory(directoryPath, {}, function(dir) {
if (callback) callback(false);
- return; //Directory already exists
+ return false; //Directory already exists
});
//Creating new directory
this.fileSystem.root.getDirectory(directoryPath, {create: true}, function(dir) {
--
cgit v1.2.3