2013-06-04 15:36:13 -04:00
|
|
|
(function() {
|
|
|
|
'use strict';
|
|
|
|
|
2013-06-04 17:19:02 -04:00
|
|
|
var emailDao; // local variable for main DAO
|
|
|
|
|
2013-06-04 15:36:13 -04:00
|
|
|
/**
|
|
|
|
* The Template Loader. Used to asynchronously load templates located in separate .html files
|
|
|
|
*/
|
2013-06-04 19:10:09 -04:00
|
|
|
app.util.tpl.loadTemplates = function(names, callback) {
|
|
|
|
var that = this;
|
|
|
|
|
|
|
|
var loadTemplate = function(index) {
|
|
|
|
var name = names[index];
|
|
|
|
console.log('Loading template: ' + name);
|
|
|
|
$.get('tpl/' + name + '.html', function(data) {
|
|
|
|
that.templates[name] = data;
|
|
|
|
index++;
|
|
|
|
if (index < names.length) {
|
|
|
|
loadTemplate(index);
|
|
|
|
} else {
|
|
|
|
callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
loadTemplate(0);
|
2013-06-04 15:36:13 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Load templates and start the application
|
|
|
|
*/
|
|
|
|
$(document).ready(function() {
|
|
|
|
// are we running in native app or in browser?
|
|
|
|
var isBrowser = false;
|
|
|
|
if (document.URL.indexOf("http") === 0 || document.URL.indexOf("chrome") === 0) {
|
|
|
|
isBrowser = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!isBrowser) {
|
|
|
|
document.addEventListener("deviceready", onDeviceReady, false);
|
|
|
|
} else {
|
|
|
|
onDeviceReady();
|
|
|
|
}
|
|
|
|
|
|
|
|
function onDeviceReady() {
|
|
|
|
console.log('Starting in Browser: ' + isBrowser);
|
|
|
|
app.util.tpl.loadTemplates([
|
|
|
|
'login',
|
|
|
|
'compose',
|
|
|
|
'folderlist',
|
|
|
|
'messagelist',
|
|
|
|
'messagelistitem',
|
|
|
|
'read'
|
2013-06-04 17:19:02 -04:00
|
|
|
], startApp);
|
2013-06-04 15:36:13 -04:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2013-06-04 20:33:49 -04:00
|
|
|
function initDAO() {
|
|
|
|
var util = new cryptoLib.Util(window, uuid);
|
|
|
|
var crypto = new app.crypto.Crypto(window, util);
|
|
|
|
var cloudstorage = new app.dao.CloudStorage(window, $);
|
|
|
|
var jsonDao = new app.dao.LawnchairDAO(Lawnchair);
|
|
|
|
var devicestorage = new app.dao.DeviceStorage(util, crypto, jsonDao, null);
|
|
|
|
var keychain = new app.dao.KeychainDAO(jsonDao, cloudstorage);
|
|
|
|
emailDao = new app.dao.EmailDAO(jsonDao, crypto, devicestorage, cloudstorage, util, keychain);
|
|
|
|
}
|
|
|
|
|
2013-06-04 17:19:02 -04:00
|
|
|
function startApp() {
|
|
|
|
// init email dao and dependencies
|
|
|
|
initDAO();
|
|
|
|
// sandboxed ui in iframe
|
|
|
|
var sandbox = document.getElementById('sandboxFrame').contentWindow;
|
|
|
|
|
2013-06-04 19:10:09 -04:00
|
|
|
// set global listener for events from sandbox
|
2013-06-04 17:19:02 -04:00
|
|
|
window.onmessage = function(e) {
|
|
|
|
var cmd = e.data.cmd;
|
|
|
|
var args = e.data.args;
|
2013-06-04 19:10:09 -04:00
|
|
|
// handle the workload in the main window
|
|
|
|
handleCommand(cmd, args, function(resArgs) {
|
|
|
|
// send reponse to sandbox
|
|
|
|
sandbox.postMessage({
|
|
|
|
cmd: cmd,
|
|
|
|
args: resArgs
|
|
|
|
}, '*');
|
|
|
|
});
|
2013-06-04 17:19:02 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
// init sandbox ui
|
|
|
|
sandbox.postMessage({
|
|
|
|
cmd: 'init',
|
|
|
|
args: app.util.tpl.templates
|
|
|
|
}, '*');
|
|
|
|
}
|
|
|
|
|
2013-06-04 19:10:09 -04:00
|
|
|
function handleCommand(cmd, args, callback) {
|
|
|
|
if (cmd === 'login') {
|
|
|
|
// login user
|
|
|
|
login(args.userId, args.password, function(err) {
|
|
|
|
callback({
|
|
|
|
err: err
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
} else if (cmd === 'syncEmails') {
|
|
|
|
// list emails from folder
|
|
|
|
emailDao.syncFromCloud(args.folder, function(err) {
|
|
|
|
callback({
|
|
|
|
err: err
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
} else if (cmd === 'listEmails') {
|
|
|
|
// list emails from folder
|
|
|
|
emailDao.listItems(args.folder, args.offset, args.num, function(err, collection) {
|
|
|
|
callback({
|
|
|
|
err: err,
|
|
|
|
collection: collection.toJSON()
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2013-06-04 20:33:49 -04:00
|
|
|
} else if (cmd === 'sendEmail') {
|
|
|
|
// list emails from folder
|
|
|
|
sendEmail(args.email, function(err) {
|
|
|
|
callback({
|
|
|
|
err: err
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2013-06-04 19:10:09 -04:00
|
|
|
} else {
|
|
|
|
// error: invalid message from sandbox
|
|
|
|
callback({
|
|
|
|
err: {
|
|
|
|
errMsg: 'Invalid message posted from sandbox!'
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-06-04 17:19:02 -04:00
|
|
|
function login(userId, password, callback) {
|
|
|
|
var account = new app.model.Account({
|
|
|
|
emailAddress: userId,
|
|
|
|
symKeySize: app.config.symKeySize,
|
|
|
|
symIvSize: app.config.symIvSize,
|
|
|
|
asymKeySize: app.config.asymKeySize
|
|
|
|
});
|
|
|
|
emailDao.init(account, password, callback);
|
|
|
|
}
|
|
|
|
|
2013-06-04 20:33:49 -04:00
|
|
|
function sendEmail(email, callback) {
|
|
|
|
var em = new app.model.Email(email);
|
|
|
|
emailDao.sendEmail(em, callback);
|
|
|
|
}
|
|
|
|
|
2013-06-04 15:36:13 -04:00
|
|
|
}());
|