From 336eba5c0475997c4e683a17b7317846f765dbdf Mon Sep 17 00:00:00 2001 From: Matthew Vernon Date: Fri, 19 Oct 2018 12:42:17 +0100 Subject: [PATCH] handle weekly recurrence pattern --- gooswapper.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 -- 2.30.2