/* <copyright> This file contains proprietary software owned by Motorola Mobility, Inc.<br/> No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. </copyright> */ /* ///////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// NOTES: The init function starts up the file system API, and a size must be set, no unlimited available as of now. //////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// */ // 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) { //Storing reference to instance this.fileSystem = fs; //Dispatching action ready event 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; } else { //No fileSystem API return false; } } }, //////////////////////////////////////////////////////////////////// // _fileSystem: { enumerable: false, value: null }, //////////////////////////////////////////////////////////////////// // fileSystem: { enumerable: false, get: function() { return this._fileSystem; }, set: function(value) { this._fileSystem = value; } }, //////////////////////////////////////////////////////////////////// // fileNew: { enumerable: true, value: function(filePath, content, callback) { // this.fileSystem.root.getFile(filePath, {create: true}, function(f) { // f.createWriter(function(writer) { // var mime, blob = new window.WebKitBlobBuilder, 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; } // blob.append(content); writer.write(blob.getBlob(mime)); // if (callback) callback(true); }, function (e) {if (callback) callback(false)}); }, function (e) {if (callback) callback(false)}); } }, //////////////////////////////////////////////////////////////////// // 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(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.readAsArrayBuffer(file); }, function (e) {if (callback) callback(false)}); }, function (e) {if (callback) callback(false)}); } }, //////////////////////////////////////////////////////////////////// // fileCopy: { enumerable: true, value: function() { } }, //////////////////////////////////////////////////////////////////// // fileRename: { enumerable: true, value: function() { } }, //////////////////////////////////////////////////////////////////// // fileMove: { enumerable: true, value: function() { } }, //////////////////////////////////////////////////////////////////// //Creating directory from path, callback optional directoryNew: { enumerable: true, value: function(directoryPath, callback) { //Checking for directory not to already exist this.fileSystem.root.getDirectory(directoryPath, {}, function(dir) { if (callback) callback(false); return false; //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.root.getDirectory(directoryPath, {}, function(dir) { // dir.removeRecursively(function() { if (callback) callback(true); }); }, function (e) {if (callback) callback(false)}); } }, //////////////////////////////////////////////////////////////////// //Returns the directory contents to a callback function directoryContents: { enumerable: true, 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)}); } }, //////////////////////////////////////////////////////////////////// // directoryCopy: { enumerable: true, value: function() { } }, //////////////////////////////////////////////////////////////////// // directoryRename: { enumerable: true, value: function() { } }, //////////////////////////////////////////////////////////////////// // directoryMove: { enumerable: true, value: function() { } }, //////////////////////////////////////////////////////////////////// // _listNinjaChromeLibrary: { enumerable: false, value: function () { function parseLibrary (contents) { // 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); libraryEvent.ninjaChromeLibrary = lib; this.dispatchEvent(libraryEvent); }; // this.directoryContents(this.fileSystem.root, parseLibrary.bind(this)); } } //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// }); //////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////