1.1 --- a/imip_agent.py Mon Sep 22 17:08:57 2014 +0200
1.2 +++ b/imip_agent.py Mon Sep 22 17:10:51 2014 +0200
1.3 @@ -1,7 +1,7 @@
1.4 #!/usr/bin/env python
1.5
1.6 from email import message_from_file
1.7 -from vCalendar import parse
1.8 +from vCalendar import parse, iterwrite
1.9 import imip_store
1.10 import sys
1.11
1.12 @@ -62,6 +62,18 @@
1.13 d[name].append((attr, value))
1.14 return d
1.15
1.16 +def get_attr_value(d, name, single=True):
1.17 + if d.has_key(name):
1.18 + values = d[name]
1.19 + if isinstance(values, tuple):
1.20 + return values
1.21 + elif single and len(values) == 1:
1.22 + return values[0]
1.23 + else:
1.24 + return values
1.25 + else:
1.26 + return None
1.27 +
1.28 def get_value(d, name, single=True):
1.29 if d.has_key(name):
1.30 values = d[name]
1.31 @@ -104,7 +116,10 @@
1.32 def publish(self):
1.33 pass
1.34
1.35 - def get_value(self, name, single=False):
1.36 + def get_attr_value(self, name, single=True):
1.37 + return get_attr_value(self.details, name, single)
1.38 +
1.39 + def get_value(self, name, single=True):
1.40 return get_value(self.details, name, single)
1.41
1.42 class Event(Handler):
1.43 @@ -139,19 +154,45 @@
1.44 # Store the reply details for the attendee.
1.45
1.46 def request(self):
1.47 - attendees = self.get_value("ATTENDEE", False)
1.48 - organiser = self.get_value("ORGANIZER")
1.49 - print >>open("/tmp/imip.txt", "a"), attendees, organiser
1.50 + attendees = self.get_attr_value("ATTENDEE", False)
1.51 + organiser = self.get_attr_value("ORGANIZER")
1.52 +
1.53 if not attendees and not organiser:
1.54 return
1.55
1.56 + organiser_attr, organiser = organiser
1.57 +
1.58 # Get the details for the attendee.
1.59
1.60 - for attendee in attendees:
1.61 - freebusy = self.store.get_freebusy(attendee)
1.62 - print >>open("/tmp/imip.txt", "a"), freebusy
1.63 + out = open("/tmp/imip.txt", "a")
1.64 + try:
1.65 + w = iterwrite(out)
1.66 +
1.67 + calendar = []
1.68 + cwrite = calendar.append
1.69 + cwrite(("METHOD", {}, "REPLY"))
1.70 + cwrite(("VERSION", {}, "2.0"))
1.71
1.72 - # Send a reply with the information.
1.73 + for attendee_attr, attendee in attendees:
1.74 + freebusy = self.store.get_freebusy(attendee)
1.75 + if freebusy:
1.76 + record = []
1.77 + rwrite = record.append
1.78 + rwrite(("ORGANIZER", organiser_attr, organiser))
1.79 + rwrite(("ATTENDEE", attendee_attr, attendee))
1.80 + rwrite(("UID", {}, self.uid))
1.81 +
1.82 + for start, end in freebusy:
1.83 + rwrite(("FREEBUSY", {}, [start, end]))
1.84 +
1.85 + cwrite(("VFREEBUSY", {}, record))
1.86 +
1.87 + # Send a reply with the information.
1.88 +
1.89 + w.write("VCALENDAR", {}, calendar)
1.90 +
1.91 + finally:
1.92 + out.close()
1.93
1.94 class Journal(Handler):
1.95 def add(self):