1.1 --- a/imiptools/handlers/person.py Sun Sep 13 02:52:21 2015 +0200
1.2 +++ b/imiptools/handlers/person.py Sun Sep 13 02:58:48 2015 +0200
1.3 @@ -30,7 +30,10 @@
1.4
1.5 def _add(self, queue=True):
1.6
1.7 - "Add a recurrence for the current object."
1.8 + """
1.9 + Add an event occurrence for the current object or produce a response
1.10 + that requests the event details to be sent again.
1.11 + """
1.12
1.13 # Obtain valid organiser and attendee details.
1.14
1.15 @@ -40,29 +43,49 @@
1.16
1.17 (organiser, organiser_attr), attendees = oa
1.18
1.19 - # Ignore unknown objects.
1.20 - # NOTE: We could issue a REFRESH to get such objects.
1.21 + # Request details where configured, doing so for unknown objects anyway.
1.22 +
1.23 + refreshing = not self.get_stored_object_version() or self.get_add_method_response() == "refresh"
1.24 +
1.25 + if refreshing:
1.26 +
1.27 + # Add SENT-BY details to the recipient's attributes.
1.28
1.29 - if not self.get_stored_object_version():
1.30 - return
1.31 + attendee_attr = attendees[self.user]
1.32 + self.update_sender(attendee_attr)
1.33 +
1.34 + # Make a new object with a minimal property selection.
1.35 +
1.36 + obj = self.obj.copy()
1.37 + obj.preserve(("ORGANIZER", "DTSTAMP", "UID", "RECURRENCE-ID"))
1.38 + obj["ATTENDEE"] = [(self.user, attendee_attr)]
1.39 +
1.40 + # Send a REFRESH message in response.
1.41 +
1.42 + self.add_result("REFRESH", [get_address(organiser)], obj.to_part("REFRESH"))
1.43
1.44 # Record the event as a recurrence of the parent object.
1.45
1.46 self.update_recurrenceid()
1.47
1.48 + # Update the recipient's record of the organiser's schedule.
1.49 +
1.50 + self.update_freebusy_from_organiser(organiser)
1.51 +
1.52 + # Stop if requesting the full event.
1.53 +
1.54 + if refreshing:
1.55 + return
1.56 +
1.57 + # Set the additional occurrence.
1.58 +
1.59 + self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.60 +
1.61 # Queue any request, if appropriate.
1.62
1.63 if queue:
1.64 self.store.queue_request(self.user, self.uid, self.recurrenceid)
1.65
1.66 - # Update the recipient's record of the organiser's schedule.
1.67 -
1.68 - self.update_freebusy_from_organiser(organiser)
1.69 -
1.70 - # Set the additional occurrence.
1.71 -
1.72 - self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.73 -
1.74 return True
1.75
1.76 def _record(self, from_organiser=True, queue=False, cancel=False):
1.77 @@ -205,7 +228,7 @@
1.78
1.79 "Queue a suggested additional recurrence for any active event."
1.80
1.81 - if self._add(queue=True):
1.82 + if self.allow_add() and self._add(queue=True):
1.83 return self.wrap("An addition to an event has been received.")
1.84
1.85 def cancel(self):