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