1.1 --- a/imiptools/handlers/person.py Sat Oct 17 01:03:37 2015 +0200
1.2 +++ b/imiptools/handlers/person.py Sat Oct 17 01:06:09 2015 +0200
1.3 @@ -47,6 +47,7 @@
1.4
1.5 if self.will_refresh():
1.6 self.make_refresh()
1.7 + return
1.8
1.9 # Record the event as a recurrence of the parent object.
1.10
1.11 @@ -56,15 +57,14 @@
1.12
1.13 self.update_freebusy_from_organiser(organiser)
1.14
1.15 - # Stop if requesting the full event.
1.16 -
1.17 - if self.will_refresh():
1.18 - return
1.19 -
1.20 # Set the additional occurrence.
1.21
1.22 self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.23
1.24 + # Remove any previous cancellations involving this event.
1.25 +
1.26 + self.store.remove_cancellation(self.user, self.uid, self.recurrenceid)
1.27 +
1.28 # Queue any request, if appropriate.
1.29
1.30 if queue:
1.31 @@ -172,6 +172,10 @@
1.32 if queue:
1.33 self.store.queue_request(self.user, self.uid, self.recurrenceid)
1.34
1.35 + # Set the complete event or an additional occurrence.
1.36 +
1.37 + self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.38 +
1.39 # Cancel complete events or particular occurrences in recurring
1.40 # events.
1.41
1.42 @@ -196,10 +200,6 @@
1.43 else:
1.44 self.update_freebusy_from_organiser(organiser)
1.45
1.46 - # Set the complete event or an additional occurrence.
1.47 -
1.48 - self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.49 -
1.50 # As organiser, update attendance from valid attendees.
1.51
1.52 else:
1.53 @@ -236,10 +236,9 @@
1.54 # completely bizarre to produce a publishing message instead if a
1.55 # refresh message was unprovoked.
1.56
1.57 - method = "REQUEST"
1.58 -
1.59 for attendee in attendees:
1.60 responses = []
1.61 + cancel_responses = []
1.62
1.63 # Get the parent event, add SENT-BY details to the organiser.
1.64
1.65 @@ -250,22 +249,34 @@
1.66 self.update_sender(organiser_attr)
1.67 responses.append(obj.to_node())
1.68
1.69 - # Get recurrences.
1.70 + # Get recurrences for parent events.
1.71
1.72 if not self.recurrenceid:
1.73 - for recurrenceid in self.store.get_active_recurrences(self.user, self.uid):
1.74 +
1.75 + # Collect active and cancelled recurrences.
1.76
1.77 - # Get the recurrence, add SENT-BY details to the organiser.
1.78 + for l, rl, section in [
1.79 + (responses, self.store.get_active_recurrences(self.user, self.uid), None),
1.80 + (cancel_responses, self.store.get_cancelled_recurrences(self.user, self.uid), "cancellations"),
1.81 + ]:
1.82 + for recurrenceid in rl:
1.83
1.84 - obj = self.get_stored_object(self.uid, recurrenceid)
1.85 + # Get the recurrence, add SENT-BY details to the organiser.
1.86
1.87 - if self.is_participating(attendee, obj=obj):
1.88 - organiser, organiser_attr = uri_item(obj.get_item("ORGANIZER"))
1.89 - self.update_sender(organiser_attr)
1.90 - responses.append(obj.to_node())
1.91 + obj = self.get_stored_object(self.uid, recurrenceid, section)
1.92 +
1.93 + if self.is_participating(attendee, obj=obj):
1.94 + organiser, organiser_attr = uri_item(obj.get_item("ORGANIZER"))
1.95 + self.update_sender(organiser_attr)
1.96 + l.append(obj.to_node())
1.97
1.98 + method = "REQUEST"
1.99 self.add_result(method, [get_address(attendee)], to_part(method, responses))
1.100
1.101 + if cancel_responses:
1.102 + method = "CANCEL"
1.103 + self.add_result(method, [get_address(attendee)], to_part(method, cancel_responses))
1.104 +
1.105 return True
1.106
1.107 class Event(PersonHandler):