Update ical4android

Fixes alarm synchronization
pull/3861/head
Alex Baker 3 months ago
parent 29cbb33a42
commit b61842646b

@ -3,15 +3,14 @@ package org.tasks.data
import android.content.ContentUris
import android.database.Cursor
import android.net.Uri
import at.bitfire.ical4android.AndroidTask
import at.bitfire.ical4android.BatchOperation
import at.bitfire.ical4android.BatchOperation.CpoBuilder.Companion.newInsert
import at.bitfire.ical4android.BatchOperation.CpoBuilder.Companion.newUpdate
import at.bitfire.ical4android.DmfsTask
import at.bitfire.ical4android.ICalendar
import at.bitfire.ical4android.Ical4Android
import at.bitfire.ical4android.Task
import at.bitfire.ical4android.UnknownProperty
import at.bitfire.ical4android.util.MiscUtils.CursorHelper.toValues
import at.bitfire.ical4android.util.MiscUtils.toValues
import net.fortuna.ical4j.model.Parameter
import net.fortuna.ical4j.model.parameter.RelType
import net.fortuna.ical4j.model.parameter.Related
@ -21,7 +20,7 @@ import org.tasks.data.OpenTaskDao.Companion.getLong
import java.util.Locale
import java.util.logging.Level
class MyAndroidTask() : AndroidTask(null) {
class MyAndroidTask() : DmfsTask(null) {
constructor(cursor: Cursor) : this() {
val values = cursor.toValues()
@ -99,7 +98,7 @@ class MyAndroidTask() : AndroidTask(null) {
.withValue(TaskContract.Property.Alarm.MESSAGE, alarm.description?.value ?: alarm.summary)
.withValue(TaskContract.Property.Alarm.ALARM_TYPE, alarmType)
Ical4Android.log.log(Level.FINE, "Inserting alarm", builder.build())
logger.log(Level.FINE, "Inserting alarm", builder.build())
batch.add(builder)
}
}
@ -110,7 +109,7 @@ class MyAndroidTask() : AndroidTask(null) {
.withTaskId(TaskContract.Property.Category.TASK_ID, idxTask)
.withValue(TaskContract.Property.Category.MIMETYPE, TaskContract.Property.Category.CONTENT_ITEM_TYPE)
.withValue(TaskContract.Property.Category.CATEGORY_NAME, category)
Ical4Android.log.log(Level.FINE, "Inserting category", builder.build())
logger.log(Level.FINE, "Inserting category", builder.build())
batch.add(builder)
}
}
@ -130,7 +129,7 @@ class MyAndroidTask() : AndroidTask(null) {
.withValue(TaskContract.Property.Relation.MIMETYPE, TaskContract.Property.Relation.CONTENT_ITEM_TYPE)
.withValue(TaskContract.Property.Relation.RELATED_UID, relatedTo.value)
.withValue(TaskContract.Property.Relation.RELATED_TYPE, relType)
Ical4Android.log.log(Level.FINE, "Inserting relation", builder.build())
logger.log(Level.FINE, "Inserting relation", builder.build())
batch.add(builder)
}
}
@ -138,7 +137,7 @@ class MyAndroidTask() : AndroidTask(null) {
private fun insertUnknownProperties(batch: MutableList<BatchOperation.CpoBuilder>, idxTask: Int?, uri: Uri) {
for (property in requireNotNull(task).unknownProperties) {
if (property.value.length > UnknownProperty.MAX_UNKNOWN_PROPERTY_SIZE) {
Ical4Android.log.warning("Ignoring unknown property with ${property.value.length} octets (too long)")
logger.warning("Ignoring unknown property with ${property.value.length} octets (too long)")
return
}
@ -146,8 +145,8 @@ class MyAndroidTask() : AndroidTask(null) {
.withTaskId(TaskContract.Properties.TASK_ID, idxTask)
.withValue(TaskContract.Properties.MIMETYPE, UnknownProperty.CONTENT_ITEM_TYPE)
.withValue(UNKNOWN_PROPERTY_DATA, UnknownProperty.toJsonString(property))
Ical4Android.log.log(Level.FINE, "Inserting unknown property", builder.build())
logger.log(Level.FINE, "Inserting unknown property", builder.build())
batch.add(builder)
}
}
}
}

@ -1,13 +1,19 @@
package org.tasks.caldav.extensions
import at.bitfire.ical4android.Task.Companion.tasksFromReader
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.caldav.iCalendar.Companion.applyLocal
import org.tasks.data.createDueDate
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME
import org.tasks.data.entity.Alarm.Companion.TYPE_REL_END
import org.tasks.data.entity.Alarm.Companion.TYPE_REL_START
import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task
import org.tasks.time.DateTime
import org.tasks.time.DateTime.Companion.UTC
import java.io.ByteArrayInputStream
import java.util.concurrent.TimeUnit.HOURS
import java.util.concurrent.TimeUnit.MINUTES
@ -111,4 +117,34 @@ class VAlarmTests {
)
assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
}
}
@Test
fun serializeAlarms() {
val remoteTask = at.bitfire.ical4android.Task()
remoteTask.applyLocal(
CaldavTask(
calendar = "",
),
Task(
dueDate = createDueDate(
Task.URGENCY_SPECIFIC_DAY_TIME,
DateTime(2025, 9, 4, 18, 0, 0).millis
),
),
)
Alarm(time = 0, type = TYPE_REL_END).toVAlarm()?.let { remoteTask.alarms.add(it) }
val os = java.io.ByteArrayOutputStream()
remoteTask.write(os)
val tasks = tasksFromReader(ByteArrayInputStream(os.toByteArray()).reader())
assertEquals(1, tasks.size)
val task = tasks.first()
assertEquals(1, task.alarms.size)
val alarm = task.alarms.first().toAlarm()
assertEquals(TYPE_REL_END, alarm?.type)
assertEquals(0L, alarm?.time)
}
}

@ -27,7 +27,7 @@ google-services = "4.4.3"
grpc = "1.73.0"
hilt = "1.2.0"
horologist = "0.7.15"
ical4android = "2fe63dd"
ical4android = "fcb0311ca7"
jchronic = "0.2.6"
jems = "1.33"
junit-junit = "4.13.2"

Loading…
Cancel
Save