mirror of https://github.com/nextcloud/contacts
Fix lazy loading Addressbooks data retrieval
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
parent
5c8fef6b94
commit
3ead292583
|
@ -160,8 +160,8 @@ angular.module('contactsApp')
|
|||
if(ctrl.loading && $(window).width() > 768) {
|
||||
ctrl.setSelectedId(ctrl.contactList[0].uid());
|
||||
}
|
||||
var firstNames = ctrl.contactList.slice(0, 20).map(function (c) { return c.displayName(); });
|
||||
ContactService.getFullContacts(firstNames);
|
||||
// Get full data for the first 20 contacts of the list
|
||||
ContactService.getFullContacts(ctrl.contactList.slice(0, 20));
|
||||
ctrl.loading = false;
|
||||
unbindListWatch();
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ angular.module('contactsApp')
|
|||
var cacheFilled = false;
|
||||
|
||||
var contacts = CacheFactory('contacts');
|
||||
var urlsByDisplayname = CacheFactory('urlsByDisplayname');
|
||||
|
||||
var observerCallbacks = [];
|
||||
|
||||
|
@ -25,25 +24,34 @@ angular.module('contactsApp')
|
|||
});
|
||||
};
|
||||
|
||||
this.getFullContacts = function getFullContacts(names) {
|
||||
this.getFullContacts = function(contacts) {
|
||||
AddressBookService.getAll().then(function (enabledAddressBooks) {
|
||||
var promises = [];
|
||||
enabledAddressBooks.forEach(function (addressBook) {
|
||||
var urlLists = names.map(function (name) { return urlsByDisplayname.get(name); });
|
||||
var urls = [].concat.apply([], urlLists);
|
||||
var promise = DavClient.getContacts(addressBook, {}, urls)
|
||||
.then(
|
||||
function (vcards) {
|
||||
return vcards.map(function (vcard) {
|
||||
return new Contact(addressBook, vcard);
|
||||
});
|
||||
})
|
||||
.then(function (contacts_) {
|
||||
var xhrAddressBooks = [];
|
||||
contacts.forEach(function (contact) {
|
||||
// Regroup urls by addressbooks
|
||||
if(enabledAddressBooks.indexOf(contact.data.addressBook) !== -1) {
|
||||
// Initiate array if no exists
|
||||
xhrAddressBooks[contact.addressBookId] = xhrAddressBooks[contact.addressBookId] || [];
|
||||
xhrAddressBooks[contact.addressBookId].push(contact.data.url);
|
||||
}
|
||||
});
|
||||
// Get our full vCards
|
||||
enabledAddressBooks.forEach(function(addressBook) {
|
||||
if(angular.isArray(xhrAddressBooks[addressBook.displayName])) {
|
||||
console.log('Contacts found for: '+addressBook.displayName);
|
||||
var promise = DavClient.getContacts(addressBook, {}, xhrAddressBooks[addressBook.displayName]).then(
|
||||
function (vcards) {
|
||||
return vcards.map(function (vcard) {
|
||||
return new Contact(addressBook, vcard);
|
||||
});
|
||||
}).then(function (contacts_) {
|
||||
contacts_.map(function (contact) {
|
||||
contacts.put(contact.uid(), contact);
|
||||
});
|
||||
});
|
||||
promises.push(promise);
|
||||
promises.push(promise);
|
||||
}
|
||||
});
|
||||
$q.all(promises).then(function () {
|
||||
notifyObservers('getFullContacts', '');
|
||||
|
@ -62,8 +70,6 @@ angular.module('contactsApp')
|
|||
if (addressBook.objects[i].addressData) {
|
||||
var contact = new Contact(addressBook, addressBook.objects[i]);
|
||||
contacts.put(contact.uid(), contact);
|
||||
var oldList = urlsByDisplayname.get(contact.displayName()) || [];
|
||||
urlsByDisplayname.put(contact.displayName(), oldList.concat(contact.data.url));
|
||||
} else {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('Invalid contact received: ' + addressBook.objects[i].url);
|
||||
|
|
Loading…
Reference in New Issue