1.1 --- a/imip_manager.py Wed Mar 25 17:57:42 2015 +0100
1.2 +++ b/imip_manager.py Wed Mar 25 18:04:26 2015 +0100
1.3 @@ -31,6 +31,7 @@
1.4
1.5 sys.path.append(LIBRARY_PATH)
1.6
1.7 +from imiptools.client import update_attendees
1.8 from imiptools.data import get_address, get_uri, get_window_end, make_freebusy, \
1.9 Object, to_part, \
1.10 uri_dict, uri_item, uri_items, uri_values
1.11 @@ -78,39 +79,6 @@
1.12 def get_window_end(self):
1.13 return get_window_end(self.get_tzid(), self.get_window_size())
1.14
1.15 - def update_attendees(self, obj, added, removed):
1.16 -
1.17 - """
1.18 - Update the attendees in 'obj' with the given 'added' and 'removed'
1.19 - attendee lists. A list is returned containing the attendees whose
1.20 - attendance should be cancelled.
1.21 - """
1.22 -
1.23 - to_cancel = []
1.24 -
1.25 - if added or removed:
1.26 - attendees = uri_items(obj.get_items("ATTENDEE") or [])
1.27 -
1.28 - if removed:
1.29 - remaining = []
1.30 -
1.31 - for attendee, attendee_attr in attendees:
1.32 - if attendee in removed:
1.33 - if attendee_attr.get("PARTSTAT") in ("ACCEPTED", "TENTATIVE"):
1.34 - to_cancel.append((attendee, attendee_attr))
1.35 - else:
1.36 - remaining.append((attendee, attendee_attr))
1.37 -
1.38 - attendees = remaining
1.39 -
1.40 - if added:
1.41 - for attendee in added:
1.42 - attendees.append((attendee, {"PARTSTAT" : "NEEDS-ACTION", "RSVP" : "TRUE"}))
1.43 -
1.44 - obj["ATTENDEE"] = attendees
1.45 -
1.46 - return to_cancel
1.47 -
1.48 class ManagerHandler(Common, Handler):
1.49
1.50 """
1.51 @@ -239,7 +207,7 @@
1.52
1.53 # Update the attendees in the event.
1.54
1.55 - to_cancel = self.update_attendees(self.obj, added, removed)
1.56 + to_cancel = update_attendees(self.obj, added, removed)
1.57
1.58 self.update_dtstamp()
1.59 self.set_sequence(update)
1.60 @@ -646,7 +614,7 @@
1.61 # Save single user events.
1.62
1.63 elif save:
1.64 - to_cancel = self.update_attendees(obj, added, removed)
1.65 + to_cancel = update_attendees(obj, added, removed)
1.66 self.store.set_event(self.user, uid, recurrenceid, node=obj.to_node())
1.67 self.update_freebusy(uid, recurrenceid, obj)
1.68 self.remove_request(uid, recurrenceid)
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/imiptools/client.py Wed Mar 25 18:04:26 2015 +0100
2.3 @@ -0,0 +1,57 @@
2.4 +#!/usr/bin/env python
2.5 +
2.6 +"""
2.7 +Common calendar client utilities.
2.8 +
2.9 +Copyright (C) 2014, 2015 Paul Boddie <paul@boddie.org.uk>
2.10 +
2.11 +This program is free software; you can redistribute it and/or modify it under
2.12 +the terms of the GNU General Public License as published by the Free Software
2.13 +Foundation; either version 3 of the License, or (at your option) any later
2.14 +version.
2.15 +
2.16 +This program is distributed in the hope that it will be useful, but WITHOUT
2.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2.19 +details.
2.20 +
2.21 +You should have received a copy of the GNU General Public License along with
2.22 +this program. If not, see <http://www.gnu.org/licenses/>.
2.23 +"""
2.24 +
2.25 +from imiptools.data import uri_items
2.26 +
2.27 +def update_attendees(obj, added, removed):
2.28 +
2.29 + """
2.30 + Update the attendees in 'obj' with the given 'added' and 'removed'
2.31 + attendee lists. A list is returned containing the attendees whose
2.32 + attendance should be cancelled.
2.33 + """
2.34 +
2.35 + to_cancel = []
2.36 +
2.37 + if added or removed:
2.38 + attendees = uri_items(obj.get_items("ATTENDEE") or [])
2.39 +
2.40 + if removed:
2.41 + remaining = []
2.42 +
2.43 + for attendee, attendee_attr in attendees:
2.44 + if attendee in removed:
2.45 + if attendee_attr.get("PARTSTAT") in ("ACCEPTED", "TENTATIVE"):
2.46 + to_cancel.append((attendee, attendee_attr))
2.47 + else:
2.48 + remaining.append((attendee, attendee_attr))
2.49 +
2.50 + attendees = remaining
2.51 +
2.52 + if added:
2.53 + for attendee in added:
2.54 + attendees.append((attendee, {"PARTSTAT" : "NEEDS-ACTION", "RSVP" : "TRUE"}))
2.55 +
2.56 + obj["ATTENDEE"] = attendees
2.57 +
2.58 + return to_cancel
2.59 +
2.60 +# vim: tabstop=4 expandtab shiftwidth=4