1.1 --- a/imip_manager.py Mon Mar 02 18:18:47 2015 +0100
1.2 +++ b/imip_manager.py Mon Mar 02 18:38:25 2015 +0100
1.3 @@ -136,6 +136,38 @@
1.4 def get_window_end(self):
1.5 return get_window_end(self.get_tzid(), self.get_window_size())
1.6
1.7 + def update_attendees(self, obj, added, removed):
1.8 +
1.9 + """
1.10 + Update the attendees in 'obj' with the given 'added' and 'removed'
1.11 + attendee lists. A tuple is returned containing the remaining attendees,
1.12 + together with the attendees whose attendance should be cancelled.
1.13 + """
1.14 +
1.15 + to_cancel = []
1.16 +
1.17 + if added or removed:
1.18 + attendees = uri_items(obj.get_items("ATTENDEE") or [])
1.19 +
1.20 + if removed:
1.21 + remaining = []
1.22 +
1.23 + for attendee, attendee_attr in attendees:
1.24 + if attendee in removed:
1.25 + to_cancel.append((attendee, attendee_attr))
1.26 + else:
1.27 + remaining.append((attendee, attendee_attr))
1.28 +
1.29 + attendees = remaining
1.30 +
1.31 + if added:
1.32 + for attendee in added:
1.33 + attendees.append((attendee, {"PARTSTAT" : "NEEDS-ACTION", "RSVP" : "TRUE"}))
1.34 +
1.35 + obj["ATTENDEE"] = attendees
1.36 +
1.37 + return remaining, to_cancel
1.38 +
1.39 class ManagerHandler(Common, Handler):
1.40
1.41 """
1.42 @@ -260,27 +292,9 @@
1.43 if self.messenger and self.messenger.sender != get_address(organiser):
1.44 organiser_attr["SENT-BY"] = get_uri(self.messenger.sender)
1.45
1.46 - to_cancel = []
1.47 -
1.48 - if added or removed:
1.49 - attendees = uri_items(self.obj.get_items("ATTENDEE") or [])
1.50 -
1.51 - if removed:
1.52 - remaining = []
1.53 + # Update the attendees in the event.
1.54
1.55 - for attendee, attendee_attr in attendees:
1.56 - if attendee in removed:
1.57 - to_cancel.append((attendee, attendee_attr))
1.58 - else:
1.59 - remaining.append((attendee, attendee_attr))
1.60 -
1.61 - attendees = remaining
1.62 -
1.63 - if added:
1.64 - for attendee in added:
1.65 - attendees.append((attendee, {"PARTSTAT" : "NEEDS-ACTION", "RSVP" : "TRUE"}))
1.66 -
1.67 - self.obj["ATTENDEE"] = attendees
1.68 + remaining, to_cancel = self.update_attendees(self.obj, added, removed)
1.69
1.70 self.update_dtstamp()
1.71 self.set_sequence(update)
1.72 @@ -648,6 +662,7 @@
1.73 # Save single user events.
1.74
1.75 elif save:
1.76 + remaining, to_cancel = self.update_attendees(obj, added, removed)
1.77 self.store.set_event(self.user, uid, None, node=obj.to_node())
1.78 self.update_freebusy(uid, None, obj=obj)
1.79 self.remove_request(uid)