Hello!

I think I have figured out a way to track and merge changes made to the
Synthesis version of syncclient_sample_config.xml and our SyncEvolution
copy:
http://article.gmane.org/gmane.comp.mobile.syncevolution/14

I went through one round of reviewing current changes. Attached are the
individual diffs, including explanation. Most of those are just for your
information, but some might be worthwhile including in your copy:

0003-XML-config-fix-incorrect-datatype-name-check.patch
0008-XML-config-added-several-vCard-3.0-Evolution-specif.patch (perhaps
being more restrictive about not enabling 3.0 properties in vCard 2.1)
0009-XML-config-enhanced-calendar-data-formats.patch
0010-XML-config-be-conservative-about-encoding-of-EXDATE.patch

I think the sample config should be as comprehensive as possible, i.e.,
include all MIME properties that we know of, even if there is no single
client which supports them all. In that sense it is more like the
configuration for a server and might eventually be merged with that.

A client developer than derives his config by picking those parts of the
profile and field list which are required for his client. Which reminds
me: I still need to remove the X-SYNTHESIS extensions from our config,
because we don't support them in SyncEvolution ;-)

-- 
Best Regards, Patrick Ohly

The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.

>From 566251888cf7c0aabbdd8a91d0ead287e2cee71b Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 09:52:32 +0200
Subject: [PATCH 03/11] XML config: fix incorrect datatype name check

The VCALENDAR_INCOMING_SCRIPT checked for an old vtodoz10 datatype
name which is no longer used in the example config. Must be
vCalendar10.
---
 src/syncclient_sample_config.xml |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 9bdddce..d2c75ee 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -60,7 +60,7 @@
         }
         // - detect alldays in vCalendar 1.0 (0:00-0:00 or 23:59 localtime)
         i = ALLDAYCOUNT(DTSTART,DTEND,TRUE);
-        if (ITEMDATATYPE()=="vtodoz10" && i>0) {
+        if (ITEMDATATYPE()=="vCalendar10" && i>0) {
           // DTSTART and DTEND represent allday event, make them date-only values
           // - convert start to user zone (or floating) so it represents midnight
           DTSTART = CONVERTTOUSERZONE(DTSTART);
-- 
1.6.2

>From a718b8560fecb229c611c8dfa8898c5353a5fd2a Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 10:07:15 +0200
Subject: [PATCH 04/11] XML config: don't encode empty DESCRIPTION in VEVENT/VTODO

The upstream Synthesis config removes a DESCRIPTION if it
is identical with the SUMMARY and then writes an empty DESCRIPTION
property.

SyncEvolution reverts that logic: an empty DESCRIPTION is set
to the SUMMARY. That's more in line with how Evolution works.
Also, libical is unhappy about such empty properties, so don't encode
them if empty (which shouldn't happen, though).
---
 src/syncclient_sample_config.xml |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index d2c75ee..01550db 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -48,8 +48,8 @@
       // make sure we have all trailing and leading spaces eliminated
       DESCRIPTION=NORMALIZED(DESCRIPTION);
       SUMMARY=NORMALIZED(SUMMARY);
-      // eliminate description that is the same as summary
-      if (DESCRIPTION==SUMMARY) DESCRIPTION=EMPTY;
+      // make sure that we have a DESCRIPTION
+      if (DESCRIPTION==EMPTY) DESCRIPTION=SUMMARY;
       // calendar or todo
       if (ISEVENT) {
         // VEVENT
@@ -136,6 +136,8 @@
       // make sure we have at least a summary
       if (SUMMARY==EMPTY) SUMMARY=SUBSTR(DESCRIPTION,0,32); // derive from description
       if (SUMMARY==EMPTY) SUMMARY="unnamed"; // in case description is empty as well
+      // make sure that we have a DESCRIPTION
+      if (DESCRIPTION==EMPTY) DESCRIPTION=SUMMARY;
       // do NOT send duration (some servers crash when doing so)
       DURATION = UNASSIGNED;
       // shape alarm
@@ -530,7 +532,10 @@
             <value field="SUMMARY"/>
           </property>
 
-          <property name="DESCRIPTION" mandatory="yes">
+          <!-- DESCRIPTION is an optional property and libical does not like
+               empty properties, so suppress it here. However, in the scripts
+               we ensure that the DESCRIPTION field should never be empty. -->
+          <property name="DESCRIPTION" suppressempty="yes" mandatory="no">
             <value field="DESCRIPTION"/>
           </property>
 
@@ -738,7 +743,10 @@
             <value field="SUMMARY"/>
           </property>
 
-          <property name="DESCRIPTION" mandatory="yes">
+          <!-- DESCRIPTION is an optional property and libical does not like
+               empty properties, so suppress it here. However, in the scripts
+               we ensure that the DESCRIPTION field should never be empty. -->
+          <property name="DESCRIPTION" suppressempty="yes" mandatory="no">
             <value field="DESCRIPTION"/>
           </property>
 
-- 
1.6.2

>From b01f5cc07d59167671a54b5157ff6bb9888e3d36 Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 10:11:24 +0200
Subject: [PATCH 05/11] XML config: avoid empty LOCATION in VEVENT

libical is unhappy about empty properties, so don't force generating
an empty LOCATION.
---
 src/syncclient_sample_config.xml |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 01550db..908f2f8 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -539,7 +539,7 @@
             <value field="DESCRIPTION"/>
           </property>
 
-          <property name="LOCATION" mandatory="no">
+          <property name="LOCATION" suppressempty="yes" mandatory="no">
             <value field="LOCATION"/>
           </property>
 
@@ -750,7 +750,7 @@
             <value field="DESCRIPTION"/>
           </property>
 
-          <property name="LOCATION" mandatory="no">
+          <property name="LOCATION" suppressempty="yes" mandatory="no">
             <value field="LOCATION"/>
           </property>
 
-- 
1.6.2

>From cac58f1348b384c8b4b5ba9fab7f6a5adb5f90db Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 10:23:19 +0200
Subject: [PATCH 06/11] XML config: use NICKNAME also in vCard 2.1

It is not part of vCard 2.1, but some peers (like the Funambol server)
accept it anyway.
---
 src/syncclient_sample_config.xml |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 908f2f8..92d92bf 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -256,7 +256,10 @@
           <value field="FN"/>
         </property>
 
-        <property name="NICKNAME" onlyformode="standard">
+        <!-- onlyformode="standard": not part of vCard 2.1, but some
+             peers (like the Funambol server) accept it anyway in
+             vCard 2.1 -->
+        <property name="NICKNAME">
           <value field="NICKNAME"/>
         </property>
 
-- 
1.6.2

>From aeb99299f4c7982dd04b56920a61aa29b132a2e1 Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 10:55:25 +0200
Subject: [PATCH 07/11] XML config: don't enforce http:// prefix in vCard 2.1 URL

The upstream config declares the WEB field (maps to URL) as "url",
which has the effect that the http:// prefix is added if none
is present.

Evolution does not enforce a particular format nor does it depend on
one. If a user decides to enter a plain string, that's how it should
be synchronized => turned WEB into normal string field.
---
 src/syncclient_sample_config.xml |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 92d92bf..9cb55a9 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -202,7 +202,7 @@
       <field name="EMAIL_ID"    array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
 
       <!-- web addresses -->
-      <field name="WEB"         array="yes" type="url" compare="conflict"/>
+      <field name="WEB"         array="yes" type="string" compare="conflict"/>
       <field name="WEB_FLAGS"   array="yes" type="integer"   compare="conflict"/> <!-- offset 0 -->
       <field name="WEB_LABEL"   array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
       <field name="WEB_ID"      array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
-- 
1.6.2

>From a083114f1bc6c08596d22204431b359273cb928b Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 10:46:26 +0200
Subject: [PATCH 08/11] XML config: added several vCard 3.0/Evolution specific properties

As with NICKNAME, all of the vCard 3.0 enhancements are also used
with vCard 2.1 because peers tend to accept them.
---
 src/syncclient_sample_config.xml |  138 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 9cb55a9..e951ae0 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -178,6 +178,7 @@
       <field name="TITLE" type="string" compare="conflict" merge="fillempty"/>
 
       <field name="FN" type="string" compare="conflict" merge="fillempty"/>
+      <field name="FILE-AS" type="string" compare="conflict" merge="fillempty"/>
 
       <!-- categories and classification -->
       <field name="CATEGORIES" array="yes" type="string" compare="conflict"/>
@@ -185,21 +186,27 @@
       <!-- organisation -->
       <field name="ORG_NAME" type="string" compare="slowsync" merge="fillempty"/>
       <field name="ORG_DIVISION" type="string" compare="conflict" merge="fillempty"/>
+      <field name="ORG_OFFICE" type="string" compare="conflict" merge="fillempty"/>
+      <field name="ORG_TEAM" type="string" compare="conflict" merge="fillempty"/>
+      <field name="ROLE" type="string" compare="conflict" merge="fillempty"/>
 
-      <!-- birthday -->
+      <!-- birthday and anniversary (not necessarily the same) -->
       <field name="BDAY" type="date" compare="conflict" merge="fillempty"/>
+      <field name="ANNIVERSARY" type="date" compare="conflict" merge="fillempty"/>
 
       <!-- telephone numbers -->
       <field name="TEL"         array="yes" type="telephone" compare="conflict"/>
       <field name="TEL_FLAGS"   array="yes" type="integer"   compare="conflict"/> <!-- offset 0 -->
       <field name="TEL_LABEL"   array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
       <field name="TEL_ID"      array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
+      <field name="TEL_SLOT"    array="yes" type="integer"   compare="never"/>    <!-- offset 3 -->
 
       <!-- emails -->
       <field name="EMAIL"       array="yes" type="multiline" compare="conflict"/>
       <field name="EMAIL_FLAGS" array="yes" type="integer"   compare="conflict"/> <!-- offset 0 -->
       <field name="EMAIL_LABEL" array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
       <field name="EMAIL_ID"    array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
+      <field name="EMAIL_SLOT"  array="yes" type="integer"   compare="never"/>    <!-- offset 3 -->
 
       <!-- web addresses -->
       <field name="WEB"         array="yes" type="string" compare="conflict"/>
@@ -207,6 +214,38 @@
       <field name="WEB_LABEL"   array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
       <field name="WEB_ID"      array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
 
+      <!-- would be nicer to have as part of WEB, but parser/encoder does not support mapping
+           with more than one property per field -->
+      <field name="CALURI"      array="yes" type="string" compare="conflict"/>
+      <field name="FBURL"       array="yes" type="string" compare="conflict"/>
+      <field name="BLOGURL"     array="yes" type="string" compare="conflict"/>
+      <field name="VIDEOURL"    array="yes" type="string" compare="conflict"/>
+
+      <!-- related persons: should be turned into array, like WEB and CALURI/FBURL -->
+      <field name="MANAGER"    type="string" compare="conflict"/>
+      <field name="ASSISTANT"  type="string" compare="conflict"/>
+      <field name="SPOUSE"     type="string" compare="conflict"/>
+
+      <!-- does this person want HTML mails? Valid values are TRUE/FALSE; a "boolean"
+           type would be useful, maybe add that later. -->
+      <field name="WANTS_HTML"  type="string" compare="conflict"/>
+
+      <!-- chat handles: should be turned into one array, like WEB and CALURI/FBURL -->
+      <field name="AIM_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="AIM_SLOT"          array="yes" type="string" compare="conflict"/>
+      <field name="GADUGADU_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="GADUGADU_SLOT"          array="yes" type="string" compare="conflict"/>
+      <field name="GROUPWISE_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="GROUPWISE_SLOT"          array="yes" type="string" compare="conflict"/>
+      <field name="ICQ_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="ICQ_SLOT"          array="yes" type="string" compare="conflict"/>
+      <field name="JABBER_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="JABBER_SLOT"          array="yes" type="string" compare="conflict"/>
+      <field name="MSN_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="MSN_SLOT"          array="yes" type="string" compare="conflict"/>
+      <field name="YAHOO_HANDLE"        array="yes" type="string" compare="conflict"/>
+      <field name="YAHOO_SLOT"          array="yes" type="string" compare="conflict"/>
+
       <!-- home address -->
       <field name="ADR_STREET"        array="yes" type="multiline" compare="conflict"/>
       <field name="ADR_ADDTL"         array="yes" type="multiline" compare="conflict"/>
@@ -256,6 +295,10 @@
           <value field="FN"/>
         </property>
 
+        <property name="X-EVOLUTION-FILE-AS">
+          <value field="FILE-AS"/>
+        </property>
+
         <!-- onlyformode="standard": not part of vCard 2.1, but some
              peers (like the Funambol server) accept it anyway in
              vCard 2.1 -->
@@ -272,9 +315,15 @@
           <position field="CATEGORIES" repeat="array" increment="1" minshow="0"/>
         </property>
 
-        <property name="ORG" values="2">
+        <property name="ORG" values="4">
           <value index="0" field="ORG_NAME"/>
           <value index="1" field="ORG_DIVISION"/>
+          <value index="2" field="ORG_OFFICE"/>
+          <value index="3" field="ORG_TEAM"/>
+        </property>
+
+        <property name="ROLE">
+          <value field="ROLE"/>
         </property>
 
         <property name="TEL">
@@ -290,11 +339,19 @@
               <enum name="FAX"      value="B5"/>
               <enum name="PAGER"    value="B6"/>
               <enum name="PREF"     value="B7"/>
+              <enum name="CAR"      value="B8"/>
+              <enum name="X-EVOLUTION-CALLBACK" value="B9"/>
+              <enum name="X-EVOLUTION-RADIO" value="B10"/>
+              <enum name="X-EVOLUTION-TELEX" value="B11"/>
+              <enum name="X-EVOLUTION-TTYTDD" value="B12"/>
 
               <enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
               <enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
             </value>
           </parameter>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="TEL_SLOT"/>
+          </parameter>
         </property>
 
         <property name="EMAIL">
@@ -311,6 +368,9 @@
               <enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
             </value>
           </parameter>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="EMAIL_SLOT"/>
+          </parameter>
         </property>
 
         <property name="URL">
@@ -329,6 +389,76 @@
           </parameter>
         </property>
 
+        <property name="CALURI" suppressempty="yes">
+          <value field="CALURI" show="yes"/>
+        </property>
+        <property name="FBURL" suppressempty="yes">
+          <value field="FBURL" show="yes"/>
+        </property>
+        <property name="X-EVOLUTION-BLOG-URL" suppressempty="yes">
+          <value field="BLOGURL" show="yes"/>
+        </property>
+        <property name="X-EVOLUTION-VIDEO-URL" suppressempty="yes">
+          <value field="VIDEOURL" show="yes"/>
+        </property>
+
+        <property name="X-EVOLUTION-MANAGER" suppressempty="yes">
+          <value field="MANAGER" show="yes"/>
+        </property>
+        <property name="X-EVOLUTION-ASSISTANT" suppressempty="yes">
+          <value field="ASSISTANT" show="yes"/>
+        </property>
+        <property name="X-EVOLUTION-SPOUSE" suppressempty="yes">
+          <value field="SPOUSE" show="yes"/>
+        </property>
+
+        <property name="X-MOZILLA-HTML">
+          <value field="WANTS_HTML" show="yes"/>
+        </property>
+
+        <property name="X-AIM" suppressempty="yes">
+          <value field="AIM_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="AIM_SLOT"/>
+          </parameter>
+        </property>
+        <property name="X-GADUGADU" suppressempty="yes">
+          <value field="GADUGADU_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="GADUGADU_SLOT"/>
+          </parameter>
+        </property>
+        <property name="X-GROUPWISE" suppressempty="yes">
+          <value field="GROUPWISE_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="GROUPWISE_SLOT"/>
+          </parameter>
+        </property>
+        <property name="X-ICQ" suppressempty="yes">
+          <value field="ICQ_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="ICQ_SLOT"/>
+          </parameter>
+        </property>
+        <property name="X-JABBER" suppressempty="yes">
+          <value field="JABBER_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="JABBER_SLOT"/>
+          </parameter>
+        </property>
+        <property name="X-MSN" suppressempty="yes">
+          <value field="MSN_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="MSN_SLOT"/>
+          </parameter>
+        </property>
+        <property name="X-YAHOO" suppressempty="yes">
+          <value field="YAHOO_HANDLE"/>
+          <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
+            <value field="YAHOO_SLOT"/>
+          </parameter>
+        </property>
+
         <property name="ADR" values="7">
           <value index="0" field="ADR_POBOX"/>
           <value index="1" field="ADR_ADDTL"/>
@@ -354,6 +484,10 @@
           <value field="BDAY"/>
         </property>
 
+        <property name="X-EVOLUTION-ANNIVERSARY">
+          <value field="ANNIVERSARY"/>
+        </property>
+
         <property name="NOTE" filter="no">
           <value field="NOTE"/>
         </property>
-- 
1.6.2

>From a85d62156d46a36a1c4a18e85ba7e8b234ea2b65 Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 11:05:23 +0200
Subject: [PATCH 09/11] XML config: enhanced calendar data formats

Added URL and X-EVOLUTION-ALARM-ID (both vCalendar 1.0 and iCalendar 2.0)
plus several standard iCalendar 2.0 properties. In contrast to vCard,
SyncEvolution is strict with standard compliance here: none of the
iCalendar 2.0 properties are enabled in vCalendar 1.0.
---
 src/syncclient_sample_config.xml |   46 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index e951ae0..2739c5a 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -535,6 +535,7 @@
       <field name="SUMMARY" type="multiline" compare="always"/>
       <field name="DESCRIPTION" type="multiline" compare="slowsync" merge="lines"/>
       <field name="LOCATION" type="multiline" compare="slowsync" merge="lines"/>
+      <field name="URL" type="url" compare="conflict"/>
 
       <!-- recurrence rule block, fields must be in that order, including
            DTSTART as last field !! -->
@@ -557,6 +558,7 @@
 
       <field name="PRIORITY" type="integer" compare="conflict"/>
       <field name="STATUS" type="integer" compare="conflict" merge="fillempty"/>
+      <field name="PERCENT_COMPLETE" type="integer" compare="conflict"/>
 
       <field name="ALARM_TIME" type="timestamp" compare="conflict"/>
       <field name="ALARM_SNOOZE" type="string" compare="conflict"/>
@@ -564,6 +566,7 @@
       <field name="ALARM_MSG" type="string" compare="conflict"/>
       <field name="ALARM_ACTION" type="string" compare="conflict"/>
       <field name="ALARM_REL" type="integer" compare="never"/>
+      <field name="ALARM_UID" type="string" compare="conflict"/>
 
       <!-- non-standard -->
       <field name="PARENT_UID" type="string" compare="never"/>
@@ -577,6 +580,10 @@
       <field name="ATTENDEES" array="yes" type="string" compare="never"/>
       <field name="ATTENDEE_CNS" array="yes" type="string" compare="never"/>
       <field name="ATTENDEE_PARTSTATS" array="yes" type="integer" compare="never"/>
+      <field name="ATTENDEE_ROLE" array="yes" type="integer" compare="never"/>
+      <field name="ATTENDEE_RSVP" array="yes" type="integer" compare="never"/>
+      <field name="ATTENDEE_LANG" array="yes" type="string" compare="never"/>
+      <field name="ATTENDEE_CUTYPE" array="yes" type="integer" compare="never"/>
       <field name="ORGANIZER" array="no" type="string" compare="never"/>
       <field name="ORGANIZER_CN" array="no" type="string" compare="never"/>
 
@@ -680,6 +687,10 @@
             <value field="LOCATION"/>
           </property>
 
+          <property name="URL" suppressempty="yes" mandatory="no">
+            <value field="URL"/>
+          </property>
+
           <property name="DTSTART" suppressempty="yes" delayedparsing="1">
             <value field="DTSTART" conversion="autodate"/>
             <parameter onlyformode="standard" name="TZID" default="no" show="yes">
@@ -749,6 +760,9 @@
             </value>
           </property>
 
+          <property name="PERCENT-COMPLETE" onlyformode="standard" suppressempty="yes">
+            <value field="PERCENT_COMPLETE"/>
+          </property>          
 
           <!-- AALARM and DALARM both use the same fields -->
           <property name="AALARM" onlyformode="old" values="4" suppressempty="yes">
@@ -787,6 +801,9 @@
             <property name="REPEAT" suppressempty="yes">
               <value field="ALARM_REPEAT"/>
             </property>
+            <property name="X-EVOLUTION-ALARM-UID" suppressempty="yes">
+              <value field="ALARM_UID"/>
+            </property>
           </subprofile>
 
           <property onlyformode="old" name="RELATED-TO" suppressempty="yes">
@@ -991,6 +1008,32 @@
                 <enum name="DELEGATED"      value="6"/>
               </value>
             </parameter>
+            <parameter name="ROLE" default="no" show="yes">
+              <value field="ATTENDEE_ROLE">
+                <enum name="CHAIR"            value="1"/>
+                <enum name="REQ-PARTICIPANT"  value="2"/>
+                <enum name="OPT-PARTICIPANT"  value="3"/>
+                <enum name="NON-PARTICIPANT"  value="4"/>
+              </value>
+            </parameter>
+            <parameter name="RSVP" default="no" show="yes">
+              <value field="ATTENDEE_RSVP">
+                <enum name="TRUE"             value="1"/>
+                <enum name="FALSE"            value="0"/>
+              </value>
+            </parameter>
+            <parameter name="LANGUAGE" show="yes">
+              <value field="ATTENDEE_LANG"/>
+            </parameter>
+            <parameter name="CUTYPE" default="no" show="yes">
+              <value field="ATTENDEE_CUTYPE">
+                <enum name="INDIVIDUAL"  value="1"/>
+                <enum name="GROUP"       value="2"/>
+                <enum name="RESOURCE"    value="3"/>
+                <enum name="ROOM"        value="4"/>
+                <enum name="UNKNOWN"     value="5"/>
+              </value>
+            </parameter>
           </property>
 
           <property name="ORGANIZER" suppressempty="yes" onlyformode="standard">
@@ -1038,6 +1081,9 @@
             <property name="REPEAT" suppressempty="yes">
               <value field="ALARM_REPEAT"/>
             </property>
+            <property name="X-EVOLUTION-ALARM-UID" suppressempty="yes">
+              <value field="ALARM_UID"/>
+            </property>
           </subprofile>
 
         </subprofile>
-- 
1.6.2

>From 961e529d798833caae145029859a9559ff8a0024 Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 11:08:47 +0200
Subject: [PATCH 10/11] XML config: be conservative about encoding of EXDATEs

Multiple EXDATEs in the same property are encoded differently
in iCalendar 2.0 and vCalendar 1.0. ScheduleWorld had a problem
with this (bugzilla.moblin.org #2226) for a while. As other
peers might have similar issues, we accept all kinds of
encodings when parsing items and always generate several EXDATE
properties with one value each when encoding.
---
 src/syncclient_sample_config.xml |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 2739c5a..6f51d1b 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -940,7 +940,11 @@
             </parameter>
           </property>
 
-          <property name="EXDATE" values="list" suppressempty="yes" onlyformode="standard" delayedparsing="1" valueseparator="," altvalueseparator=";">
+          <!-- ScheduleWorld has a problem (bugzilla.moblin.org #2226)
+               with the EXDATE:value1,value2 format (correct in iCalendar 2.0):
+               as a workaround, accept all valid formats plus ; but
+               generate separate properties with one value each. -->
+          <property name="EXDATE" values="expandedlist" suppressempty="yes" onlyformode="standard" delayedparsing="1" valueseparator="," altvalueseparator=";">
             <value field="EXDATES"/>
             <position field="EXDATES" repeat="array" increment="1" minshow="0"/>
             <parameter name="TZID" default="no" show="yes">
-- 
1.6.2

>From b5150b45eb212b031731609fe688f2d467b5ea48 Mon Sep 17 00:00:00 2001
From: Patrick Ohly <[email protected]>
Date: Tue, 23 Jun 2009 11:14:01 +0200
Subject: [PATCH 11/11] XML config: keep alarm times as they are

The upstream config massages the (possibly relative) alarm times
so that they are always absolute on the client (?). In Evolution
we don't need and don't want this, as Evolution is able to handle
all kinds of alarm specifications itself, so removing these script
instructions.
---
 src/syncclient_sample_config.xml |   20 --------------------
 1 files changed, 0 insertions(+), 20 deletions(-)

diff --git a/src/syncclient_sample_config.xml b/src/syncclient_sample_config.xml
index 6f51d1b..6c89dc5 100644
--- a/src/syncclient_sample_config.xml
+++ b/src/syncclient_sample_config.xml
@@ -96,18 +96,6 @@
         	DUE = DATEONLY(DUE);
         }
       }
-      // Common alarm handling
-      // - handle relative alarm time (as possible with VALARM TRIGGER)
-      if (ISDURATION(ALARM_TIME)) {
-        if (ALARM_REL==2)
-          ALARM_TIME = DTEND+ALARM_TIME; // relative to end
-        else {
-          if (ISEVENT)
-            ALARM_TIME = DTSTART+ALARM_TIME; // relative to start for events
-          else
-            ALARM_TIME = DUE+ALARM_TIME; // relative to due for todos
-        }
-      }
     ]]></macro>
 
 
@@ -144,14 +132,6 @@
       if (ALARM_TIME!=EMPTY) {
         if (ITEMDATATYPE()=="iCalendar20") {
           if (ALARM_ACTION==EMPTY) ALARM_ACTION = "AUDIO";
-          ALARM_TIME = CONVERTTOUSERZONE(ALARM_TIME,TRUE); // unfloat into user (system) zone, in case it is floating
-          ALARM_TIME = CONVERTTOZONE(ALARM_TIME,"UTC"); // must always be UTC by iCalendar 2.0 specs
-          // send as duration if we have non-empty non-date DTSTART
-          if (DTSTART!=EMPTY && !ISDATEONLY(DTSTART)) {
-            // make a duration (unfloat DTSTART into system zone in case it is floating first!)
-            ALARM_TIME = ALARM_TIME-CONVERTTOZONE(CONVERTTOUSERZONE(DTSTART,TRUE),"UTC");
-            ALARM_REL = 1; // relative to start
-          }
         }
         else {
           if (ALARM_MSG==EMPTY) ALARM_MSG="alarm";
-- 
1.6.2

_______________________________________________
os-libsynthesis mailing list
[email protected]
http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis

Reply via email to