From: Matthew Vernon Date: Fri, 19 Oct 2018 11:42:17 +0000 (+0100) Subject: handle weekly recurrence pattern X-Git-Tag: v0.1~15 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?a=commitdiff_plain;h=336eba5c0475997c4e683a17b7317846f765dbdf;p=gooswapper handle weekly recurrence pattern --- diff --git a/gooswapper.py b/gooswapper.py index 75edd3f..e18da2f 100644 --- a/gooswapper.py +++ b/gooswapper.py @@ -136,6 +136,12 @@ def ex_event_changes(old,new): len(deleted))) return added, deleted, changed +#exchangelib gives us days in recurrence patterns as integers, +#RFC5545 wants SU,MO,TU,WE,TH,FR,SA +#it has a utility function to convert to Monday, Tuesday, ... +def rr_daystr_from_int(i): + return exchangelib.recurrence._weekday_to_str(i).upper()[:2] + def rrule_from_ex(event,gcal_tz): if event.type != "RecurringMaster": logger.error("Cannot make recurrence from not-recurring event") @@ -146,6 +152,12 @@ def rrule_from_ex(event,gcal_tz): if isinstance(event.recurrence.pattern, exchangelib.recurrence.DailyPattern): rr = "RRULE:FREQ=DAILY;INTERVAL=%d" % event.recurrence.pattern.interval + elif isinstance(event.recurrence.pattern, + exchangelib.recurrence.WeeklyPattern): + rr = "RRULE:FREQ=WEEKLY;INTERVAL=%d;BYDAY=%s;WKST=%s" % \ + (event.recurrence.pattern.interval, + ",".join([rr_daystr_from_int(x) for x in event.recurrence.pattern.weekdays]), + rr_daystr_from_int(event.recurrence.pattern.first_day_of_week) ) else: logger.error("Recurrence %s not supported" % event.recurrence) return None