diff --git a/src/js/controller/mail-list.js b/src/js/controller/mail-list.js index a21dcae..36a4f28 100644 --- a/src/js/controller/mail-list.js +++ b/src/js/controller/mail-list.js @@ -7,10 +7,9 @@ define(function(require) { var MailListCtrl = function($scope) { var offset = 0, - num = 100; + num = 100, + loggedIn = false; - // show inbox at the beginning - $scope.folder = 'INBOX'; emailDao = appController._emailDao; // @@ -18,7 +17,9 @@ define(function(require) { // $scope.select = function(email) { - email.bodyDisplayParts = email.body.split('\n'); + if (email && typeof email.body === 'string') { + email.bodyDisplayParts = email.body.split('\n'); + } $scope.selected = email; // set selected in parent scope ro it can be displayed in the read view $scope.$parent.selected = $scope.selected; @@ -26,16 +27,15 @@ define(function(require) { $scope.synchronize = function() { updateStatus('Syncing ...'); - // sync from imap to local db syncImapFolder({ - folder: $scope.folder, + folder: getFolder().path, offset: -num, num: offset }, function() { // list again from local db after syncing listLocalMessages({ - folder: $scope.folder, + folder: getFolder().path, offset: offset, num: num }, function() { @@ -44,17 +44,18 @@ define(function(require) { }); }; - // production... in chrome packaged app - if (window.chrome && chrome.identity) { - initList(); - return; - } - - // development - createDummyMails(function(emails) { - updateStatus('Last update: ', new Date()); - $scope.emails = emails; - $scope.select($scope.emails[0]); + $scope.$watch('currentFolder', function() { + // production... in chrome packaged app + if (window.chrome && chrome.identity) { + initList(); + return; + } + // development... display dummy mail objects + createDummyMails(function(emails) { + updateStatus('Last update: ', new Date()); + $scope.emails = emails; + $scope.select($scope.emails[0]); + }); }); // @@ -66,25 +67,35 @@ define(function(require) { // list messaged from local db listLocalMessages({ - folder: $scope.folder, + folder: getFolder().path, offset: offset, num: num }, function() { - updateStatus('Login ...'); - $scope.$apply(); - + if (loggedIn) { + // user is already logged in + sync(); + return; + } // login to imap loginImap(function() { - updateStatus('Syncing ...'); - $scope.$apply(); - - // sync imap folder to local db - $scope.synchronize(); + loggedIn = true; + sync(); }); }); + + function sync() { + updateStatus('Syncing ...'); + $scope.$apply(); + + // sync imap folder to local db + $scope.synchronize(); + } } function loginImap(callback) { + updateStatus('Login ...'); + $scope.$apply(); + emailDao.imapLogin(function(err) { if (err) { console.error(err); @@ -96,13 +107,23 @@ define(function(require) { } function syncImapFolder(options, callback) { - emailDao.imapSync(options, function(err) { + emailDao.unreadMessages(getFolder().path, function(err, unreadCount) { if (err) { console.error(err); return; } + // set unread count in folder model + getFolder().count = unreadCount; + $scope.$apply(); - callback(); + emailDao.imapSync(options, function(err) { + if (err) { + console.error(err); + return; + } + + callback(); + }); }); } @@ -114,7 +135,6 @@ define(function(require) { } callback(emails); - // add display dates displayEmails(emails); }); } @@ -128,6 +148,9 @@ define(function(require) { function displayEmails(emails) { if (!emails || emails.length < 1) { + $scope.emails = []; + $scope.select(); + $scope.$apply(); return; } @@ -140,6 +163,10 @@ define(function(require) { $scope.select($scope.emails[0]); $scope.$apply(); } + + function getFolder() { + return $scope.$parent.currentFolder; + } }; function createDummyMails(callback) { diff --git a/src/js/controller/navigation.js b/src/js/controller/navigation.js index 9eb9bbb..b1c4e1d 100644 --- a/src/js/controller/navigation.js +++ b/src/js/controller/navigation.js @@ -3,6 +3,27 @@ define(function() { var NavigationCtrl = function($scope) { $scope.navOpen = false; + $scope.folders = [{ + type: 'Inbox', + count: undefined, + path: 'INBOX' + }, { + type: 'Sent', + count: undefined, + path: '[Gmail]/Gesendet' + }, { + type: 'Outbox', + count: undefined, + path: 'OUTBOX' + }, { + type: 'Drafts', + count: undefined, + path: '[Gmail]/Entw&APw-rfe' + }, { + type: 'Trash', + count: undefined, + path: '[Gmail]/Papierkorb' + }]; $scope.openNav = function() { $scope.navOpen = true; @@ -12,6 +33,13 @@ define(function() { $scope.navOpen = false; }; + $scope.openFolder = function(folder) { + $scope.currentFolder = folder; + $scope.closeNav(); + }; + // select inbox as the current folder on init + $scope.openFolder($scope.folders[0]); + $scope.write = function(replyTo) { var replyToId = (replyTo) ? replyTo.uid : '', url = 'index.html#/write/' + replyToId; diff --git a/src/tpl/mail-list.html b/src/tpl/mail-list.html index e3405c2..bfad941 100644 --- a/src/tpl/mail-list.html +++ b/src/tpl/mail-list.html @@ -1,6 +1,6 @@
-

Inbox

+

{{currentFolder.type}}