aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/io/system/ninjalibrary.js126
1 files changed, 51 insertions, 75 deletions
<
diff --git a/js/io/system/ninjalibrary.js b/js/io/system/ninjalibrary.js
index 3de5fb69..dab623c1 100644
--- a/js/io/system/ninjalibrary.js
+++ b/js/io/system/ninjalibrary.js
@@ -4,12 +4,7 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. 4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */ 5</copyright> */
6 6
7/* /////////////////////////////////////////////////////////////////////
8//////////////////////////////////////////////////////////////////////// 7////////////////////////////////////////////////////////////////////////
9NOTES:
10
11////////////////////////////////////////////////////////////////////////
12///////////////////////////////////////////////////////////////////// */
13// 8//
14var Montage = require("montage/core/core").Montage; 9var Montage = require("montage/core/core").Montage;
15//////////////////////////////////////////////////////////////////////// 10////////////////////////////////////////////////////////////////////////
@@ -18,73 +13,53 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
18 //////////////////////////////////////////////////////////////////// 13 ////////////////////////////////////////////////////////////////////
19 // 14 //
20 _chromeApi: { 15 _chromeApi: {
21 enumerable: false,
22 value: null 16 value: null
23 }, 17 },
24 //////////////////////////////////////////////////////////////////// 18 ////////////////////////////////////////////////////////////////////
25 // 19 //
26 chromeApi: { 20 chromeApi: {
27 enumerable: false, 21 get: function() {return this._chromeApi;},
28 get: function() { 22 set: function(value) {this._chromeApi = value;}
29 return this._chromeApi;
30 },
31 set: function(value) {
32 this._chromeApi = value;
33 }
34 }, 23 },
35 //////////////////////////////////////////////////////////////////// 24 ////////////////////////////////////////////////////////////////////
36 // 25 //
37 _coreApi: { 26 _coreApi: {
38 enumerable: false,
39 value: null 27 value: null
40 }, 28 },
41 //////////////////////////////////////////////////////////////////// 29 ////////////////////////////////////////////////////////////////////
42 // 30 //
43 coreApi: { 31 coreApi: {
44 enumerable: false, 32 get: function() {return this._coreApi;},
45 get: function() { 33 set: function(value) {this._coreApi = value;}
46 return this._coreApi;
47 },
48 set: function(value) {
49 this._coreApi = value;
50 }
51 }, 34 },
52 //////////////////////////////////////////////////////////////////// 35 ////////////////////////////////////////////////////////////////////
53 // 36 //
54 _libs: { 37 _libs: {
55 enumerable: false,
56 value: null 38 value: null
57 }, 39 },
58 //////////////////////////////////////////////////////////////////// 40 ////////////////////////////////////////////////////////////////////
59 // 41 //
60 libs: { 42 libs: {
61 enumerable: false, 43 get: function() {return this._libs;},
62 get: function() { 44 set: function(value) {this._libs = value;}
63 return this._libs;
64 },
65 set: function(value) {
66 this._libs = value;
67 }
68 }, 45 },
69 //////////////////////////////////////////////////////////////////// 46 ////////////////////////////////////////////////////////////////////
70 // 47 //
71 _libsToSync: { 48 _libsToSync: {
72 enumerable: false,
73 value: 0 49 value: 0
74 }, 50 },
75 //////////////////////////////////////////////////////////////////// 51 ////////////////////////////////////////////////////////////////////
76 // 52 //
77 _syncedLibs: { 53 _syncedLibs: {
78 enumerable: false,
79 value: 0 54 value: 0
80 }, 55 },
81 //////////////////////////////////////////////////////////////////// 56 ////////////////////////////////////////////////////////////////////
82 // 57 //
83 copyLibToCloud: { 58 copyLibToCloud: {
84 enumerable: false,
85 value: function (path, libName, callback) { 59 value: function (path, libName, callback) {
86 // 60 //Checking for library to exists
87 if(this.coreApi.directoryExists({uri: path+libName}).status === 404) { 61 if(this.coreApi.directoryExists({uri: path+libName}).status === 404) {
62 //Getting contents to begin copying
88 this.chromeApi.directoryContents(this.chromeApi.fileSystem.root, function (contents) { 63 this.chromeApi.directoryContents(this.chromeApi.fileSystem.root, function (contents) {
89 for (var i in contents) { 64 for (var i in contents) {
90 if (libName === contents[i].name) { 65 if (libName === contents[i].name) {
@@ -98,16 +73,15 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
98 } 73 }
99 }.bind(this)); 74 }.bind(this));
100 } else { 75 } else {
101 //Error 76 //TODO: Add error handling
102 } 77 }
103 } 78 }
104 }, 79 },
105 //////////////////////////////////////////////////////////////////// 80 ////////////////////////////////////////////////////////////////////
106 // 81 //
107 copyDirectoryToCloud: { 82 copyDirectoryToCloud: {
108 enumerable: true,
109 value: function(root, folder, fileRoot, callback) { 83 value: function(root, folder, fileRoot, callback) {
110 // 84 //Setting up directory name
111 if (folder.name) { 85 if (folder.name) {
112 var dir; 86 var dir;
113 if (root) { 87 if (root) {
@@ -115,23 +89,26 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
115 } else { 89 } else {
116 dir = folder.name; 90 dir = folder.name;
117 } 91 }
118 // 92 //Creating directory
119 if (!this.coreApi.createDirectory({uri: dir.replace(/\/\//gi, '/')})) { 93 if (!this.coreApi.createDirectory({uri: dir.replace(/\/\//gi, '/')})) {
120 //Error occured while creating folders 94 //Error occured while creating folders
121 return; 95 return; //TODO: Add error handling
122 } 96 }
123 } 97 }
124 // 98 //Checking for directory
125 if (folder.isDirectory) { 99 if (folder.isDirectory) {
100 //Using Chrome API to get directory contents
126 this.chromeApi.directoryContents(folder, function (contents) { 101 this.chromeApi.directoryContents(folder, function (contents) {
102 //Looping through children of directory to copy
127 for (var i in contents) { 103 for (var i in contents) {
104 //Checking for file or directory
128 if (contents[i].isDirectory) { 105 if (contents[i].isDirectory) {
106 //Recursive call if directory
129 this.copyDirectoryToCloud(dir, contents[i], fileRoot); 107 this.copyDirectoryToCloud(dir, contents[i], fileRoot);
130 } else if (contents[i].isFile){ 108 } else if (contents[i].isFile){
131 //File to copy 109 //Copying file
132 this.chromeApi.fileContent(contents[i].fullPath, function (result) { 110 this.chromeApi.fileContent(contents[i].fullPath, function (result) {
133 // 111 //Using binary when copying files to allow images and such to work
134 //this.coreApi.createFile({uri: fileRoot+result.file.fullPath, contents: blob.getBlob(result.data.type), contentType: result.data.type});
135 this.coreApi.createFile({uri: (fileRoot+result.file.fullPath).replace(/\/\//gi, '/'), contents: result.content}); 112 this.coreApi.createFile({uri: (fileRoot+result.file.fullPath).replace(/\/\//gi, '/'), contents: result.content});
136 }.bind(this)); 113 }.bind(this));
137 } 114 }
@@ -145,34 +122,31 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
145 //////////////////////////////////////////////////////////////////// 122 ////////////////////////////////////////////////////////////////////
146 // 123 //
147 synchronize: { 124 synchronize: {
148 enumerable: true,
149 value: function(chromeLibs, chrome) { 125 value: function(chromeLibs, chrome) {
150 //TODO: Remove 126 //TODO: Remove
151 window.wipeLibrary = this.deleteLibraries.bind(this); 127 window.wipeLibrary = this.deleteLibraries.bind(this);
152 // 128 //Getting instance of browser file API
153 this.chromeApi = chrome; 129 this.chromeApi = chrome;
154 // 130 //Local variables
155// debugger;
156 var i, l, libs, libjson, xhr = new XMLHttpRequest(), tocopylibs = []; 131 var i, l, libs, libjson, xhr = new XMLHttpRequest(), tocopylibs = [];
157 //Getting known json list of libraries to copy to chrome 132 //Getting known json list of libraries to copy to chrome (will be on a CDN later)
158 xhr.open("GET", '/js/io/system/ninjalibrary.json', false); 133 xhr.open("GET", '/js/io/system/ninjalibrary.json', false);
159 xhr.send(); 134 xhr.send();
160 //Checkng for correct reponse 135 //Checkng for correct reponse
161 if (xhr.readyState === 4) { 136 if (xhr.readyState === 4) {
162 //Parsing json libraries 137 //Parsing json libraries
163 libs = JSON.parse(xhr.response); 138 libs = JSON.parse(xhr.response);
164 // 139 //Storing JSON data
165 this.libs = libs.libraries; 140 this.libs = libs.libraries;
166 // 141 //Checking for preview libraries to avoid duplicates
167 if (chromeLibs.length > 0) { 142 if (chromeLibs.length > 0) {
168 // 143 //Looping through libraries on browser file system
169 for (i=0; chromeLibs[i]; i++) { 144 for (i=0; chromeLibs[i]; i++) {
170 for (var j in libs.libraries) { 145 for (var j in libs.libraries) {
171 if (String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase() === chromeLibs[i]) { 146 //Checking for matching names (directories are libraries names)
172 //TODO: Remove, currently manually removing copied libraries 147 if (String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase() !== chromeLibs[i]) {
173 // //this.chromeApi.directoryDelete(chromeLibs[i]); 148 //Checking for library to be single file (special case)
174 } else { 149 if (libs.libraries[j].file) {
175 if (libs.libraries[j].file) {
176 tocopylibs.push({name: String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase(), path: libs.libraries[j].path, file: libs.libraries[j].file}); 150 tocopylibs.push({name: String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase(), path: libs.libraries[j].path, file: libs.libraries[j].file});