1.1 --- a/imip_manager.py Fri Mar 06 23:47:20 2015 +0100
1.2 +++ b/imip_manager.py Fri Mar 06 23:48:54 2015 +0100
1.3 @@ -553,44 +553,53 @@
1.4 utcnow = get_timestamp()
1.5 uid = "imip-agent-%s-%s" % (utcnow, get_address(self.user))
1.6
1.7 + # Create a calendar object and store it as a request.
1.8 +
1.9 + record = []
1.10 + rwrite = record.append
1.11 +
1.12 # Define a single occurrence if only one coalesced slot exists.
1.13 - # Otherwise, many occurrences are defined.
1.14 -
1.15 - for i, (start, end) in enumerate(coalesced):
1.16 - this_uid = "%s-%s" % (uid, i)
1.17 -
1.18 +
1.19 + start, end = coalesced[0]
1.20 + start_value, start_attr = get_datetime_item(start, tzid)
1.21 + end_value, end_attr = get_datetime_item(end, tzid)
1.22 +
1.23 + rwrite(("UID", {}, uid))
1.24 + rwrite(("SUMMARY", {}, "New event at %s" % utcnow))
1.25 + rwrite(("DTSTAMP", {}, utcnow))
1.26 + rwrite(("DTSTART", start_attr, start_value))
1.27 + rwrite(("DTEND", end_attr, end_value))
1.28 + rwrite(("ORGANIZER", {}, self.user))
1.29 +
1.30 + participants = uri_values(filter(None, participants))
1.31 +
1.32 + for participant in participants:
1.33 + rwrite(("ATTENDEE", {"RSVP" : "TRUE", "PARTSTAT" : "NEEDS-ACTION"}, participant))
1.34 +
1.35 + if self.user not in participants:
1.36 + rwrite(("ATTENDEE", {"PARTSTAT" : "ACCEPTED"}, self.user))
1.37 +
1.38 + # Define additional occurrences if many slots are defined.
1.39 +
1.40 + rdates = []
1.41 +
1.42 + for start, end in coalesced[1:]:
1.43 start_value, start_attr = get_datetime_item(start, tzid)
1.44 end_value, end_attr = get_datetime_item(end, tzid)
1.45 -
1.46 - # Create a calendar object and store it as a request.
1.47 -
1.48 - record = []
1.49 - rwrite = record.append
1.50 -
1.51 - rwrite(("UID", {}, this_uid))
1.52 - rwrite(("SUMMARY", {}, "New event at %s" % utcnow))
1.53 - rwrite(("DTSTAMP", {}, utcnow))
1.54 - rwrite(("DTSTART", start_attr, start_value))
1.55 - rwrite(("DTEND", end_attr, end_value))
1.56 - rwrite(("ORGANIZER", {}, self.user))
1.57 -
1.58 - participants = uri_values(filter(None, participants))
1.59 -
1.60 - for participant in participants:
1.61 - rwrite(("ATTENDEE", {"RSVP" : "TRUE", "PARTSTAT" : "NEEDS-ACTION"}, participant))
1.62 -
1.63 - if self.user not in participants:
1.64 - rwrite(("ATTENDEE", {"PARTSTAT" : "ACCEPTED"}, self.user))
1.65 -
1.66 - node = ("VEVENT", {}, record)
1.67 -
1.68 - self.store.set_event(self.user, this_uid, None, node=node)
1.69 - self.store.queue_request(self.user, this_uid)
1.70 + rdates.append("%s/%s" % (start_value, end_value))
1.71 +
1.72 + if rdates:
1.73 + rwrite(("RDATE", {"VALUE" : "PERIOD", "TZID" : tzid}, rdates))
1.74 +
1.75 + node = ("VEVENT", {}, record)
1.76 +
1.77 + self.store.set_event(self.user, uid, None, node=node)
1.78 + self.store.queue_request(self.user, uid)
1.79
1.80 # Redirect to the object (or the first of the objects), where instead of
1.81 # attendee controls, there will be organiser controls.
1.82
1.83 - self.redirect(self.link_to("%s-0" % uid))
1.84 + self.redirect(self.link_to(uid))
1.85
1.86 def handle_request(self, uid, recurrenceid, obj):
1.87