# HG changeset patch # User Paul Boddie # Date 1423430165 -3600 # Node ID 778ee1a150cd2c54cce36b798d41157c0d108909 # Parent 2bedd0a8bfc2f6faff62b6a3f15deda4285fa052 Tidied up the end datetime control logic. diff -r 2bedd0a8bfc2 -r 778ee1a150cd imip_manager.py --- a/imip_manager.py Sun Feb 08 22:15:17 2015 +0100 +++ b/imip_manager.py Sun Feb 08 22:16:05 2015 +0100 @@ -703,13 +703,17 @@ else: dtstart, dtstart_attr = obj.get_datetime_item("DTSTART") - dtend, dtend_attr = None, {} + dtend_control = args.get("dtend-control", [None])[0] - if args.get("dtend-control", [None])[0] == "enable": + if dtend_control == "enable": t = self.handle_date_controls("dtend") if t: dtend, dtend_attr = t - elif not args.has_key("dtend-control"): + else: + dtend, dtend_attr = None, {} + elif dtend_control == "disable": + dtend, dtend_attr = None, {} + else: dtend, dtend_attr = obj.get_datetime_item("DTEND") # Change end dates to refer to the actual dates, not the iCalendar @@ -718,7 +722,12 @@ if dtend and not isinstance(dtend, datetime): dtend -= timedelta(1) - if dtend and (isinstance(dtend, datetime) or dtstart != dtend): + # Show the end datetime controls if already active or if an object needs + # them. + + dtend_control = dtend_control or (isinstance(dtend, datetime) or dtstart != dtend) and "enable" or None + + if dtend_control == "enable": page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked") page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable") else: @@ -746,8 +755,15 @@ page.th(label, class_="objectheading %s" % name.lower()) + # Obtain the datetime. + if name == "DTSTART": dt, attr, event_tzid = dtstart, dtstart_attr, dtstart_attr.get("TZID", tzid) + + # Where no end datetime exists, use the start datetime as the + # basis of any potential datetime specified if dt-control is + # set. + else: dt, attr, event_tzid = dtend or dtstart, dtend_attr or dtstart_attr, (dtend_attr or dtstart_attr).get("TZID", tzid)