# HG changeset patch # User Paul Boddie # Date 1423585813 -3600 # Node ID 9f4fbe205b683c164137359a2866a7e31a0180fc # Parent 82f4dfc693c0cf4034327e2af9dfc3d8653d2b41 Added support for sending CANCEL messages to uninvited attendees. diff -r 82f4dfc693c0 -r 9f4fbe205b68 imip_manager.py --- a/imip_manager.py Tue Feb 10 17:26:23 2015 +0100 +++ b/imip_manager.py Tue Feb 10 17:30:13 2015 +0100 @@ -248,17 +248,37 @@ if self.messenger and self.messenger.sender != get_address(organiser): organiser_attr["SENT-BY"] = get_uri(self.messenger.sender) + to_cancel = [] + if removed: - attendee_map = uri_dict(self.obj.get_value_map("ATTENDEE")) - self.obj["ATTENDEE"] = [(attendee, attendee_attr) - for (attendee, attendee_attr) in attendee_map.items() - if attendee not in removed] + attendees = uri_items(self.obj.get_items("ATTENDEE")) + remaining = [] + + for attendee, attendee_attr in attendees: + if attendee in removed: + to_cancel.append((attendee, attendee_attr)) + else: + remaining.append((attendee, attendee_attr)) + + self.obj["ATTENDEE"] = remaining self.update_dtstamp() self.set_sequence(update) self.send_message(method, get_address(organiser), for_organiser=True) + # When cancelling, replace the attendees with those for whom the event + # is now cancelled. + + if to_cancel: + self.obj["ATTENDEE"] = to_cancel + self.send_message("CANCEL", get_address(organiser), for_organiser=True) + + # Just in case more work is done with this event, the attendees are + # now restored. + + self.obj["ATTENDEE"] = remaining + return True class Manager(Common):