1.1 --- a/imiptools/handlers/resource.py Sun Mar 01 00:24:11 2015 +0100
1.2 +++ b/imiptools/handlers/resource.py Sun Mar 01 22:00:09 2015 +0100
1.3 @@ -20,10 +20,9 @@
1.4 """
1.5
1.6 from imiptools.content import Handler
1.7 -from imiptools.data import get_address, get_uri, to_part
1.8 +from imiptools.data import get_address, get_uri, get_window_end, to_part
1.9 from imiptools.dates import get_default_timezone
1.10 from imiptools.handlers.common import CommonFreebusy
1.11 -from imiptools.profile import Preferences
1.12
1.13 class ResourceHandler(Handler):
1.14
1.15 @@ -60,13 +59,12 @@
1.16
1.17 # Interpretation of periods can depend on the time zone.
1.18
1.19 - preferences = Preferences(attendee)
1.20 - tzid = preferences.get("TZID") or get_default_timezone()
1.21 + tzid = self.get_tzid(attendee)
1.22
1.23 # If newer than any old version, discard old details from the
1.24 # free/busy record and check for suitability.
1.25
1.26 - periods = self.obj.get_periods_for_freebusy(tzid)
1.27 + periods = self.obj.get_periods_for_freebusy(tzid, get_window_end(tzid))
1.28 freebusy = self.store.get_freebusy(attendee)
1.29 scheduled = self.can_schedule(freebusy, periods)
1.30
1.31 @@ -84,17 +82,30 @@
1.32
1.33 self.update_dtstamp()
1.34
1.35 - # Set the complete event if not an additional occurrence.
1.36 + # Set the complete event or an additional occurrence.
1.37
1.38 event = self.obj.to_node()
1.39 self.store.set_event(attendee, self.uid, self.recurrenceid, event)
1.40
1.41 + # Detach any recurrence from its parent.
1.42 +
1.43 + self.detach_recurrence(attendee)
1.44 +
1.45 # Only update free/busy details if the event is scheduled.
1.46
1.47 if scheduled:
1.48 - self.update_freebusy(freebusy, attendee, periods)
1.49 + self.update_freebusy(freebusy, periods)
1.50 else:
1.51 - self.remove_from_freebusy(freebusy, attendee)
1.52 + self.remove_from_freebusy(freebusy)
1.53 +
1.54 + # For any parent object, refresh the updated periods.
1.55 +
1.56 + obj = self.get_parent_object(attendee)
1.57 + if obj:
1.58 + periods = obj.get_periods_for_freebusy(tzid, get_window_end(tzid))
1.59 + self._update_freebusy(freebusy, periods, None)
1.60 +
1.61 + self.store.set_freebusy(attendee, freebusy)
1.62
1.63 if self.publisher:
1.64 self.publisher.set_freebusy(attendee, freebusy)
1.65 @@ -106,7 +117,9 @@
1.66 self.store.cancel_event(attendee, self.uid, self.recurrenceid)
1.67
1.68 freebusy = self.store.get_freebusy(attendee)
1.69 - self.remove_from_freebusy(freebusy, attendee)
1.70 + self.remove_from_freebusy(freebusy)
1.71 +
1.72 + self.store.set_freebusy(attendee, freebusy)
1.73
1.74 if self.publisher:
1.75 self.publisher.set_freebusy(attendee, freebusy)