[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