parse the actual reminder time from ics files

This commit is contained in:
tibbi 2017-02-19 19:02:36 +01:00
parent dd2d17fee2
commit 9ee0b764e6

View File

@ -14,7 +14,6 @@ class IcsParser {
} }
private val BEGIN_EVENT = "BEGIN:VEVENT" private val BEGIN_EVENT = "BEGIN:VEVENT"
private val BEGIN_ALARM = "BEGIN:VALARM"
private val END = "END:VEVENT" private val END = "END:VEVENT"
private val DTSTART = "DTSTART" private val DTSTART = "DTSTART"
private val DTEND = "DTEND" private val DTEND = "DTEND"
@ -22,6 +21,10 @@ class IcsParser {
private val SUMMARY = "SUMMARY:" private val SUMMARY = "SUMMARY:"
private val DESCRIPTION = "DESCRIPTION:" private val DESCRIPTION = "DESCRIPTION:"
private val UID = "UID:" private val UID = "UID:"
private val ACTION = "ACTION:"
private val TRIGGER = "TRIGGER:"
private val DISPLAY = "DISPLAY"
var curStart = -1 var curStart = -1
var curEnd = -1 var curEnd = -1
@ -29,6 +32,8 @@ class IcsParser {
var curDescription = "" var curDescription = ""
var curImportId = "" var curImportId = ""
var curFlags = 0 var curFlags = 0
var curReminderMinutes = -1
var curShouldHaveNotification = false
var eventsImported = 0 var eventsImported = 0
var eventsFailed = 0 var eventsFailed = 0
@ -58,7 +63,7 @@ class IcsParser {
curEnd = getTimestamp(line.substring(DTEND.length)) curEnd = getTimestamp(line.substring(DTEND.length))
} else if (line.startsWith(DURATION)) { } else if (line.startsWith(DURATION)) {
val duration = line.substring(DURATION.length) val duration = line.substring(DURATION.length)
curEnd = curStart + calculateEndTime(duration) curEnd = curStart + decodeTime(duration)
} else if (line.startsWith(SUMMARY)) { } else if (line.startsWith(SUMMARY)) {
curTitle = line.substring(SUMMARY.length) curTitle = line.substring(SUMMARY.length)
curTitle = curTitle.substring(0, Math.min(curTitle.length, 50)) curTitle = curTitle.substring(0, Math.min(curTitle.length, 50))
@ -66,11 +71,18 @@ class IcsParser {
curDescription = line.substring(DESCRIPTION.length) curDescription = line.substring(DESCRIPTION.length)
} else if (line.startsWith(UID)) { } else if (line.startsWith(UID)) {
curImportId = line.substring(UID.length) curImportId = line.substring(UID.length)
} else if (line == END || line == BEGIN_ALARM) { } else if (line.startsWith(ACTION)) {
if (line.substring(ACTION.length) == DISPLAY)
curShouldHaveNotification = true
} else if (line.startsWith(TRIGGER)) {
if (curReminderMinutes == -1 && curShouldHaveNotification) {
curReminderMinutes = decodeTime(line.substring(TRIGGER.length)) / 60
}
} else if (line == END) {
if (curTitle.isEmpty() || curStart == -1 || curEnd == -1 || importIDs.contains(curImportId)) if (curTitle.isEmpty() || curStart == -1 || curEnd == -1 || importIDs.contains(curImportId))
continue continue
val event = Event(0, curStart, curEnd, curTitle, curDescription, reminderMinutes, -1, -1, importId = curImportId, flags = curFlags) val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes, -1, -1, importId = curImportId, flags = curFlags)
dbHelper.insert(event) { } dbHelper.insert(event) { }
eventsImported++ eventsImported++
resetValues() resetValues()
@ -113,7 +125,7 @@ class IcsParser {
} }
// P0DT1H0M0S // P0DT1H0M0S
private fun calculateEndTime(duration: String): Int { private fun decodeTime(duration: String): Int {
val weeks = getDurationValue(duration, "W") val weeks = getDurationValue(duration, "W")
val days = getDurationValue(duration, "DT") val days = getDurationValue(duration, "DT")
val hours = getDurationValue(duration, "H") val hours = getDurationValue(duration, "H")
@ -142,5 +154,7 @@ class IcsParser {
curDescription = "" curDescription = ""
curImportId = "" curImportId = ""
curFlags = 0 curFlags = 0
curReminderMinutes = -1
curShouldHaveNotification = false
} }
} }