summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2017-11-19 12:44:28 +0100
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2017-11-21 15:57:45 +0100
commit096192919f69d57b365a5be08e234810c4fdd0f2 (patch)
tree1b9ce7dd9f8ea97bc896f9e1bb8e75f233806ca2
parentd76ab802dd2447b721007f9919793971aabde00c (diff)
Fixed addressbook model for contacts and move selector 1
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
-rw-r--r--js/components/contactDetails/contactDetails_controller.js4
-rw-r--r--js/models/contact_model.js2
-rw-r--r--js/services/addressBook_service.js7
-rw-r--r--js/services/contact_service.js23
-rw-r--r--templates/contactDetails.html6
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 @@
<div class="select-addressbook" ng-if="ctrl.addressBooks.length > 1 && !ctrl.addressBook.readOnly">
<label for="details-addressbook">{{ctrl.t.addressBook}}</label>
- <select ng-model="ctrl.addressBook" ng-change="ctrl.changeAddressBook(ctrl.addressBook)" id="details-addressbook"
- ng-options="book.displayName for book in ctrl.addressBooks | filter: {readOnly: false}">
+ <select ng-model="ctrl.addressBook" ng-change="ctrl.changeAddressBook(ctrl.addressBook, oldAddressBook)" id="details-addressbook"
+ ng-options="book.displayName for book in ctrl.addressBooks | filter: {readOnly: false}"
+ ng-click="oldAddressBook = ctrl.addressBook" ng-init="oldAddressBook = ctrl.addressBook">
</select>
</div>
<select class="add-field" ng-model="ctrl.field" ng-change="ctrl.addField(ctrl.field)" ng-if="!ctrl.addressBook.readOnly">
@@ -57,4 +58,3 @@
</section>
</div>
</div>
-