[CalendarServer-changes] [3033] CalendarServer/trunk/twistedcaldav/scheduling

source_changes at macosforge.org source_changes at macosforge.org
Fri Sep 19 21:25:49 PDT 2008


Revision: 3033
          http://trac.macosforge.org/projects/calendarserver/changeset/3033
Author:   cdaboo at apple.com
Date:     2008-09-19 21:25:49 -0700 (Fri, 19 Sep 2008)
Log Message:
-----------
Add X-APPLE-NEEDS-REPLY:TRUE property on attendee updates.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/scheduling/itip.py
    CalendarServer/trunk/twistedcaldav/scheduling/processing.py

Modified: CalendarServer/trunk/twistedcaldav/scheduling/itip.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/itip.py	2008-09-19 16:40:57 UTC (rev 3032)
+++ CalendarServer/trunk/twistedcaldav/scheduling/itip.py	2008-09-20 04:25:49 UTC (rev 3033)
@@ -32,6 +32,7 @@
 
 import datetime
 
+from twistedcaldav.config import config
 from twistedcaldav.log import Logger
 from twistedcaldav.ical import Property, iCalendarProductID, Component
 
@@ -50,7 +51,7 @@
 class iTipProcessing(object):
 
     @staticmethod
-    def processNewRequest(itip_message):
+    def processNewRequest(itip_message, recipient=None):
         """
         Process a METHOD=REQUEST for a brand new calendar object.
         
@@ -65,11 +66,14 @@
         method = calendar.getProperty("METHOD")
         if method:
             calendar.removeProperty(method)
-            
+        
+        if config.Scheduling["CalDAV"]["OldDraftCompatability"] and recipient:
+            iTipProcessing.fixForiCal3(calendar.subcomponents(), recipient)
+
         return calendar
         
     @staticmethod
-    def processRequest(itip_message, calendar):
+    def processRequest(itip_message, calendar, recipient):
         """
         Process a METHOD=REQUEST.
         
@@ -93,7 +97,7 @@
         if itip_message.masterComponent() is not None:
             
             # Get a new calendar object first
-            new_calendar = iTipProcessing.processNewRequest(itip_message)
+            new_calendar = iTipProcessing.processNewRequest(itip_message, recipient)
             
             # Copy over master alarms
             master_component = new_calendar.masterComponent()
@@ -121,6 +125,8 @@
                 else:
                     iTipProcessing.transferAlarms(calendar, master_valarms, component, remove_matched=True)
                     calendar.addComponent(component)
+                    if config.Scheduling["CalDAV"]["OldDraftCompatability"] and recipient:
+                        iTipProcessing.fixForiCal3((component,), recipient)
 
             # Write back the modified object
             return calendar
@@ -349,6 +355,22 @@
                 # Just copy in the new override
                 to_component.addComponent(alarm)
     
+    @staticmethod
+    def fixForiCal3(components, recipient):
+        # For each component where the ATTENDEE property of the recipient has PARTSTAT
+        # NEEDS-ACTION we need to add X-APPLE-NEEDS-REPLY:TRUE
+        for component in components:
+            if component.name() == "VTIMEZONE":
+                continue
+            attendee = component.getAttendeeProperty((recipient,))
+            if attendee:
+                if "PARTSTAT" in attendee.params():
+                    partstat = attendee.params()["PARTSTAT"][0]
+                else:
+                    partstat = "NEEDS-ACTION"
+                if partstat == "NEEDS-ACTION":
+                    component.addProperty(Property("X-APPLE-NEEDS-REPLY", "TRUE"))
+
 class iTipGenerator(object):
     
     @staticmethod

Modified: CalendarServer/trunk/twistedcaldav/scheduling/processing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/processing.py	2008-09-19 16:40:57 UTC (rev 3032)
+++ CalendarServer/trunk/twistedcaldav/scheduling/processing.py	2008-09-20 04:25:49 UTC (rev 3033)
@@ -222,7 +222,7 @@
 
             if default:
                 log.debug("ImplicitProcessing - originator '%s' to recipient '%s' ignoring METHOD:REQUEST, UID: '%s' - new processed" % (self.originator.cuaddr, self.recipient.cuaddr, self.uid))
-                new_calendar = iTipProcessing.processNewRequest(self.message)
+                new_calendar = iTipProcessing.processNewRequest(self.message, self.recipient.cuaddr)
                 name =  md5(str(new_calendar) + str(time.time()) + default.fp.path).hexdigest() + ".ics"
                 yield self.writeCalendarResource(defaultURL, default, name, new_calendar)
                 result = (True, False,)
@@ -231,7 +231,7 @@
                 result = (False, False,)
         else:
             # Processing update to existing event
-            new_calendar = iTipProcessing.processRequest(self.message, self.recipient_calendar)
+            new_calendar = iTipProcessing.processRequest(self.message, self.recipient_calendar, self.recipient.cuaddr)
             if new_calendar:
      
                 # Update the attendee's copy of the event
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080919/62721f68/attachment-0001.html 


More information about the calendarserver-changes mailing list