Tasks sync not working with Kolab server
konradrenner last edited by rfc2822
Every time when the app wants to sync with my Kolab account, it fails because of the following problem (I don't know if the sync is the problem, or if something is already stored not correct on the device), I am using the latest versions of DAVDroid and openTasks from Google Play, sync of Contacts and Calendar is working as expected:
SYNCHRONIZATION INFO Synchronization phase: 4 Account name: KolabNow Tasks Authority: org.dmfs.tasks STACK TRACE: java.text.ParseException: Unparseable date: "INTERVAL=1;BYMONTH=1;BYDAY=1FR" (at offset 0) at java.text.DateFormat.parse(DateFormat.java:579) at net.fortuna.ical4j.model.DateTime.setTime(DateTime.java:414) at net.fortuna.ical4j.model.DateTime.<init>(DateTime.java:344) at net.fortuna.ical4j.model.DateList.<init>(DateList.java:134) at at.bitfire.ical4android.DateUtils.androidStringToRecurrenceSet(DateUtils.java:170) at at.bitfire.ical4android.AndroidTask.populateTask(AndroidTask.java:215) at at.bitfire.davdroid.resource.LocalTask.populateTask(LocalTask.java:64) at at.bitfire.ical4android.AndroidTask.getTask(AndroidTask.java:85) [wrapped] at.bitfire.ical4android.CalendarStorageException: Couldn't parse locally stored event at.bitfire.ical4android.CalendarStorageException: Couldn't parse locally stored event at at.bitfire.ical4android.AndroidTask.getTask(AndroidTask.java:92) at at.bitfire.davdroid.resource.LocalTaskList.getDirty(LocalTaskList.java:93) at at.bitfire.davdroid.syncadapter.SyncManager.uploadDirty(SyncManager.java:320) at at.bitfire.davdroid.syncadapter.SyncManager.performSync(SyncManager.java:159) at at.bitfire.davdroid.syncadapter.TasksSyncAdapterService$SyncAdapter.onPerformSync(TasksSyncAdapterService.java:63) at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259) SOFTWARE INFORMATION DAVdroid version: 0.9.1.3 (87) Sat Jan 02 11:24:54 MEZ 2016 Installed from: com.android.vending JB Workaround installed: no CONFIGURATION System-wide synchronization: automatically Account: email@example.com Address book sync. interval: — Calendar sync. interval: 1440 min OpenTasks sync. interval: — Account: KolabNow Kontakte Address book sync. interval: 1440 min Calendar sync. interval: — OpenTasks sync. interval: — Account: KolabNow Tasks Address book sync. interval: — Calendar sync. interval: — OpenTasks sync. interval: 1440 min SYSTEM INFORMATION Android version: 5.1.1 (LMY48T) Device: LGE Nexus 4 (mako)
@konradrenner Seems like the VTODO is wrong (e.g., RDATE instead of RRULE).
@rfc2822 is it a problem in the app or on the server side?
@konradrenner Seems like the VTODO is wrong, so at server (or user) side.
@rfc2822 but it occurs when an edited task gets uploaded... Not when a task is downloaded
[wrapped] at.bitfire.ical4android.CalendarStorageException: Couldn't parse locally stored event
Looks like a locally stored task is invalid. The lines around
AndroidTask.java:215(DAVdroid 0.9.1.3) are:
String exDate = values.getAsString(Tasks.EXDATE); if (exDate != null) task.getExDates().add((ExDate)DateUtils.androidStringToRecurrenceSet(exDate, ExDate.class, allDay));
So there seems to be a value that can't be parsed (
INTERVAL=1;BYMONTH=1;BYDAY=1FR) in the
The question is: How could the invalid value find its way into the
EXDATEcolumn? Because it's a dirty (not a new) contact you're uploading, I guess that the invalid value has been downloaded from the server before, and then written into the
This is why I guess the VTODO is wrong, and has been sent by the server incorrectly. However, I'm afraid that validation of my theory will require verbose logs of the initial VTODO download, comprising the VTODO content.
if (task.rRule != null) builder.withValue(Tasks.EXDATE, task.rRule.getValue());
Seems like the rRule is written into EXDATE… so this is an ical4android problem and will be fixed in next DAVdroid release.
Thanks for the report.
@rfc2822 thanks for fixing it! Can't wait for it
@rfc2822 do I have to delete local data and resync after the Problem is fixed or will it work without deleting an readding the account?
@konradrenner In the meanwhile, it should be enough to delete the task on your mobile phone and then sync. Then create the task again on the mobile phone.