Index: formats/vformats-xml/xml-support.c =================================================================== --- formats/vformats-xml/xml-support.c (revision 1225) +++ formats/vformats-xml/xml-support.c (working copy) @@ -177,6 +177,9 @@ static osync_bool osxml_compare_node(xmlNode *leftnode, xmlNode *rightnode) { osync_trace(TRACE_ENTRY, "%s(%p:%s, %p:%s)", __func__, leftnode, leftnode->name, rightnode, rightnode->name); + + char *left, *right; + if (strcmp((char*)leftnode->name, (char*)rightnode->name)) { osync_trace(TRACE_EXIT, "%s: FALSE: Different Name", __func__); return FALSE; @@ -236,24 +239,58 @@ /* Workaround for kdepim-sync. kdepim-sync always creates a AlarmTrigger with DISPLAY also when DESCRIPTION is empty */ if (!strcmp("Alarm", (char*)rightnode->name) && !strcmp("Alarm",(char*)leftnode->name)) { - char *left = leftcontent; - char *right = rightcontent; + left = leftcontent; + right = rightcontent; + if (strstr(leftcontent, "DISPLAY")) left += 7; if (strstr(rightcontent, "DISPLAY")) right += 7; - osync_trace(TRACE_SENSITIVE, "left: %s right: %s", left, right); + osync_trace(TRACE_SENSITIVE, "Alarm Display Workaround - left: %s right: %s", left, right); if (!strcmp(left, right)) { osync_trace(TRACE_INTERNAL, "KDEPIM-SYNC (ALARM trigger) workaround active!"); g_free(rightcontent); goto next; } } + + /* Workaround for comparing UTC and localtime stamps. */ + if ((!strcmp("DateStarted", (char*)rightnode->name) && !strcmp("DateStarted", (char*)leftnode->name)) + || (!strcmp("DateEnd", (char*)rightnode->name) && !strcmp("DateEnd", (char*)leftnode->name))) { + + int ret = 0; + + if (!osync_time_isutc(leftcontent)) { + left = osync_time_vtime2utc(leftcontent); + } else { + left = g_strdup(leftcontent); + } + + if (!osync_time_isutc(rightcontent)) { + right = osync_time_vtime2utc(rightcontent); + } else { + right = g_strdup(rightcontent); + } + + osync_trace(TRACE_SENSITIVE, "localtime2utc conversion - left: %s right: %s", left, right); + + ret = strcmp(left, right); + + g_free(left); + g_free(right); + + if (!ret) { + osync_trace(TRACE_INTERNAL, "localtime2utc workaround active!"); + g_free(rightcontent); + goto next; + } + } g_free(rightcontent); + } while ((rightnode = rightnode->next)); osync_trace(TRACE_EXIT, "%s: Could not match one", __func__); g_free(leftcontent);