1.1 --- a/imip_manager.py Mon Feb 09 20:11:02 2015 +0100
1.2 +++ b/imip_manager.py Mon Feb 09 22:18:38 2015 +0100
1.3 @@ -40,7 +40,8 @@
1.4 from imiptools.period import add_day_start_points, add_empty_days, add_slots, \
1.5 convert_periods, get_freebusy_details, \
1.6 get_scale, have_conflict, get_slots, get_spans, \
1.7 - partition_by_day, remove_from_freebusy, update_freebusy
1.8 + partition_by_day, remove_from_freebusy, update_freebusy, \
1.9 + _update_freebusy
1.10 from imiptools.profile import Preferences
1.11 import imip_store
1.12 import markup
1.13 @@ -107,7 +108,24 @@
1.14 path = self.get_path()
1.15 return "%s/%s" % (path.rstrip("/"), path_info.lstrip("/"))
1.16
1.17 -class ManagerHandler(Handler):
1.18 +class Common:
1.19 +
1.20 + "Common handler and manager methods."
1.21 +
1.22 + def __init__(self, user):
1.23 + self.user = user
1.24 + self.preferences = None
1.25 +
1.26 + def get_preferences(self):
1.27 + if not self.preferences:
1.28 + self.preferences = Preferences(self.user)
1.29 + return self.preferences
1.30 +
1.31 + def get_tzid(self):
1.32 + prefs = self.get_preferences()
1.33 + return prefs.get("TZID") or get_default_timezone()
1.34 +
1.35 +class ManagerHandler(Handler, Common):
1.36
1.37 """
1.38 A content handler for use by the manager, as opposed to operating within the
1.39 @@ -116,8 +134,9 @@
1.40
1.41 def __init__(self, obj, user, messenger):
1.42 Handler.__init__(self, messenger=messenger)
1.43 + Common.__init__(self, user)
1.44 +
1.45 self.set_object(obj)
1.46 - self.user = user
1.47
1.48 self.organiser = self.obj.get_value("ORGANIZER")
1.49 self.attendees = self.obj.get_values("ATTENDEE")
1.50 @@ -157,6 +176,16 @@
1.51 uid = "imip-agent-%s-%s" % (utcnow, get_address(self.user))
1.52
1.53 freebusy = self.store.get_freebusy(self.user)
1.54 +
1.55 + # Replace the non-updated free/busy details for this event with
1.56 + # newer details (since the outgoing handler updates this user's
1.57 + # free/busy details).
1.58 +
1.59 + tzid = self.get_tzid()
1.60 +
1.61 + _update_freebusy(freebusy, self.obj.get_periods_for_freebusy(tzid),
1.62 + self.obj.get_value("TRANSP") or "OPAQUE", self.obj.get_value("UID"))
1.63 +
1.64 user_attr = self.messenger and self.messenger.sender != get_address(self.user) and \
1.65 {"SENT-BY" : get_uri(self.messenger.sender)} or {}
1.66
1.67 @@ -221,19 +250,18 @@
1.68 self.send_message(method, get_address(self.organiser), for_organiser=True)
1.69 return True
1.70
1.71 -class Manager:
1.72 +class Manager(Common):
1.73
1.74 "A simple manager application."
1.75
1.76 def __init__(self, messenger=None):
1.77 self.messenger = messenger or Messenger()
1.78 -
1.79 self.encoding = "utf-8"
1.80 self.env = CGIEnvironment(self.encoding)
1.81
1.82 user = self.env.get_user()
1.83 - self.user = user and get_uri(user) or None
1.84 - self.preferences = None
1.85 + Common.__init__(self, user and get_uri(user) or None)
1.86 +
1.87 self.locale = None
1.88 self.requests = None
1.89
1.90 @@ -283,15 +311,6 @@
1.91 self.locale = self.get_preferences().get("LANG", "C")
1.92 return self.locale
1.93
1.94 - def get_preferences(self):
1.95 - if not self.preferences:
1.96 - self.preferences = Preferences(self.user)
1.97 - return self.preferences
1.98 -
1.99 - def get_tzid(self):
1.100 - prefs = self.get_preferences()
1.101 - return prefs.get("TZID") or get_default_timezone()
1.102 -
1.103 # Prettyprinting of dates and times.
1.104
1.105 def format_date(self, dt, format):