[CalendarServer-changes] [10091] CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/ datastore/sql.py

source_changes at macosforge.org source_changes at macosforge.org
Tue Nov 27 15:18:39 PST 2012


Revision: 10091
          http://trac.calendarserver.org//changeset/10091
Author:   gaya at apple.com
Date:     2012-11-27 15:18:39 -0800 (Tue, 27 Nov 2012)
Log Message:
-----------
fix shared group revisions

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py	2012-11-27 21:53:28 UTC (rev 10090)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py	2012-11-27 23:18:39 UTC (rev 10091)
@@ -365,7 +365,7 @@
     def remove(self):
 
         if self._addressbook.owned():
-            if self._kind == _ABO_KIND_GROUP:
+            if self._kind == _ABO_KIND_GROUP: # optimization
                 # need to invalidate queryCacher of sharee's home
                 queryCacher = self._txn._queryCacher
                 if queryCacher:
@@ -401,7 +401,9 @@
                 yield groupObject.updateDatabase(groupComponent, removingObject=removingObject)
 
         if ownerGroup:
-            pass  # convert delete in shared group to remove of member only part 2
+            # convert delete in shared group to remove of member only part 2
+            ownerAddressBook = yield self.ownerAddressBook()
+            self._changeAddressBookRevision(ownerAddressBook)
         else:
             yield super(AddressBookObject, self).remove()
             self._kind = None
@@ -548,24 +550,40 @@
 
 
     @inlineCallbacks
+    def _changeAddressBookRevision(self, addressbook, inserting=False):
+        if inserting:
+            yield addressbook._insertRevision(self._name)
+        else:
+            yield addressbook._updateRevision(self._name)
+
+        yield addressbook.notifyChanged()
+
+
+    @inlineCallbacks
     def setComponent(self, component, inserting=False):
 
         validateAddressBookComponent(self, self._addressbook, component, inserting)
-
         yield self.updateDatabase(component, inserting=inserting)
+        yield self._changeAddressBookRevision(self._addressbook, inserting)
 
-        ownerAddressBook = yield self.ownerAddressBook()
+        if self._addressbook.owned():
+            # update revision table of the sharee group address book
+            #
+            # Alternatively, we could create an address book object for this group
+            #                and update that.
+            if self._kind == _ABO_KIND_GROUP:  # optimization
+                for shareeAddressBook in (yield self.asShared()):
+                    yield self._changeAddressBookRevision(shareeAddressBook, inserting)
 
-        if inserting:
-            yield ownerAddressBook._insertRevision(self._name)
+                    # one is enough because all have the same resourceID
+                    break
         else:
-            yield ownerAddressBook._updateRevision(self._name)
+            if self._addressbook._resourceID != self._ownerAddressBookResourceID: # this is a group shared address book
+                # update owner address book
+                ownerAddressBook = yield self.ownerAddressBook()
+                yield self._changeAddressBookRevision(ownerAddressBook, inserting)
 
-        yield ownerAddressBook.notifyChanged()
 
-        #FIXME: handle case where owner changes group.  Also check remove()
-
-
     @inlineCallbacks
     def _ownerGroupAndAddressBook(self):
         """ 
@@ -586,6 +604,7 @@
 
         returnValue((ownerGroup, ownerAddressBook))
 
+
     @inlineCallbacks
     def ownerGroup(self):
         if not hasattr(self, "_ownerGroup"):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121127/506e05bc/attachment.html>


More information about the calendarserver-changes mailing list