1.1 --- a/imiptools/handlers/person.py Tue Mar 31 19:09:11 2015 +0200
1.2 +++ b/imiptools/handlers/person.py Tue Mar 31 19:12:21 2015 +0200
1.3 @@ -19,7 +19,7 @@
1.4 this program. If not, see <http://www.gnu.org/licenses/>.
1.5 """
1.6
1.7 -from imiptools.data import get_uri
1.8 +from imiptools.data import get_uri, uri_values, values_from_items
1.9 from imiptools.dates import format_datetime
1.10 from imiptools.handlers import Handler
1.11 from imiptools.handlers.common import CommonFreebusy
1.12 @@ -51,47 +51,45 @@
1.13
1.14 if from_organiser:
1.15
1.16 - # Process each attendee separately.
1.17 -
1.18 - for attendee, attendee_attr in attendees.items():
1.19 + # Process for the current user, an attendee.
1.20
1.21 - if not self.have_new_object(attendee):
1.22 - continue
1.23 + if not self.have_new_object() or not self.is_attendee(self.user):
1.24 + return False
1.25
1.26 - # Set the complete event or an additional occurrence.
1.27 + # Set the complete event or an additional occurrence.
1.28
1.29 - self.store.set_event(attendee, self.uid, self.recurrenceid, self.obj.to_node())
1.30 + self.store.set_event(self.user, self.uid, self.recurrenceid, self.obj.to_node())
1.31
1.32 - # Remove additional recurrences if handling a complete event.
1.33 + # Remove additional recurrences if handling a complete event.
1.34
1.35 - if not self.recurrenceid:
1.36 - self.store.remove_recurrences(attendee, self.uid)
1.37 + if not self.recurrenceid:
1.38 + self.store.remove_recurrences(self.user, self.uid)
1.39
1.40 - # Queue any request.
1.41 + # Queue any request.
1.42
1.43 - if queue:
1.44 - self.store.queue_request(attendee, self.uid, self.recurrenceid)
1.45 - elif cancel:
1.46 - self.store.cancel_event(attendee, self.uid, self.recurrenceid)
1.47 + if queue:
1.48 + self.store.queue_request(self.user, self.uid, self.recurrenceid)
1.49 + elif cancel:
1.50 + self.store.cancel_event(self.user, self.uid, self.recurrenceid)
1.51
1.52 - # No return message will occur to update the free/busy
1.53 - # information, so this is done here.
1.54 + # No return message will occur to update the free/busy
1.55 + # information, so this is done here.
1.56
1.57 - freebusy = self.store.get_freebusy(attendee)
1.58 - self.remove_from_freebusy(freebusy)
1.59 + freebusy = self.store.get_freebusy(self.user)
1.60 + self.remove_from_freebusy(freebusy)
1.61
1.62 - self.store.set_freebusy(attendee, freebusy)
1.63 + self.store.set_freebusy(self.user, freebusy)
1.64
1.65 - if self.publisher:
1.66 - self.publisher.set_freebusy(attendee, freebusy)
1.67 + if self.publisher and self.is_sharing():
1.68 + self.publisher.set_freebusy(self.user, freebusy)
1.69
1.70 - self.update_freebusy_from_organiser(attendee, organiser_item)
1.71 + self.update_freebusy_from_organiser(organiser_item)
1.72
1.73 # As organiser, update attendance from valid attendees.
1.74
1.75 else:
1.76 - if self.merge_attendance(attendees, organiser):
1.77 - self.update_freebusy_from_attendees(organiser, attendees)
1.78 + if self.merge_attendance(attendees):
1.79 + self.update_freebusy_from_attendees(attendees)
1.80
1.81 return True
1.82
1.83 @@ -133,12 +131,11 @@
1.84
1.85 dtstart = format_datetime(self.obj.get_utc_datetime("DTSTART"))
1.86 dtend = format_datetime(self.obj.get_utc_datetime("DTEND"))
1.87 - user = get_uri(self.recipient)
1.88
1.89 for sender, sender_attr in senders:
1.90 - stored_freebusy = self.store.get_freebusy_for_other(user, sender)
1.91 + stored_freebusy = self.store.get_freebusy_for_other(self.user, sender)
1.92 replace_overlapping(stored_freebusy, Period(dtstart, dtend), freebusy)
1.93 - self.store.set_freebusy_for_other(user, stored_freebusy, sender)
1.94 + self.store.set_freebusy_for_other(self.user, stored_freebusy, sender)
1.95
1.96 class Event(PersonHandler):
1.97
1.98 @@ -210,8 +207,7 @@
1.99
1.100 # Produce a message if configured to do so.
1.101
1.102 - preferences = Preferences(get_uri(self.recipient))
1.103 - if preferences.get("freebusy_messages") == "notify":
1.104 + if self.is_notifying():
1.105 return self.wrap("A free/busy update has been received.", link=False)
1.106
1.107 def reply(self):
1.108 @@ -222,21 +218,19 @@
1.109
1.110 # Produce a message if configured to do so.
1.111
1.112 - preferences = Preferences(get_uri(self.recipient))
1.113 - if preferences.get("freebusy_messages") == "notify":
1.114 + if self.is_notifying():
1.115 return self.wrap("A reply to a free/busy request has been received.", link=False)
1.116
1.117 def request(self):
1.118
1.119 """
1.120 Respond to a request by preparing a reply containing free/busy
1.121 - information for each indicated attendee.
1.122 + information for the recipient.
1.123 """
1.124
1.125 # Produce a reply if configured to do so.
1.126
1.127 - preferences = Preferences(get_uri(self.recipient))
1.128 - if preferences.get("freebusy_sharing") == "share":
1.129 + if self.is_sharing():
1.130 return CommonFreebusy.request(self)
1.131
1.132 # Handler registry.