Addressbook deletion callback notify

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ (skjnldsv) 2017-08-15 11:42:12 +02:00
parent 04c051035d
commit 91356a9708
No known key found for this signature in database
GPG Key ID: FB5ACEED51955BF8
4 changed files with 50 additions and 3 deletions

View File

@ -1,5 +1,5 @@
angular.module('contactsApp')
.controller('addressbooklistCtrl', function($scope, AddressBookService) {
.controller('addressbooklistCtrl', function($scope, $timeout, AddressBookService) {
var ctrl = this;
ctrl.loading = true;

View File

@ -1,5 +1,5 @@
angular.module('contactsApp')
.controller('contactlistCtrl', function($scope, $filter, $route, $routeParams, $timeout, ContactService, SortByService, vCardPropertiesService, SearchService) {
.controller('contactlistCtrl', function($scope, $filter, $route, $routeParams, $timeout, AddressBookService, ContactService, SortByService, vCardPropertiesService, SearchService) {
var ctrl = this;
ctrl.routeParams = $routeParams;
@ -92,6 +92,18 @@ angular.module('contactsApp')
}); });
});
AddressBookService.registerObserverCallback(function(ev) {
$timeout(function () { $scope.$apply(function() {
if (ev.event === 'delete') {
// Get contacts
ctrl.loading = true;
ContactService.updateDeletedAddressbook(function() {
ctrl.loading = false;
});
}
}); });
});
// Get contacts
ContactService.getAll().then(function(contacts) {
if(contacts.length>0) {

View File

@ -4,6 +4,18 @@ angular.module('contactsApp')
var addressBooks = [];
var loadPromise = undefined;
var observerCallbacks = [];
var notifyObservers = function(eventName) {
var ev = {
event: eventName,
addressBooks: addressBooks
};
angular.forEach(observerCallbacks, function(callback) {
callback(ev);
});
};
var loadAll = function() {
if (addressBooks.length > 0) {
return $q.when(addressBooks);
@ -20,6 +32,10 @@ angular.module('contactsApp')
};
return {
registerObserverCallback: function(callback) {
observerCallbacks.push(callback);
},
getAll: function() {
return loadAll().then(function() {
return addressBooks;
@ -64,6 +80,7 @@ angular.module('contactsApp')
return DavClient.deleteAddressBook(addressBook).then(function() {
var index = addressBooks.indexOf(addressBook);
addressBooks.splice(index, 1);
notifyObservers('delete');
});
});
},

View File

@ -1,5 +1,5 @@
angular.module('contactsApp')
.service('ContactService', function(DavClient, AddressBookService, Contact, $q, CacheFactory, uuid4) {
.service('ContactService', function(DavClient, AddressBookService, Contact, $q, $filter, CacheFactory, uuid4) {
var cacheFilled = false;
@ -292,4 +292,22 @@ angular.module('contactsApp')
notifyObservers('delete', contact.uid());
});
};
this.updateDeletedAddressbook = function(callback) {
// Delete contacts which addressbook has been removed from cache
AddressBookService.getAll().then(function (enabledAddressBooks) {
var addressBooksIds = [];
angular.forEach(enabledAddressBooks, function(addressBook) {
addressBooksIds.push(addressBook.displayName);
});
angular.forEach(contacts.values(), function(contact) {
if (addressBooksIds.indexOf(contact.addressBookId) === -1) {
contacts.remove(contact.uid());
notifyObservers('delete', contact.uid());
}
});
callback();
});
};
});