1.1 --- a/imiptools/content.py Sun Jan 25 00:56:53 2015 +0100
1.2 +++ b/imiptools/content.py Sun Jan 25 01:17:55 2015 +0100
1.3 @@ -509,40 +509,38 @@
1.4 obj = obj or self.get_object(attendee, objtype)
1.5
1.6 # If found, compare SEQUENCE and potentially DTSTAMP.
1.7 + # NOTE: Some clients like Claws Mail erase time information from DTSTAMP
1.8 + # NOTE: and make it invalid. Thus, attendance information may also be
1.9 + # NOTE: checked.
1.10
1.11 if obj:
1.12 sequence = get_value(obj, "SEQUENCE")
1.13 dtstamp = get_value(obj, "DTSTAMP")
1.14
1.15 - # NOTE: Some clients like Claws Mail erase time information from DTSTAMP
1.16 - # NOTE: and make it invalid. Thus, attendance information may also be
1.17 - # NOTE: checked.
1.18 -
1.19 - for _attendee, old_attr in get_items(obj, "ATTENDEE"):
1.20 - if _attendee == attendee:
1.21 - break
1.22 - else:
1.23 - return False
1.24 -
1.25 - for _attendee, new_attr in self.get_items("ATTENDEE"):
1.26 - if _attendee == attendee:
1.27 - break
1.28 - else:
1.29 - return False
1.30 -
1.31 - old_partstat = old_attr.get("PARTSTAT")
1.32 - new_partstat = new_attr.get("PARTSTAT")
1.33 -
1.34 - partstat_set = old_partstat == "NEEDS-ACTION" and new_partstat and \
1.35 - new_partstat != old_partstat
1.36 -
1.37 # If the request refers to an older version of the object, ignore
1.38 # it.
1.39
1.40 - return is_new_object(sequence, self.sequence, dtstamp, self.dtstamp, partstat_set)
1.41 + return is_new_object(sequence, self.sequence, dtstamp, self.dtstamp,
1.42 + self.is_partstat_updated(obj))
1.43
1.44 return True
1.45
1.46 + def is_partstat_updated(self, obj):
1.47 + old_attendees = get_value_map(obj, "ATTENDEE")
1.48 + new_attendees = self.get_value_map("ATTENDEE")
1.49 +
1.50 + for attendee, attr in old_attendees.items():
1.51 + old_partstat = attr.get("PARTSTAT")
1.52 + new_attr = new_attendees.get(attendee)
1.53 + new_partstat = new_attr and new_attr.get("PARTSTAT")
1.54 +
1.55 + if old_partstat == "NEEDS-ACTION" and new_partstat and \
1.56 + new_partstat != old_partstat:
1.57 +
1.58 + return True
1.59 +
1.60 + return False
1.61 +
1.62 def update_dtstamp(self):
1.63
1.64 "Update the DTSTAMP in the current object."