From 096192919f69d57b365a5be08e234810c4fdd0f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Sun, 19 Nov 2017 12:44:28 +0100 Subject: Fixed addressbook model for contacts and move selector 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- .../contactDetails/contactDetails_controller.js | 4 ++-- js/models/contact_model.js | 2 ++ js/services/addressBook_service.js | 7 +++++++ js/services/contact_service.js | 23 ++++++++++++---------- templates/contactDetails.html | 6 +++--- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/js/components/contactDetails/contactDetails_controller.js b/js/components/contactDetails/contactDetails_controller.js index 77e16ef1..0132d81a 100644 --- a/js/components/contactDetails/contactDetails_controller.js +++ b/js/components/contactDetails/contactDetails_controller.js @@ -91,7 +91,7 @@ angular.module('contactsApp') ctrl.focus = undefined; }; - ctrl.changeAddressBook = function (addressBook) { - ContactService.moveContact(ctrl.contact, addressBook); + ctrl.changeAddressBook = function (addressBook, oldAddressBook) { + ContactService.moveContact(ctrl.contact, addressBook, oldAddressBook); }; }); diff --git a/js/models/contact_model.js b/js/models/contact_model.js index ece54514..4d418ad8 100644 --- a/js/models/contact_model.js +++ b/js/models/contact_model.js @@ -432,6 +432,8 @@ angular.module('contactsApp') if(angular.isDefined(vCard)) { angular.extend(this.data, vCard); angular.extend(this.props, $filter('vCard2JSON')(this.data.addressData)); + // We do not want to store our addressbook within contacts + delete this.data.addressBook; } else { angular.extend(this.props, { version: [{value: '3.0'}], diff --git a/js/services/addressBook_service.js b/js/services/addressBook_service.js index d754d124..36bb4b16 100644 --- a/js/services/addressBook_service.js +++ b/js/services/addressBook_service.js @@ -108,6 +108,13 @@ angular.module('contactsApp') return DavClient.syncAddressBook(addressBook); }, + addContact: function(contact) { + return contact; + }, + + removeContact: function(contact) { + return contact; + }, toggleState: function(addressBook) { var xmlDoc = document.implementation.createDocument('', '', null); diff --git a/js/services/contact_service.js b/js/services/contact_service.js index 8a1b90c1..f23a7b78 100644 --- a/js/services/contact_service.js +++ b/js/services/contact_service.js @@ -36,7 +36,7 @@ angular.module('contactsApp') var xhrAddressBooks = []; contacts.forEach(function(contact) { // Regroup urls by addressbooks - if(addressBooks.indexOf(contact.data.addressBook) !== -1) { + if(addressBooks.indexOf(contact.addressBook) !== -1) { // Initiate array if no exists xhrAddressBooks[contact.addressBookId] = xhrAddressBooks[contact.addressBookId] || []; xhrAddressBooks[contact.addressBookId].push(contact.data.url); @@ -57,10 +57,11 @@ angular.module('contactsApp') contacts_.map(function(contact) { // Validate some fields if(contact.fix()) { - // Can't use this in those nested functions + // Can't use `this` in those nested functions contactService.update(contact); } contactsCache.put(contact.uid(), contact); + addressBook.contacts.push(contact); }); }); promises.push(promise); @@ -281,11 +282,11 @@ angular.module('contactsApp') } }; - this.moveContact = function(contact, addressBook) { - if (contact.addressBookId === addressBook.displayName) { + this.moveContact = function(contact, addressBook, oldAddressBook) { + if (addressBook !== null && contact.addressBookId === addressBook.displayName) { return; } - if(addressBook.readOnly) { + if (addressBook.readOnly) { OC.Notification.showTemporary(t('contacts', 'You don\'t have permission to write to this addressbook.')); return; } @@ -297,6 +298,8 @@ angular.module('contactsApp') ).then(function(response) { if (response.status === 201 || response.status === 204) { contact.setAddressBook(addressBook); + oldAddressBook.removeContact(contact); + addressBook.addContact(contact); } else { OC.Notification.showTemporary(t('contacts', 'Contact could not be moved.')); } @@ -326,16 +329,15 @@ angular.module('contactsApp') }; this.removeContactsFromAddressbook = function(addressBook, callback) { - angular.forEach(contactsCache.values(), function(contact) { - if (contact.addressBookId === addressBook.displayName) { - contactsCache.remove(contact.uid()); - } + angular.forEach(addressBook.contacts, function(contact) { + contactsCache.remove(contact.uid()); }); callback(); notifyObservers('groupsUpdate'); }; this.appendContactsFromAddressbook = function(addressBook, callback) { + // Addressbook has been initiated but contacts have not been fetched if (addressBook.objects === null) { AddressBookService.sync(addressBook).then(function(addressBook) { contactService.appendContactsFromAddressbook(addressBook, callback); @@ -345,9 +347,10 @@ angular.module('contactsApp') try { var contact = new Contact(addressBook, vcard); contactsCache.put(contact.uid(), contact); + addressBook.contacts.push(contact); } catch(error) { // eslint-disable-next-line no-console - console.log('Invalid contact received: ', vcard); + console.log('Invalid contact received: ', vcard, error); } }); } diff --git a/templates/contactDetails.html b/templates/contactDetails.html index 58a2f2d2..bd773fb3 100644 --- a/templates/contactDetails.html +++ b/templates/contactDetails.html @@ -46,8 +46,9 @@
-