From 5aa71c846bd8bf1f0b1b14781ef007227357e944 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 16 Apr 2017 20:50:38 +0200 Subject: [PATCH] properly handle importing repeat rules --- .../calendar/helpers/IcsImporter.kt | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt index 6ace5b30e..1d3f35291 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt @@ -26,6 +26,7 @@ class IcsImporter { var curRepeatExceptions = ArrayList() var curRepeatInterval = 0 var curRepeatLimit = 0 + var curRepeatRule = 0 var curEventType = DBHelper.REGULAR_EVENT_TYPE_ID var isNotificationDescription = false var lastReminderAction = "" @@ -86,14 +87,13 @@ class IcsImporter { importIDs.add(curImportId) val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes.getOrElse(0, { -1 }), curReminderMinutes.getOrElse(1, { -1 }), curReminderMinutes.getOrElse(2, { -1 }), curRepeatInterval, - curImportId, curFlags, curRepeatLimit, curEventType) + curImportId, curFlags, curRepeatLimit, curRepeatRule, curEventType) val eventId = context.dbHelper.insert(event) for (exceptionTS in curRepeatExceptions) { context.dbHelper.addEventRepeatException(eventId, exceptionTS) } - eventsImported++ resetValues() } @@ -188,8 +188,12 @@ class IcsImporter { val value = keyValue[1] if (key == FREQ) { frequencySeconds = getFrequencySeconds(value) + if (value == WEEKLY) { + val start = Formatter.getDateTimeFromTS(curStart) + curRepeatRule = Math.pow(2.0, (start.dayOfWeek - 1).toDouble()).toInt() + } } else if (key == COUNT) { - count = value.toInt() + count = value.toInt() - 1 if (frequencySeconds != 0) { curRepeatLimit = curStart + count * frequencySeconds } @@ -200,8 +204,10 @@ class IcsImporter { val repeatInterval = frequencySeconds * interval if (count > 0) { curRepeatLimit = curStart + count * repeatInterval - return repeatInterval + frequencySeconds *= interval } + } else if (key == BYDAY) { + handleRepeatRule(value) } } return frequencySeconds @@ -217,6 +223,23 @@ class IcsImporter { } } + private fun handleRepeatRule(value: String) { + if (value.contains(MO)) + curRepeatRule = curRepeatRule or MONDAY + if (value.contains(TU)) + curRepeatRule = curRepeatRule or TUESDAY + if (value.contains(WE)) + curRepeatRule = curRepeatRule or WEDNESDAY + if (value.contains(TH)) + curRepeatRule = curRepeatRule or THURSDAY + if (value.contains(FR)) + curRepeatRule = curRepeatRule or FRIDAY + if (value.contains(SA)) + curRepeatRule = curRepeatRule or SATURDAY + if (value.contains(SU)) + curRepeatRule = curRepeatRule or SUNDAY + } + private fun resetValues() { curStart = -1 curEnd = -1 @@ -228,6 +251,7 @@ class IcsImporter { curRepeatExceptions = ArrayList() curRepeatInterval = 0 curRepeatLimit = 0 + curRepeatRule = 0 curEventType = DBHelper.REGULAR_EVENT_TYPE_ID isNotificationDescription = false lastReminderAction = ""