mirror of
https://github.com/moparisthebest/mail
synced 2025-02-19 20:31:48 -05:00
implement folder list and selection
This commit is contained in:
parent
8a40de92ea
commit
abaeaec54c
@ -7,10 +7,9 @@ define(function(require) {
|
|||||||
|
|
||||||
var MailListCtrl = function($scope) {
|
var MailListCtrl = function($scope) {
|
||||||
var offset = 0,
|
var offset = 0,
|
||||||
num = 100;
|
num = 100,
|
||||||
|
loggedIn = false;
|
||||||
|
|
||||||
// show inbox at the beginning
|
|
||||||
$scope.folder = 'INBOX';
|
|
||||||
emailDao = appController._emailDao;
|
emailDao = appController._emailDao;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -18,7 +17,9 @@ define(function(require) {
|
|||||||
//
|
//
|
||||||
|
|
||||||
$scope.select = function(email) {
|
$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;
|
$scope.selected = email;
|
||||||
// set selected in parent scope ro it can be displayed in the read view
|
// set selected in parent scope ro it can be displayed in the read view
|
||||||
$scope.$parent.selected = $scope.selected;
|
$scope.$parent.selected = $scope.selected;
|
||||||
@ -26,16 +27,15 @@ define(function(require) {
|
|||||||
|
|
||||||
$scope.synchronize = function() {
|
$scope.synchronize = function() {
|
||||||
updateStatus('Syncing ...');
|
updateStatus('Syncing ...');
|
||||||
|
|
||||||
// sync from imap to local db
|
// sync from imap to local db
|
||||||
syncImapFolder({
|
syncImapFolder({
|
||||||
folder: $scope.folder,
|
folder: getFolder().path,
|
||||||
offset: -num,
|
offset: -num,
|
||||||
num: offset
|
num: offset
|
||||||
}, function() {
|
}, function() {
|
||||||
// list again from local db after syncing
|
// list again from local db after syncing
|
||||||
listLocalMessages({
|
listLocalMessages({
|
||||||
folder: $scope.folder,
|
folder: getFolder().path,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
num: num
|
num: num
|
||||||
}, function() {
|
}, function() {
|
||||||
@ -44,17 +44,18 @@ define(function(require) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// production... in chrome packaged app
|
$scope.$watch('currentFolder', function() {
|
||||||
if (window.chrome && chrome.identity) {
|
// production... in chrome packaged app
|
||||||
initList();
|
if (window.chrome && chrome.identity) {
|
||||||
return;
|
initList();
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
// development
|
// development... display dummy mail objects
|
||||||
createDummyMails(function(emails) {
|
createDummyMails(function(emails) {
|
||||||
updateStatus('Last update: ', new Date());
|
updateStatus('Last update: ', new Date());
|
||||||
$scope.emails = emails;
|
$scope.emails = emails;
|
||||||
$scope.select($scope.emails[0]);
|
$scope.select($scope.emails[0]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -66,25 +67,35 @@ define(function(require) {
|
|||||||
|
|
||||||
// list messaged from local db
|
// list messaged from local db
|
||||||
listLocalMessages({
|
listLocalMessages({
|
||||||
folder: $scope.folder,
|
folder: getFolder().path,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
num: num
|
num: num
|
||||||
}, function() {
|
}, function() {
|
||||||
updateStatus('Login ...');
|
if (loggedIn) {
|
||||||
$scope.$apply();
|
// user is already logged in
|
||||||
|
sync();
|
||||||
|
return;
|
||||||
|
}
|
||||||
// login to imap
|
// login to imap
|
||||||
loginImap(function() {
|
loginImap(function() {
|
||||||
updateStatus('Syncing ...');
|
loggedIn = true;
|
||||||
$scope.$apply();
|
sync();
|
||||||
|
|
||||||
// sync imap folder to local db
|
|
||||||
$scope.synchronize();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function sync() {
|
||||||
|
updateStatus('Syncing ...');
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
|
// sync imap folder to local db
|
||||||
|
$scope.synchronize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loginImap(callback) {
|
function loginImap(callback) {
|
||||||
|
updateStatus('Login ...');
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
emailDao.imapLogin(function(err) {
|
emailDao.imapLogin(function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@ -96,13 +107,23 @@ define(function(require) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function syncImapFolder(options, callback) {
|
function syncImapFolder(options, callback) {
|
||||||
emailDao.imapSync(options, function(err) {
|
emailDao.unreadMessages(getFolder().path, function(err, unreadCount) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return;
|
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);
|
callback(emails);
|
||||||
// add display dates
|
|
||||||
displayEmails(emails);
|
displayEmails(emails);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -128,6 +148,9 @@ define(function(require) {
|
|||||||
|
|
||||||
function displayEmails(emails) {
|
function displayEmails(emails) {
|
||||||
if (!emails || emails.length < 1) {
|
if (!emails || emails.length < 1) {
|
||||||
|
$scope.emails = [];
|
||||||
|
$scope.select();
|
||||||
|
$scope.$apply();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,6 +163,10 @@ define(function(require) {
|
|||||||
$scope.select($scope.emails[0]);
|
$scope.select($scope.emails[0]);
|
||||||
$scope.$apply();
|
$scope.$apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFolder() {
|
||||||
|
return $scope.$parent.currentFolder;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function createDummyMails(callback) {
|
function createDummyMails(callback) {
|
||||||
|
@ -3,6 +3,27 @@ define(function() {
|
|||||||
|
|
||||||
var NavigationCtrl = function($scope) {
|
var NavigationCtrl = function($scope) {
|
||||||
$scope.navOpen = false;
|
$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.openNav = function() {
|
||||||
$scope.navOpen = true;
|
$scope.navOpen = true;
|
||||||
@ -12,6 +33,13 @@ define(function() {
|
|||||||
$scope.navOpen = false;
|
$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) {
|
$scope.write = function(replyTo) {
|
||||||
var replyToId = (replyTo) ? replyTo.uid : '',
|
var replyToId = (replyTo) ? replyTo.uid : '',
|
||||||
url = 'index.html#/write/' + replyToId;
|
url = 'index.html#/write/' + replyToId;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<!-- nav controll and section headline -->
|
<!-- nav controll and section headline -->
|
||||||
<header data-icon="" ng-click="openNav(); $event.stopPropagation()">
|
<header data-icon="" ng-click="openNav(); $event.stopPropagation()">
|
||||||
<h2>Inbox</h2>
|
<h2>{{currentFolder.type}}</h2>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<ul class="mail-list">
|
<ul class="mail-list">
|
||||||
|
@ -2,37 +2,22 @@
|
|||||||
<header>
|
<header>
|
||||||
<h1>WHITEOUT<span>.IO</span></h1>
|
<h1>WHITEOUT<span>.IO</span></h1>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<ul class="nav-primary">
|
<ul class="nav-primary">
|
||||||
<li>
|
<li ng-repeat="folder in folders" ng-switch="folder.count !== undefined">
|
||||||
<a href="#">
|
<a href="#" ng-click="openFolder(folder); $event.preventDefault()">
|
||||||
Inbox
|
{{folder.type}}
|
||||||
<span class="label-wrapper"><span class="label label-light">1000+</span></span>
|
<span class="label-wrapper" ng-switch-when="true"><span class="label label-light">{{folder.count}}</span></span>
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">Sent</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">Outbox</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">
|
|
||||||
Drafts
|
|
||||||
<span class="label-wrapper"><span class="label label-light">2</span></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">
|
|
||||||
Trash
|
|
||||||
<span class="label-wrapper"><span class="label label-light">100</span></span>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul class="nav-secondary">
|
<ul class="nav-secondary">
|
||||||
<li><a href="#">Account</a></li>
|
<li><a href="#">Account</a></li>
|
||||||
<li><a href="#">About whiteout.io</a></li>
|
<li><a href="#">About whiteout.io</a></li>
|
||||||
<li><a href="#">Help</a></li>
|
<li><a href="#">Help</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
{{lastUpdateLbl}} {{lastUpdate | date:'shortTime'}}
|
{{lastUpdateLbl}} {{lastUpdate | date:'shortTime'}}
|
||||||
</footer>
|
</footer>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user