mirror of
https://github.com/moparisthebest/mail
synced 2024-12-01 21:32:17 -05:00
moved controller code out of window-loader
This commit is contained in:
parent
325ae14553
commit
b46c281715
@ -39,6 +39,7 @@
|
|||||||
<script src="js/dao/keychain-dao.js"></script>
|
<script src="js/dao/keychain-dao.js"></script>
|
||||||
<script src="js/dao/email-dao.js"></script>
|
<script src="js/dao/email-dao.js"></script>
|
||||||
|
|
||||||
|
<script src="js/app-controller.js"></script>
|
||||||
<script src="js/window-loader.js"></script>
|
<script src="js/window-loader.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
@ -30,8 +30,28 @@ var app; // container for the application namespace
|
|||||||
*/
|
*/
|
||||||
app.util.tpl = {
|
app.util.tpl = {
|
||||||
templates: {},
|
templates: {},
|
||||||
|
|
||||||
get: function(name) {
|
get: function(name) {
|
||||||
return this.templates[name];
|
return this.templates[name];
|
||||||
|
},
|
||||||
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
98
src/js/app-controller.js
Normal file
98
src/js/app-controller.js
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
/**
|
||||||
|
* The main application controller
|
||||||
|
*/
|
||||||
|
app.Controller = function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var emailDao; // local variable for the main email data access object
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes modules through dependecy injection
|
||||||
|
*/
|
||||||
|
this.init = function(callback) {
|
||||||
|
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);
|
||||||
|
|
||||||
|
callback();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes a number of commands
|
||||||
|
*/
|
||||||
|
this.execute = function(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()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (cmd === 'getEmail') {
|
||||||
|
// list emails from folder
|
||||||
|
var mail = emailDao.getItem(args.folder, args.messageId);
|
||||||
|
callback({
|
||||||
|
err: null,
|
||||||
|
email: mail.toJSON()
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (cmd === 'sendEmail') {
|
||||||
|
// list emails from folder
|
||||||
|
sendEmail(args.email, function(err) {
|
||||||
|
callback({
|
||||||
|
err: err
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// error: invalid message from sandbox
|
||||||
|
callback({
|
||||||
|
err: {
|
||||||
|
errMsg: 'Invalid message posted from sandbox!'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Helper methods
|
||||||
|
//
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendEmail(email, callback) {
|
||||||
|
var em = new app.model.Email(email);
|
||||||
|
emailDao.sendEmail(em, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
@ -1,29 +1,14 @@
|
|||||||
(function() {
|
(function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var emailDao; // local variable for main DAO
|
var views = [
|
||||||
|
'login',
|
||||||
/**
|
'compose',
|
||||||
* The Template Loader. Used to asynchronously load templates located in separate .html files
|
'folderlist',
|
||||||
*/
|
'messagelist',
|
||||||
app.util.tpl.loadTemplates = function(names, callback) {
|
'messagelistitem',
|
||||||
var that = this;
|
'read'
|
||||||
|
];
|
||||||
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);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load templates and start the application
|
* Load templates and start the application
|
||||||
@ -43,39 +28,22 @@
|
|||||||
|
|
||||||
function onDeviceReady() {
|
function onDeviceReady() {
|
||||||
console.log('Starting in Browser: ' + isBrowser);
|
console.log('Starting in Browser: ' + isBrowser);
|
||||||
app.util.tpl.loadTemplates([
|
app.util.tpl.loadTemplates(views, startApp);
|
||||||
'login',
|
|
||||||
'compose',
|
|
||||||
'folderlist',
|
|
||||||
'messagelist',
|
|
||||||
'messagelistitem',
|
|
||||||
'read'
|
|
||||||
], startApp);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
function startApp() {
|
function startApp() {
|
||||||
// init email dao and dependencies
|
|
||||||
initDAO();
|
|
||||||
// sandboxed ui in iframe
|
// sandboxed ui in iframe
|
||||||
var sandbox = document.getElementById('sandboxFrame').contentWindow;
|
var sandbox = document.getElementById('sandboxFrame').contentWindow;
|
||||||
|
var controller = new app.Controller();
|
||||||
|
|
||||||
// set global listener for events from sandbox
|
// set global listener for events from sandbox
|
||||||
window.onmessage = function(e) {
|
window.onmessage = function(e) {
|
||||||
var cmd = e.data.cmd;
|
var cmd = e.data.cmd;
|
||||||
var args = e.data.args;
|
var args = e.data.args;
|
||||||
|
|
||||||
// handle the workload in the main window
|
// handle the workload in the main window
|
||||||
handleCommand(cmd, args, function(resArgs) {
|
controller.execute(cmd, args, function(resArgs) {
|
||||||
// send reponse to sandbox
|
// send reponse to sandbox
|
||||||
sandbox.postMessage({
|
sandbox.postMessage({
|
||||||
cmd: cmd,
|
cmd: cmd,
|
||||||
@ -84,78 +52,14 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// init controller
|
||||||
|
controller.init(function() {
|
||||||
// init sandbox ui
|
// init sandbox ui
|
||||||
sandbox.postMessage({
|
sandbox.postMessage({
|
||||||
cmd: 'init',
|
cmd: 'init',
|
||||||
args: app.util.tpl.templates
|
args: app.util.tpl.templates
|
||||||
}, '*');
|
}, '*');
|
||||||
}
|
|
||||||
|
|
||||||
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()
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (cmd === 'getEmail') {
|
|
||||||
// list emails from folder
|
|
||||||
var mail = emailDao.getItem(args.folder, args.messageId);
|
|
||||||
callback({
|
|
||||||
err: null,
|
|
||||||
email: mail.toJSON()
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (cmd === 'sendEmail') {
|
|
||||||
// list emails from folder
|
|
||||||
sendEmail(args.email, function(err) {
|
|
||||||
callback({
|
|
||||||
err: err
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// error: invalid message from sandbox
|
|
||||||
callback({
|
|
||||||
err: {
|
|
||||||
errMsg: 'Invalid message posted from sandbox!'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendEmail(email, callback) {
|
|
||||||
var em = new app.model.Email(email);
|
|
||||||
emailDao.sendEmail(em, callback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}());
|
}());
|
Loading…
Reference in New Issue
Block a user