fix off-by-day issue at syncing caldav events
This commit is contained in:
parent
a9ac3a955f
commit
d5d56ec127
|
@ -17,6 +17,7 @@ import com.simplemobiletools.calendar.models.EventType
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALENDAR
|
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALENDAR
|
||||||
|
import org.joda.time.DateTimeZone
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
|
@ -206,6 +207,7 @@ class CalDAVHandler(val context: Context) {
|
||||||
CalendarContract.Events.DESCRIPTION,
|
CalendarContract.Events.DESCRIPTION,
|
||||||
CalendarContract.Events.DTSTART,
|
CalendarContract.Events.DTSTART,
|
||||||
CalendarContract.Events.DTEND,
|
CalendarContract.Events.DTEND,
|
||||||
|
CalendarContract.Events.EVENT_TIMEZONE,
|
||||||
CalendarContract.Events.DURATION,
|
CalendarContract.Events.DURATION,
|
||||||
CalendarContract.Events.ALL_DAY,
|
CalendarContract.Events.ALL_DAY,
|
||||||
CalendarContract.Events.RRULE,
|
CalendarContract.Events.RRULE,
|
||||||
|
@ -222,8 +224,9 @@ class CalDAVHandler(val context: Context) {
|
||||||
val id = cursor.getLongValue(CalendarContract.Events._ID)
|
val id = cursor.getLongValue(CalendarContract.Events._ID)
|
||||||
val title = cursor.getStringValue(CalendarContract.Events.TITLE) ?: ""
|
val title = cursor.getStringValue(CalendarContract.Events.TITLE) ?: ""
|
||||||
val description = cursor.getStringValue(CalendarContract.Events.DESCRIPTION) ?: ""
|
val description = cursor.getStringValue(CalendarContract.Events.DESCRIPTION) ?: ""
|
||||||
val startTS = (cursor.getLongValue(CalendarContract.Events.DTSTART) / 1000).toInt()
|
var startTS = (cursor.getLongValue(CalendarContract.Events.DTSTART) / 1000).toInt()
|
||||||
var endTS = (cursor.getLongValue(CalendarContract.Events.DTEND) / 1000).toInt()
|
var endTS = (cursor.getLongValue(CalendarContract.Events.DTEND) / 1000).toInt()
|
||||||
|
val timeZone = cursor.getStringValue(CalendarContract.Events.EVENT_TIMEZONE) ?: "UTC"
|
||||||
val allDay = cursor.getIntValue(CalendarContract.Events.ALL_DAY)
|
val allDay = cursor.getIntValue(CalendarContract.Events.ALL_DAY)
|
||||||
val rrule = cursor.getStringValue(CalendarContract.Events.RRULE) ?: ""
|
val rrule = cursor.getStringValue(CalendarContract.Events.RRULE) ?: ""
|
||||||
val location = cursor.getStringValue(CalendarContract.Events.EVENT_LOCATION) ?: ""
|
val location = cursor.getStringValue(CalendarContract.Events.EVENT_LOCATION) ?: ""
|
||||||
|
@ -231,6 +234,17 @@ class CalDAVHandler(val context: Context) {
|
||||||
val originalInstanceTime = cursor.getLongValue(CalendarContract.Events.ORIGINAL_INSTANCE_TIME)
|
val originalInstanceTime = cursor.getLongValue(CalendarContract.Events.ORIGINAL_INSTANCE_TIME)
|
||||||
val reminders = getCalDAVEventReminders(id)
|
val reminders = getCalDAVEventReminders(id)
|
||||||
|
|
||||||
|
if (allDay == 1 && timeZone == "UTC") {
|
||||||
|
val offset = DateTimeZone.getDefault().getOffset(System.currentTimeMillis()) / 1000
|
||||||
|
val FIVE_HOURS = 5 * 60 * 60
|
||||||
|
startTS -= offset
|
||||||
|
startTS += FIVE_HOURS
|
||||||
|
if (endTS != 0) {
|
||||||
|
endTS -= offset
|
||||||
|
endTS += FIVE_HOURS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (endTS == 0) {
|
if (endTS == 0) {
|
||||||
val duration = cursor.getStringValue(CalendarContract.Events.DURATION) ?: ""
|
val duration = cursor.getStringValue(CalendarContract.Events.DURATION) ?: ""
|
||||||
endTS = startTS + Parser().parseDurationSeconds(duration)
|
endTS = startTS + Parser().parseDurationSeconds(duration)
|
||||||
|
|
|
@ -53,8 +53,9 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||||
inputStream.bufferedReader().use {
|
inputStream.bufferedReader().use {
|
||||||
while (true) {
|
while (true) {
|
||||||
var line = it.readLine() ?: break
|
var line = it.readLine() ?: break
|
||||||
if (line.trim().isEmpty())
|
if (line.trim().isEmpty()) {
|
||||||
continue
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if (line.substring(0, 1) == " ") {
|
if (line.substring(0, 1) == " ") {
|
||||||
line = prevLine + line.trim()
|
line = prevLine + line.trim()
|
||||||
|
|
Loading…
Reference in New Issue