1.1 --- a/imip_agent.py Mon Sep 22 22:07:27 2014 +0200
1.2 +++ b/imip_agent.py Mon Sep 22 22:30:29 2014 +0200
1.3 @@ -89,6 +89,13 @@
1.4 else:
1.5 return None
1.6
1.7 +def get_value_map(d, name):
1.8 + items = get_attr_value(d, name, False)
1.9 + if items:
1.10 + return map_from_list(items)
1.11 + else:
1.12 + return {}
1.13 +
1.14 def get_value(d, name, single=True):
1.15 if d.has_key(name):
1.16 values = d[name]
1.17 @@ -99,6 +106,16 @@
1.18 else:
1.19 return None
1.20
1.21 +def map_from_list(l):
1.22 + items = map(lambda (v, a): (a, v), l)
1.23 + return dict(items)
1.24 +
1.25 +def get_address(value):
1.26 + return value.startswith("mailto:") and value[7:] or value
1.27 +
1.28 +def get_uri(value):
1.29 + return value.startswith("mailto:") and value or "mailto:%s" % value
1.30 +
1.31 def handle_itip_part(part, recipients):
1.32 method = part.get_param("method")
1.33
1.34 @@ -154,11 +171,14 @@
1.35 def get_attr_value(self, name, single=True):
1.36 return get_attr_value(self.details, name, single)
1.37
1.38 + def get_value_map(self, name):
1.39 + return get_value_map(self.details, name)
1.40 +
1.41 def get_value(self, name, single=True):
1.42 return get_value(self.details, name, single)
1.43
1.44 - def filter_by_recipients(self, attr_values):
1.45 - return [a for attr, value in attendees if value in self.recipients]
1.46 + def filter_by_recipients(self, values):
1.47 + return self.recipients.intersection(map(get_address, values))
1.48
1.49 class Event(Handler):
1.50
1.51 @@ -211,12 +231,12 @@
1.52 for each indicated attendee.
1.53 """
1.54
1.55 - attendees = self.get_attr_value("ATTENDEE", False)
1.56 + attendee_map = self.get_value_map("ATTENDEE")
1.57 organiser = self.get_attr_value("ORGANIZER")
1.58
1.59 # Only provide details for recipients who are also attendees.
1.60
1.61 - attendees = self.filter_by_recipients(attendees)
1.62 + attendees = map(get_uri, self.filter_by_recipients(attendee_map))
1.63
1.64 if not attendees and not organiser:
1.65 return
1.66 @@ -234,13 +254,13 @@
1.67 cwrite(("METHOD", {}, "REPLY"))
1.68 cwrite(("VERSION", {}, "2.0"))
1.69
1.70 - for attendee_attr, attendee in attendees:
1.71 + for attendee in attendees:
1.72 freebusy = self.store.get_freebusy(attendee)
1.73 if freebusy:
1.74 record = []
1.75 rwrite = record.append
1.76 rwrite(("ORGANIZER", organiser_attr, organiser))
1.77 - rwrite(("ATTENDEE", attendee_attr, attendee))
1.78 + rwrite(("ATTENDEE", attendee_map[attendee], attendee))
1.79 rwrite(("UID", {}, self.uid))
1.80
1.81 for start, end in freebusy: