Bind email addresses in pgp keychain to autocomplete

This commit is contained in:
Tankred Hase 2014-09-15 19:06:31 +02:00
parent 400a90f88e
commit a600aaea87
2 changed files with 36 additions and 15 deletions

View File

@ -63,6 +63,7 @@ define(function(require) {
$scope.body = '';
$scope.ciphertextPreview = '';
$scope.attachments = [];
$scope.addressBookCache = undefined;
}
function reportBug() {
@ -214,7 +215,7 @@ define(function(require) {
* Verify email address and fetch its public key
*/
$scope.verify = function(recipient) {
if(!recipient) {
if (!recipient) {
return;
}
@ -231,7 +232,7 @@ define(function(require) {
}
// keychainDao is undefined in local dev environment
if(keychainDao) {
if (keychainDao) {
// check if to address is contained in known public keys
// when we write an email, we always need to work with the latest keys available
keychainDao.refreshKeyForUserId(recipient.address, function(err, key) {
@ -403,22 +404,42 @@ define(function(require) {
$scope.tagStyle = function(recipient) {
var classes = ['label'];
if(recipient.secure === false) {
if (recipient.secure === false) {
classes.push('label-primary');
}
return classes;
};
$scope.lookupAddressBook = function(/*query*/) {
$scope.lookupAddressBook = function(query) {
var deferred = $q.defer();
deferred.resolve([
{ address: 'john@doe.com' },
{ address: 'jane@doe.com' },
{ address: 'john.doe@example.com' },
{ address: 'jane.doe@example.com' },
{ address: 'max.mustermann@example.com' },
]);
if (!$scope.addressBookCache) {
// populate address book cache
keychainDao.listLocalPublicKeys(function(err, keys) {
if (err) {
$scope.onError(err);
return;
}
$scope.addressBookCache = keys.map(function(key) {
return {
address: key.userId
};
});
filter();
});
} else {
filter();
}
// query address book cache
function filter() {
var addresses = $scope.addressBookCache.filter(function(i) {
return i.address.indexOf(query) !== -1;
});
deferred.resolve(addresses);
}
return deferred.promise;
};
@ -500,7 +521,7 @@ define(function(require) {
link: function(scope, element, attrs) {
var model = $parse(attrs.focusInput);
scope.$watch(model, function(value) {
if(value === true) {
if (value === true) {
$timeout(function() {
element.find('input').first().focus();
}, 100);

View File

@ -17,7 +17,7 @@
tag-style="tagStyle" display-property="address" on-tag-added="verify($tag)"
allowed-tags-pattern='^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
placeholder="add recipient">
<auto-complete source="lookupAddressBook($query)"></auto-complete>
<auto-complete source="lookupAddressBook($query)" min-length="1"></auto-complete>
</tags-input>
</p>
<p ng-show="showCC === true"
@ -28,7 +28,7 @@
tag-style="tagStyle" display-property="address" on-tag-added="verify($tag)"
allowed-tags-pattern='^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
placeholder="add cc">
<auto-complete source="lookupAddressBook($query)"></auto-complete>
<auto-complete source="lookupAddressBook($query)" min-length="1"></auto-complete>
</tags-input>
</p>
<p ng-show="showBCC === true"
@ -39,7 +39,7 @@
tag-style="tagStyle" display-property="address" on-tag-added="verify($tag)"
allowed-tags-pattern='^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
placeholder="add bcc">
<auto-complete source="lookupAddressBook($query)"></auto-complete>
<auto-complete source="lookupAddressBook($query)" min-length="1"></auto-complete>
</tags-input>
</p>
</div><!--/.mail-addresses-->