1.1 --- a/imiptools/handlers/resource.py Tue May 19 23:40:57 2015 +0200
1.2 +++ b/imiptools/handlers/resource.py Wed May 20 13:41:23 2015 +0200
1.3 @@ -21,13 +21,24 @@
1.4
1.5 from imiptools.data import get_address, get_uri, to_part
1.6 from imiptools.handlers import Handler
1.7 -from imiptools.handlers.common import CommonFreebusy
1.8 -from imiptools.period import remove_affected_period
1.9 +from imiptools.handlers.common import CommonFreebusy, Outgoing
1.10
1.11 -class ResourceHandler(Handler):
1.12 +class ResourceHandler(Handler, Outgoing):
1.13
1.14 "Handling mechanisms specific to resources."
1.15
1.16 + def set_participation(self, scheduled):
1.17 +
1.18 + "Set the user's participation in the current object if 'scheduled'."
1.19 +
1.20 + attendee_attr = self.obj.get_value_map("ATTENDEE").get(self.user)
1.21 + attendee_attr["PARTSTAT"] = scheduled and "ACCEPTED" or "DECLINED"
1.22 + if attendee_attr.has_key("RSVP"):
1.23 + del attendee_attr["RSVP"]
1.24 + if self.messenger and self.messenger.sender != get_address(self.user):
1.25 + attendee_attr["SENT-BY"] = get_uri(self.messenger.sender)
1.26 + return attendee_attr
1.27 +
1.28 def _record_and_respond(self, handle_for_attendee):
1.29
1.30 """
1.31 @@ -76,13 +87,9 @@
1.32 freebusy = self.store.get_freebusy(self.user)
1.33 scheduled = self.can_schedule(freebusy, periods)
1.34
1.35 - attendee_attr = self.obj.get_value_map("ATTENDEE").get(self.user)
1.36 + # Update the participation of the resource in the object.
1.37
1.38 - attendee_attr["PARTSTAT"] = scheduled and "ACCEPTED" or "DECLINED"
1.39 - if attendee_attr.has_key("RSVP"):
1.40 - del attendee_attr["RSVP"]
1.41 - if self.messenger and self.messenger.sender != get_address(self.user):
1.42 - attendee_attr["SENT-BY"] = get_uri(self.messenger.sender)
1.43 + attendee_attr = self.set_participation(scheduled)
1.44
1.45 # Set the complete event or an additional occurrence.
1.46
1.47 @@ -94,28 +101,14 @@
1.48 if not self.recurrenceid:
1.49 self.store.remove_recurrences(self.user, self.uid)
1.50
1.51 - # Only update free/busy details if the event is scheduled.
1.52 -
1.53 - if scheduled:
1.54 - self.update_freebusy(freebusy, periods)
1.55 - else:
1.56 - self.remove_from_freebusy(freebusy)
1.57 + # Update free/busy information.
1.58
1.59 - # Remove original recurrence details replaced by additional
1.60 - # recurrences, as well as obsolete additional recurrences.
1.61 + self.update_event_in_freebusy(from_organiser=False)
1.62
1.63 - self.remove_freebusy_for_recurrences(freebusy, self.store.get_recurrences(self.user, self.uid))
1.64 - self.store.set_freebusy(self.user, freebusy)
1.65 -
1.66 - if self.publisher and self.is_sharing():
1.67 - self.publisher.set_freebusy(self.user, freebusy)
1.68 -
1.69 - # Make a version of the request with just this attendee.
1.70 + # Make a version of the object with just this attendee, update the
1.71 + # DTSTAMP in the response, and return the object for sending.
1.72
1.73 self.obj["ATTENDEE"] = [(self.user, attendee_attr)]
1.74 -
1.75 - # Update the DTSTAMP in the response.
1.76 -
1.77 self.update_dtstamp()
1.78 return event
1.79
1.80 @@ -129,13 +122,11 @@
1.81 self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.82 self.store.cancel_event(self.user, self.uid, self.recurrenceid)
1.83
1.84 - freebusy = self.store.get_freebusy(self.user)
1.85 - self.remove_from_freebusy(freebusy)
1.86 - self.remove_freebusy_for_recurrences(freebusy)
1.87 - self.store.set_freebusy(self.user, freebusy)
1.88 + # Update free/busy information.
1.89
1.90 - if self.publisher and self.is_sharing():
1.91 - self.publisher.set_freebusy(self.user, freebusy)
1.92 + self.remove_event_from_freebusy()
1.93 +
1.94 + # No response is required.
1.95
1.96 return None
1.97