1.1 --- a/imip_store.py Tue Nov 25 23:12:15 2014 +0100
1.2 +++ b/imip_store.py Tue Nov 25 23:14:03 2014 +0100
1.3 @@ -103,7 +103,20 @@
1.4 filename = self.get_object_in_store(user, "freebusy")
1.5 if not filename or not exists(filename):
1.6 return None
1.7 + else:
1.8 + return self._get_freebusy(filename)
1.9
1.10 + def get_freebusy_for_other(self, user, other):
1.11 +
1.12 + "For the given 'user', get free/busy details for the 'other' user."
1.13 +
1.14 + filename = self.get_object_in_store(user, "freebusy-other", other)
1.15 + if not filename:
1.16 + return None
1.17 + else:
1.18 + return self._get_freebusy(filename)
1.19 +
1.20 + def _get_freebusy(self, filename):
1.21 f = open(filename)
1.22 try:
1.23 l = []
1.24 @@ -121,14 +134,7 @@
1.25 if not filename:
1.26 return False
1.27
1.28 - f = open(filename, "w")
1.29 - try:
1.30 - for item in freebusy:
1.31 - f.write("\t".join(item) + "\n")
1.32 - finally:
1.33 - f.close()
1.34 - fix_permissions(filename)
1.35 -
1.36 + self._set_freebusy(filename, freebusy)
1.37 return True
1.38
1.39 def set_freebusy_for_other(self, user, freebusy, other):
1.40 @@ -139,6 +145,10 @@
1.41 if not filename:
1.42 return False
1.43
1.44 + self._set_freebusy(filename, freebusy)
1.45 + return True
1.46 +
1.47 + def _set_freebusy(self, filename, freebusy):
1.48 f = open(filename, "w")
1.49 try:
1.50 for item in freebusy:
1.51 @@ -147,8 +157,6 @@
1.52 f.close()
1.53 fix_permissions(filename)
1.54
1.55 - return True
1.56 -
1.57 def get_requests(self, user):
1.58
1.59 "Get requests for the given 'user'."
1.60 @@ -245,8 +253,9 @@
1.61 rwrite(("UID", {}, user))
1.62 rwrite(("DTSTAMP", {}, datetime.utcnow().strftime("%Y%m%dT%H%M%SZ")))
1.63
1.64 - for start, end, uid in freebusy:
1.65 - rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end])))
1.66 + for start, end, uid, transp in freebusy:
1.67 + if transp == "OPAQUE":
1.68 + rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end])))
1.69
1.70 f = open(filename, "w")
1.71 try:
2.1 --- a/imiptools/content.py Tue Nov 25 23:12:15 2014 +0100
2.2 +++ b/imiptools/content.py Tue Nov 25 23:14:03 2014 +0100
2.3 @@ -202,10 +202,9 @@
2.4 remove_period(freebusy, uid)
2.5
2.6 for start, end in periods:
2.7 - insert_period(freebusy, (start, end, uid))
2.8 + insert_period(freebusy, (start, end, uid, transp))
2.9
2.10 - if transp in (None, "OPAQUE"):
2.11 - store.set_freebusy(attendee, freebusy)
2.12 + store.set_freebusy(attendee, freebusy)
2.13
2.14 def can_schedule(freebusy, periods, uid):
2.15
2.16 @@ -215,7 +214,7 @@
2.17 """
2.18
2.19 for conflict in have_conflict(freebusy, periods, True):
2.20 - start, end, found_uid = conflict
2.21 + start, end, found_uid, found_transp = conflict
2.22 if found_uid != uid:
2.23 return False
2.24
3.1 --- a/imiptools/handlers/common.py Tue Nov 25 23:12:15 2014 +0100
3.2 +++ b/imiptools/handlers/common.py Tue Nov 25 23:14:03 2014 +0100
3.3 @@ -46,8 +46,9 @@
3.4 rwrite(("UID", {}, self.uid))
3.5
3.6 if freebusy:
3.7 - for start, end, uid in freebusy:
3.8 - rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end])))
3.9 + for start, end, uid, transp in freebusy:
3.10 + if transp == "OPAQUE":
3.11 + rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, "/".join([start, end])))
3.12
3.13 cwrite(("VFREEBUSY", {}, record))
3.14
4.1 --- a/imiptools/period.py Tue Nov 25 23:12:15 2014 +0100
4.2 +++ b/imiptools/period.py Tue Nov 25 23:14:03 2014 +0100
4.3 @@ -47,7 +47,7 @@
4.4 """
4.5
4.6 dtstart, dtend = period[:2]
4.7 - found = bisect_left(freebusy, (dtstart, dtend, None))
4.8 + found = bisect_left(freebusy, (dtstart, dtend, None, None))
4.9
4.10 overlapping = []
4.11