44eed81bc28d163687bf450ba9c056d8122fab34
[platform/upstream/syncevolution.git] / src / syncclient_sample_config.xml
1 <?xml version="1.0"?>
2 <!-- SYNTHESIS SYNCML CLIENT Version 3.2 Configuration file -->
3
4 <sysync_config version="1.0">
5
6   <configvar name="logpath" value="$(defout_path)"/>
7
8   <!-- this string is output to every session debug logfile to identify the config in use -->
9   <configidstring>SyncEvolution client config</configidstring>
10
11   <!-- information about maximum supported message and object size (in bytes) -->
12   <maxmsgsize/>
13   <maxobjsize/>
14
15   <!-- information for DevInf -->
16   <model/>
17   <manufacturer/>
18   <hardwareversion/>
19   <firmwareversion/>
20   <devicetype/>
21   <configdate/>
22
23   <debug/>
24
25   <transport type="xpt">
26     <!-- allow HTTP 1.1 kepp-alive (multiple request-answer-exchanges in single TCP connection) -->
27     <keepconnection>true</keepconnection>
28   </transport>
29
30
31   <scripting>
32     <looptimeout>5</looptimeout>
33
34     <function><![CDATA[
35       // create a UID
36       string newuid() {
37         return "syuid" + NUMFORMAT(RANDOM(1000000),6,"0") + "." + (string)MILLISECONDS(NOW());
38       }
39     ]]></function>
40
41
42                 <!-- define script macros for scripts that are used by both vCalendar 1.0 and iCalendar 2.0 -->
43     
44     <macro name="VCALENDAR_INCOMING_SCRIPT"><![CDATA[
45       STRING MATCHES[];
46       STRING CAT,CN,EM;
47       INTEGER i;
48       // make sure we have all trailing and leading spaces eliminated
49       DESCRIPTION=NORMALIZED(DESCRIPTION);
50       SUMMARY=NORMALIZED(SUMMARY);
51       // make sure that we have a DESCRIPTION
52       if (DESCRIPTION==EMPTY) DESCRIPTION=SUMMARY;
53       // calendar or todo
54       if (ISEVENT) {
55         // VEVENT
56         // - handle duration cases 
57         if (ISDURATION(DURATION)) {
58           if (DTEND==EMPTY) DTEND = DTSTART + DURATION;
59           if (DTSTART==EMPTY) DTSTART = DTEND - DURATION;
60         }
61         // - detect alldays in vCalendar 1.0 (0:00-0:00 or 23:59 localtime)
62         i = ALLDAYCOUNT(DTSTART,DTEND,TRUE);
63         if (ITEMDATATYPE()=="vCalendar10" && i>0) {
64           // DTSTART and DTEND represent allday event, make them date-only values
65           // - convert start to user zone (or floating) so it represents midnight
66           DTSTART = CONVERTTOUSERZONE(DTSTART);
67           MAKEALLDAY(DTSTART,DTEND,i);
68         }
69         // - shape attendees (and make sure ATTENDEES[] is assigned even for empty email addresses)
70         i=0;
71         while(i<SIZE(ATTENDEES) || i<SIZE(ATTENDEE_CNS)) {
72           PARSEEMAILSPEC(ATTENDEES[i], CN, EM);
73           ATTENDEES[i] = EM; // pure email address
74           // in case we have no specific common name, use the one extracted from the email
75           // This catches the vCalendar 1.0 case and eventually ill-formed iCalendar 2.0 as well
76           if (ATTENDEE_CNS[i]==EMPTY)
77             ATTENDEE_CNS[i]=CN;
78           // default participation status to needs-action
79           if (ATTENDEE_PARTSTATS[i]==EMPTY)
80             ATTENDEE_PARTSTATS[i]=1; // 1=needs action
81           i=i+1;
82         }
83         // - shape organizer
84         PARSEEMAILSPEC(ORGANIZER, CN, EM);
85         ORGANIZER = EM; // pure email address
86         if (ORGANIZER_CN==EMPTY)
87           ORGANIZER_CN=CN;
88       }
89       else {
90         // VTODO
91         // - make sure we have at least a summary
92         if (SUMMARY==EMPTY) SUMMARY=DESCRIPTION; // use description if we don't have a summary
93         if (SUMMARY==EMPTY) SUMMARY="unnamed"; // set dummy summary if we still don't have one
94         // due shaping for non-iCalendar 2.0
95         if (ITEMDATATYPE()=="vCalendar10" && ALLDAYCOUNT(DUE,DUE,TRUE,TRUE)>0) {
96                 DUE = DATEONLY(DUE);
97         }
98       }
99       // a workaround for funambol: adding 'action' for 'alarm'
100       if (ITEMDATATYPE()=="iCalendar20") {
101         if (ALARM_TIME!=EMPTY && ALARM_ACTION==EMPTY) {
102             ALARM_ACTION = "DISPLAY";
103         }
104       }
105     ]]></macro>
106
107
108     <macro name="VCALENDAR_OUTGOING_SCRIPT"><![CDATA[
109       // set UTC time of generation for iCalendar 2.0 DTSTAMP
110       DGENERATED = NOW();
111       // make sure we have all trailing and leading spaces eliminated
112       DESCRIPTION=NORMALIZED(DESCRIPTION);
113       SUMMARY=NORMALIZED(SUMMARY);
114       if (ISEVENT) {
115         // VEVENT
116         // - combine attendee email address and common name into single string for vCalendar 1.0
117         if (ITEMDATATYPE()=="vCalendar10") {
118           i=0;
119           while(i<SIZE(ATTENDEES)) {
120             ATTENDEES[i] = MAKEEMAILSPEC(ATTENDEE_CNS[i], ATTENDEES[i]);
121             i=i+1;
122           }
123           ORGANIZER = MAKEEMAILSPEC(ORGANIZER_CN, ORGANIZER);
124         }
125       }
126       else {
127         // VTODO
128         // - Nothing special so far
129       }
130       // make sure we have at least a summary
131       if (SUMMARY==EMPTY) SUMMARY=SUBSTR(DESCRIPTION,0,32); // derive from description
132       if (SUMMARY==EMPTY) SUMMARY="unnamed"; // in case description is empty as well
133       // make sure that we have a DESCRIPTION
134       if (DESCRIPTION==EMPTY) DESCRIPTION=SUMMARY;
135       // do NOT send duration (some servers crash when doing so)
136       DURATION = UNASSIGNED;
137       // shape alarm
138       if (ALARM_TIME!=EMPTY) {
139         if (ITEMDATATYPE()=="iCalendar20") {
140           if (ALARM_ACTION==EMPTY) ALARM_ACTION = "AUDIO";
141         }
142         else {
143           if (ALARM_MSG==EMPTY) ALARM_MSG="alarm";
144         }
145       }
146     ]]></macro>
147
148   </scripting>
149
150
151   <datatypes>
152
153     <!-- list of internal fields representing vCard data -->
154     <fieldlist name="contacts">
155       <field name="REV" type="timestamp" compare="never" age="yes"/>
156
157       <!-- Name elements -->
158       <field name="N_LAST" type="string" compare="always"/>
159       <field name="N_FIRST" type="string" compare="always"/>
160       <field name="N_MIDDLE" type="string" compare="always"/>
161       <field name="N_PREFIX" type="string" compare="conflict"/>
162       <field name="N_SUFFIX" type="string" compare="conflict"/>
163       <field name="NICKNAME" type="string" compare="conflict"/>
164       <field name="TITLE" type="string" compare="conflict" merge="fillempty"/>
165
166       <field name="FN" type="string" compare="conflict" merge="fillempty"/>
167       <field name="FILE-AS" type="string" compare="conflict" merge="fillempty"/>
168
169       <!-- categories and classification -->
170       <field name="CATEGORIES" array="yes" type="string" compare="conflict"/>
171
172       <!-- organisation -->
173       <field name="ORG_NAME" type="string" compare="slowsync" merge="fillempty"/>
174       <field name="ORG_DIVISION" type="string" compare="conflict" merge="fillempty"/>
175       <field name="ORG_OFFICE" type="string" compare="conflict" merge="fillempty"/>
176       <field name="ORG_TEAM" type="string" compare="conflict" merge="fillempty"/>
177       <field name="ROLE" type="string" compare="conflict" merge="fillempty"/>
178
179       <!-- birthday and anniversary (not necessarily the same) -->
180       <field name="BDAY" type="date" compare="conflict" merge="fillempty"/>
181       <field name="ANNIVERSARY" type="date" compare="conflict" merge="fillempty"/>
182
183       <!-- telephone numbers -->
184       <field name="TEL"         array="yes" type="telephone" compare="conflict"/>
185       <field name="TEL_FLAGS"   array="yes" type="integer"   compare="conflict"/> <!-- offset 0 -->
186       <field name="TEL_LABEL"   array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
187       <field name="TEL_ID"      array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
188       <field name="TEL_SLOT"    array="yes" type="integer"   compare="never"/>    <!-- offset 3 -->
189
190       <!-- emails -->
191       <field name="EMAIL"       array="yes" type="multiline" compare="conflict"/>
192       <field name="EMAIL_FLAGS" array="yes" type="integer"   compare="conflict"/> <!-- offset 0 -->
193       <field name="EMAIL_LABEL" array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
194       <field name="EMAIL_ID"    array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
195       <field name="EMAIL_SLOT"  array="yes" type="integer"   compare="never"/>    <!-- offset 3 -->
196
197       <!-- web addresses -->
198       <field name="WEB"         array="yes" type="string" compare="conflict"/>
199       <field name="WEB_FLAGS"   array="yes" type="integer"   compare="conflict"/> <!-- offset 0 -->
200       <field name="WEB_LABEL"   array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
201       <field name="WEB_ID"      array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
202
203       <!-- would be nicer to have as part of WEB, but parser/encoder does not support mapping
204            with more than one property per field -->
205       <field name="CALURI"      array="yes" type="string" compare="conflict"/>
206       <field name="FBURL"       array="yes" type="string" compare="conflict"/>
207       <field name="BLOGURL"     array="yes" type="string" compare="conflict"/>
208       <field name="VIDEOURL"    array="yes" type="string" compare="conflict"/>
209
210       <!-- related persons: should be turned into array, like WEB and CALURI/FBURL -->
211       <field name="MANAGER"    type="string" compare="conflict"/>
212       <field name="ASSISTANT"  type="string" compare="conflict"/>
213       <field name="SPOUSE"     type="string" compare="conflict"/>
214
215       <!-- does this person want HTML mails? Valid values are TRUE/FALSE; a "boolean"
216            type would be useful, maybe add that later. -->
217       <field name="WANTS_HTML"  type="string" compare="conflict"/>
218
219       <!-- chat handles: should be turned into one array, like WEB and CALURI/FBURL -->
220       <field name="AIM_HANDLE"        array="yes" type="string" compare="conflict"/>
221       <field name="AIM_SLOT"          array="yes" type="string" compare="conflict"/>
222       <field name="GADUGADU_HANDLE"        array="yes" type="string" compare="conflict"/>
223       <field name="GADUGADU_SLOT"          array="yes" type="string" compare="conflict"/>
224       <field name="GROUPWISE_HANDLE"        array="yes" type="string" compare="conflict"/>
225       <field name="GROUPWISE_SLOT"          array="yes" type="string" compare="conflict"/>
226       <field name="ICQ_HANDLE"        array="yes" type="string" compare="conflict"/>
227       <field name="ICQ_SLOT"          array="yes" type="string" compare="conflict"/>
228       <field name="JABBER_HANDLE"        array="yes" type="string" compare="conflict"/>
229       <field name="JABBER_SLOT"          array="yes" type="string" compare="conflict"/>
230       <field name="MSN_HANDLE"        array="yes" type="string" compare="conflict"/>
231       <field name="MSN_SLOT"          array="yes" type="string" compare="conflict"/>
232       <field name="YAHOO_HANDLE"        array="yes" type="string" compare="conflict"/>
233       <field name="YAHOO_SLOT"          array="yes" type="string" compare="conflict"/>
234
235       <!-- home address -->
236       <field name="ADR_STREET"        array="yes" type="multiline" compare="conflict"/>
237       <field name="ADR_ADDTL"         array="yes" type="multiline" compare="conflict"/>
238       <field name="ADR_STREET_FLAGS"  array="yes" type="integer"   compare="conflict"/> <!-- offset 0 (from ADR_STREET_FLAGS) -->
239       <field name="ADR_STREET_LABEL"  array="yes" type="string"    compare="conflict"/> <!-- offset 1 -->
240       <field name="ADR_STREET_ID"     array="yes" type="integer"   compare="conflict"/> <!-- offset 2 -->
241       <field name="ADR_POBOX"         array="yes" type="multiline" compare="conflict"/>
242       <field name="ADR_CITY"          array="yes" type="multiline" compare="conflict"/>
243       <field name="ADR_REG"           array="yes" type="multiline" compare="conflict"/>
244       <field name="ADR_ZIP"           array="yes" type="multiline" compare="conflict"/>
245       <field name="ADR_COUNTRY"       array="yes" type="multiline" compare="conflict"/>
246
247       <!-- Note -->
248       <field name="NOTE" type="multiline" compare="conflict" merge="lines"/>
249
250       <!-- Photo -->
251       <field name="PHOTO" type="blob" compare="never" merge="fillempty"/>
252       <field name="PHOTO_TYPE" type="integer" compare="never" merge="fillempty"/>
253
254     </fieldlist>
255
256     <!-- vCard profile -->
257     <mimeprofile name="vCard" fieldlist="contacts">
258
259       <profile name="VCARD" nummandatory="0"> <!-- we allow records without "N" as Address book can store them -->
260         <property name="VERSION">
261           <value conversion="version"/>
262         </property>
263
264         <property onlyformode="standard" name="PRODID" mandatory="no">
265           <value conversion="prodid"/>
266         </property>
267
268         <property name="REV">
269           <value field="REV"/>
270         </property>
271
272         <property name="N" values="5" mandatory="yes"> <!-- Note: makes N parse and generate even if not in remote's CTCap -->
273           <value index="0" field="N_LAST"/>
274           <value index="1" field="N_FIRST"/>
275           <value index="2" field="N_MIDDLE"/>
276           <value index="3" field="N_PREFIX"/>
277           <value index="4" field="N_SUFFIX"/>
278         </property>
279
280         <property name="FN">
281           <value field="FN"/>
282         </property>
283
284         <property name="X-EVOLUTION-FILE-AS">
285           <value field="FILE-AS"/>
286         </property>
287
288         <!-- onlyformode="standard": not part of vCard 2.1, but some
289              peers (like the Funambol server) accept it anyway in
290              vCard 2.1 -->
291         <property name="NICKNAME">
292           <value field="NICKNAME"/>
293         </property>
294
295         <property name="TITLE">
296           <value field="TITLE"/>
297         </property>
298
299         <property name="CATEGORIES" values="list" valueseparator="," altvalueseparator=";" > <!-- non-standard, but 1:1 as in vCard 3.0 (NOT like in vCalendar 1.0, where separator is ";") -->
300           <value field="CATEGORIES"/>
301           <position field="CATEGORIES" repeat="array" increment="1" minshow="0"/>
302         </property>
303
304         <property name="ORG" values="4">
305           <value index="0" field="ORG_NAME"/>
306           <value index="1" field="ORG_DIVISION"/>
307           <value index="2" field="ORG_OFFICE"/>
308           <value index="3" field="ORG_TEAM"/>
309         </property>
310
311         <property name="ROLE">
312           <value field="ROLE"/>
313         </property>
314
315         <property name="TEL">
316           <value field="TEL"/>
317           <position field="TEL" repeat="array" increment="1" minshow="1"/>
318           <parameter name="TYPE" default="yes" positional="no" show="yes">
319             <value field="TEL_FLAGS" conversion="multimix" combine=",">
320               <enum name="HOME"     value="B0"/>
321               <enum name="WORK"     value="B1"/>
322               <enum mode="ignore"   value="B2"/> <!-- OTHER -->
323               <enum name="VOICE"    value="B3"/>
324               <enum name="CELL"     value="B4"/>
325               <enum name="FAX"      value="B5"/>
326               <enum name="PAGER"    value="B6"/>
327               <enum name="PREF"     value="B7"/>
328               <enum name="CAR"      value="B8"/>
329               <enum name="X-EVOLUTION-CALLBACK" value="B9"/>
330               <enum name="X-EVOLUTION-RADIO" value="B10"/>
331               <enum name="X-EVOLUTION-TELEX" value="B11"/>
332               <enum name="X-EVOLUTION-TTYTDD" value="B12"/>
333
334               <enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
335               <enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
336             </value>
337           </parameter>
338           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
339             <value field="TEL_SLOT"/>
340           </parameter>
341         </property>
342
343         <property name="EMAIL">
344           <value field="EMAIL"/>
345           <position field="EMAIL" repeat="array" increment="1" minshow="1"/>
346           <parameter name="TYPE" default="yes" positional="no" show="yes">
347             <value field="EMAIL_FLAGS" conversion="multimix" combine=",">
348               <enum name="HOME"     value="B0"/>
349               <enum name="WORK"     value="B1"/>
350               <enum mode="ignore"   value="B2"/> <!-- OTHER -->
351               <enum name="INTERNET" value="B3"/>
352
353               <enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
354               <enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
355             </value>
356           </parameter>
357           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
358             <value field="EMAIL_SLOT"/>
359           </parameter>
360         </property>
361
362         <property name="URL">
363           <value field="WEB"/>
364           <position field="WEB" repeat="array" increment="1" minshow="1"/>
365           <parameter name="TYPE" default="yes" positional="no" show="yes">
366             <value field="WEB_FLAGS" conversion="multimix" combine=",">
367               <enum name="HOME"     value="B0"/>
368               <enum name="WORK"     value="B1"/>
369               <enum mode="ignore"   value="B2"/> <!-- OTHER -->
370               <enum name="PREF"     value="B3"/>
371
372               <enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
373               <enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
374             </value>
375           </parameter>
376         </property>
377
378         <property name="CALURI" suppressempty="yes">
379           <value field="CALURI" show="yes"/>
380         </property>
381         <property name="FBURL" suppressempty="yes">
382           <value field="FBURL" show="yes"/>
383         </property>
384         <property name="X-EVOLUTION-BLOG-URL" suppressempty="yes">
385           <value field="BLOGURL" show="yes"/>
386         </property>
387         <property name="X-EVOLUTION-VIDEO-URL" suppressempty="yes">
388           <value field="VIDEOURL" show="yes"/>
389         </property>
390
391         <!-- item for SyncML server: EVOLUTION rule not active,
392              both X-EVOLUTION-MANAGER and X-MANAGER are sent.
393
394              item from SyncML server: EVOLUTION rule not active,
395              both X-EVOLUTION-MANAGER and X-MANAGER are checked,
396              but X-EVOLUTION-MANAGER later so that it overwrites
397              a value set earlier by X-MANAGER (if any). This is
398              a more or less arbitrary priority, chosen because
399              servers that know about SyncEvolution (ScheduleWorld,
400              Memotoo) use the X-EVOLUTION variant.
401
402              item to/from Evolution: EVOLUTION rule is active,
403              only X-EVOLUTION-MANAGER is used. -->
404         <property name="X-EVOLUTION-MANAGER" suppressempty="yes" delayedparsing="1">
405           <value field="MANAGER" show="yes"/>
406         </property>
407         <property name="X-MANAGER" suppressempty="yes" rule="EVOLUTION"/> <!-- disables the X-MANAGER for EVOLUTION -->
408         <property name="X-MANAGER" suppressempty="yes" rule="other">
409           <value field="MANAGER" show="yes"/>
410         </property>
411
412         <property name="X-EVOLUTION-ASSISTANT" suppressempty="yes" delayedparsing="1">
413           <value field="ASSISTANT" show="yes"/>
414         </property>
415         <property name="X-ASSISTANT" suppressempty="yes" rule="EVOLUTION"/>
416         <property name="X-ASSISTANT" suppressempty="yes" rule="other">
417           <value field="ASSISTANT" show="yes"/>
418         </property>
419
420         <property name="X-EVOLUTION-SPOUSE" suppressempty="yes" delayedparsing="1">
421           <value field="SPOUSE" show="yes"/>
422         </property>
423         <property name="X-SPOUSE" suppressempty="yes" rule="EVOLUTION"/>
424         <property name="X-SPOUSE" suppressempty="yes" rule="other">
425           <value field="SPOUSE" show="yes"/>
426         </property>
427
428         <property name="X-EVOLUTION-ANNIVERSARY" suppressempty="yes" delayedparsing="1">
429           <value field="ANNIVERSARY" show="yes"/>
430         </property>
431         <property name="X-ANNIVERSARY" suppressempty="yes" rule="EVOLUTION"/>
432         <property name="X-ANNIVERSARY" suppressempty="yes" rule="other">
433           <value field="ANNIVERSARY" show="yes"/>
434         </property>
435
436         <property name="X-MOZILLA-HTML">
437           <value field="WANTS_HTML" show="yes"/>
438         </property>
439
440         <property name="X-AIM" suppressempty="yes">
441           <value field="AIM_HANDLE"/>
442           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
443             <value field="AIM_SLOT"/>
444           </parameter>
445         </property>
446         <property name="X-GADUGADU" suppressempty="yes">
447           <value field="GADUGADU_HANDLE"/>
448           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
449             <value field="GADUGADU_SLOT"/>
450           </parameter>
451         </property>
452         <property name="X-GROUPWISE" suppressempty="yes">
453           <value field="GROUPWISE_HANDLE"/>
454           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
455             <value field="GROUPWISE_SLOT"/>
456           </parameter>
457         </property>
458         <property name="X-ICQ" suppressempty="yes">
459           <value field="ICQ_HANDLE"/>
460           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
461             <value field="ICQ_SLOT"/>
462           </parameter>
463         </property>
464         <property name="X-JABBER" suppressempty="yes">
465           <value field="JABBER_HANDLE"/>
466           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
467             <value field="JABBER_SLOT"/>
468           </parameter>
469         </property>
470         <property name="X-MSN" suppressempty="yes">
471           <value field="MSN_HANDLE"/>
472           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
473             <value field="MSN_SLOT"/>
474           </parameter>
475         </property>
476         <property name="X-YAHOO" suppressempty="yes">
477           <value field="YAHOO_HANDLE"/>
478           <parameter name="X-EVOLUTION-UI-SLOT" positional="no" show="yes">
479             <value field="YAHOO_SLOT"/>
480           </parameter>
481         </property>
482
483         <property name="ADR" values="7">
484           <value index="0" field="ADR_POBOX"/>
485           <value index="1" field="ADR_ADDTL"/>
486           <value index="2" field="ADR_STREET"/>
487           <value index="3" field="ADR_CITY"/>
488           <value index="4" field="ADR_REG"/>
489           <value index="5" field="ADR_ZIP"/>
490           <value index="6" field="ADR_COUNTRY"/>
491           <position field="ADR_POBOX" repeat="array" increment="1" minshow="1"/>
492           <parameter name="TYPE" default="yes" positional="no" show="yes">
493             <value field="ADR_STREET_FLAGS" conversion="multimix" combine=",">
494               <enum name="HOME"     value="B0"/>
495               <enum name="WORK"     value="B1"/>
496               <enum mode="ignore"   value="B2"/> <!-- OTHER -->
497
498               <enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
499               <enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
500             </value>
501           </parameter>
502         </property>
503
504         <property name="BDAY">
505           <value field="BDAY"/>
506         </property>
507
508         <property name="NOTE" filter="no">
509           <value field="NOTE"/>
510         </property>
511
512         <property name="PHOTO" filter="no">
513           <value field="PHOTO" conversion="BLOB_B64"/>
514           <parameter name="TYPE" default="no" show="yes">
515             <value field="PHOTO_TYPE">
516               <enum name="JPEG" value="0"/>
517             </value>
518           </parameter>
519         </property>
520
521       </profile>
522     </mimeprofile>
523
524     <!-- vCard 2.1 datatype, using vCard profile defined above -->
525     <datatype name="vCard21" basetype="vcard">
526       <version>2.1</version>
527       <use mimeprofile="vCard"/>
528     </datatype>
529
530     <!-- vCard 3.0 datatype, using vCard profile defined above -->
531     <datatype name="vCard30" basetype="vcard">
532       <version>3.0</version>
533       <use mimeprofile="vCard"/>
534     </datatype>
535
536
537     <!-- common field list for events and todos (both represented by vCalendar/iCalendar) -->
538     <fieldlist name="calendar">
539       <field name="ISEVENT" type="integer" compare="always"/>
540
541       <field name="DMODIFIED" type="timestamp" compare="never" age="yes"/>
542       <field name="DCREATED" type="timestamp" compare="never"/>
543
544       <field name="DGENERATED" type="timestamp" compare="never"/>
545
546       <field name="UID" type="string" compare="never"/>
547
548       <field name="CATEGORIES" array="yes" type="string" compare="conflict" merge="fillempty"/>
549       <field name="CLASS" type="integer" compare="conflict" merge="fillempty"/>
550       <field name="TRANSP" type="integer" compare="conflict" merge="fillempty"/>
551
552       <field name="SUMMARY" type="multiline" compare="always"/>
553       <field name="DESCRIPTION" type="multiline" compare="slowsync" merge="lines"/>
554       <field name="LOCATION" type="multiline" compare="slowsync" merge="lines"/>
555       <field name="URL" type="url" compare="conflict"/>
556
557       <!-- recurrence rule block, fields must be in that order, including
558            DTSTART as last field !! -->
559       <field name="RR_FREQ" type="string" compare="conflict"/>
560       <field name="RR_INTERVAL" type="integer" compare="conflict"/>
561       <field name="RR_FMASK" type="integer" compare="conflict"/>
562       <field name="RR_LMASK" type="integer" compare="conflict"/>
563       <field name="RR_END" type="timestamp" compare="conflict"/>
564
565       <!-- Note: DTSTART/DTEND are compared in the <comparescript>,
566                  therefore compare is set no "never" here -->
567       <field name="DTSTART" type="timestamp" compare="never"/>
568       <field name="DTEND" type="timestamp" compare="never"/>
569       <field name="DURATION" type="timestamp" compare="never"/>
570       <field name="COMPLETED" type="timestamp" compare="never"/>
571       <field name="DUE" type="timestamp" compare="never"/>
572
573       <field name="GEO_LAT" type="string" compare="never"/>
574       <field name="GEO_LONG" type="string" compare="never"/>
575
576       <field name="PRIORITY" type="integer" compare="conflict"/>
577       <field name="STATUS" type="integer" compare="conflict" merge="fillempty"/>
578       <field name="PERCENT_COMPLETE" type="integer" compare="conflict"/>
579
580       <field name="ALARM_TIME" type="timestamp" compare="conflict"/>
581       <field name="ALARM_SNOOZE" type="string" compare="conflict"/>
582       <field name="ALARM_REPEAT" type="string" compare="conflict"/>
583       <field name="ALARM_MSG" type="string" compare="conflict"/>
584       <field name="ALARM_ACTION" type="string" compare="conflict"/>
585       <field name="ALARM_REL" type="integer" compare="never"/>
586       <field name="ALARM_UID" type="string" compare="conflict"/>
587
588       <!-- non-standard -->
589       <field name="PARENT_UID" type="string" compare="never"/>
590
591       <!-- for events -->
592       <field name="EXDATES" array="yes" type="timestamp" compare="never"/>
593
594       <field name="ORIGSTART" array="no" type="timestamp" compare="never"/>
595       <field name="SEQNO" array="no" type="integer" compare="never"/>
596
597       <field name="ATTENDEES" array="yes" type="string" compare="never"/>
598       <field name="ATTENDEE_CNS" array="yes" type="string" compare="never"/>
599       <field name="ATTENDEE_PARTSTATS" array="yes" type="integer" compare="never"/>
600       <field name="ATTENDEE_ROLE" array="yes" type="integer" compare="never"/>
601       <field name="ATTENDEE_RSVP" array="yes" type="integer" compare="never"/>
602       <field name="ATTENDEE_LANG" array="yes" type="string" compare="never"/>
603       <field name="ATTENDEE_CUTYPE" array="yes" type="integer" compare="never"/>
604       <field name="ORGANIZER" array="no" type="string" compare="never"/>
605       <field name="ORGANIZER_CN" array="no" type="string" compare="never"/>
606
607     </fieldlist>
608
609
610     <!-- vCalendar with VTODO and VEVENT variants -->
611     <mimeprofile name="vCalendar" fieldlist="calendar">
612
613       <vtimezonegenmode>current</vtimezonegenmode>
614       <tzidgenmode>olson</tzidgenmode>
615
616       <profile name="VCALENDAR" nummandatory="1">
617
618         <property name="VERSION" mandatory="yes">
619           <value conversion="version"/>
620         </property>
621
622         <property onlyformode="standard" name="PRODID" mandatory="no">
623           <value conversion="prodid"/>
624         </property>
625
626         <property onlyformode="old" name="TZ" filter="false" suppressempty="yes">
627           <value field="DTSTART" conversion="tz"/>
628         </property>
629
630         <property onlyformode="old" name="DAYLIGHT" mode="daylight" filter="false" suppressempty="yes">
631           <value field="DTSTART" conversion="daylight"/>
632         </property>
633
634         <property name="GEO" values="2" suppressempty="yes" onlyformode="old" valueseparator=",">
635           <!-- LON,LAT in vCalendar 1.0 -->
636           <value index="0" field="GEO_LAT"/>
637           <value index="1" field="GEO_LONG"/>
638         </property>
639
640         <subprofile onlyformode="standard" name="VTIMEZONE" mode="vtimezones"/>
641
642         <!-- sub-profile for todoz -->
643         <subprofile name="VTODO" nummandatory="1" showifselectedonly="yes" field="ISEVENT" value="0">
644
645           <property name="LAST-MODIFIED" suppressempty="yes">
646             <value field="DMODIFIED"/>
647           </property>
648
649           <property name="DTSTAMP" suppressempty="yes" onlyformode="standard">
650             <value field="DGENERATED"/>
651           </property>
652
653           <property name="DCREATED" suppressempty="yes" onlyformode="old">
654             <value field="DCREATED"/>
655           </property>
656           <property name="CREATED" suppressempty="yes" onlyformode="standard">
657             <value field="DCREATED"/>
658           </property>
659
660           <property name="UID" suppressempty="yes">
661             <value field="UID"/>
662           </property>
663
664           <property name="SEQUENCE" suppressempty="yes">
665             <value field="SEQNO"/>
666           </property>
667
668           <property name="GEO" values="2" suppressempty="yes" onlyformode="standard" valueseparator=";">
669             <!-- LAT;LON in iCalendar 2.0 -->
670             <value index="0" field="GEO_LONG"/>
671             <value index="1" field="GEO_LAT"/>
672           </property>
673
674           <property onlyformode="standard" name="CATEGORIES" values="list" valueseparator="," suppressempty="yes">
675             <value field="CATEGORIES" />
676             <position field="CATEGORIES" repeat="array" minshow="0"/>
677           </property>
678
679           <property onlyformode="old" name="CATEGORIES" values="list" valueseparator=";" altvalueseparator="," suppressempty="yes">
680             <value field="CATEGORIES" />
681             <position field="CATEGORIES" repeat="array" minshow="0"/>
682           </property>
683
684           <property name="CLASS" suppressempty="yes">
685             <value field="CLASS">
686               <enum name="PUBLIC"       value="0"/>
687               <enum name="PRIVATE"      value="1"/>
688               <enum name="CONFIDENTIAL" value="2"/>
689             </value>
690           </property>
691
692           <property name="SUMMARY" mandatory="yes">
693             <value field="SUMMARY"/>
694           </property>
695
696           <!-- DESCRIPTION is an optional property and libical does not like
697                empty properties, so suppress it here. However, in the scripts
698                we ensure that the DESCRIPTION field should never be empty. -->
699           <property name="DESCRIPTION" suppressempty="yes" mandatory="no">
700             <value field="DESCRIPTION"/>
701           </property>
702
703           <property name="LOCATION" suppressempty="yes" mandatory="no">
704             <value field="LOCATION"/>
705           </property>
706
707           <property name="URL" suppressempty="yes" mandatory="no">
708             <value field="URL"/>
709           </property>
710
711           <property name="DTSTART" suppressempty="yes" delayedparsing="1">
712             <value field="DTSTART" conversion="autodate"/>
713             <parameter onlyformode="standard" name="TZID" default="no" show="yes">
714               <value field="DTSTART" conversion="TZID"/>
715             </parameter>
716             <parameter onlyformode="standard" name="VALUE" default="no" show="yes">
717               <value field="DTSTART" conversion="VALUETYPE"/>
718             </parameter>
719           </property>
720
721           <property name="COMPLETED" suppressempty="yes" delayedparsing="1">
722             <value field="COMPLETED" conversion="autoenddate"/>
723             <parameter onlyformode="standard" name="TZID" default="no" show="yes">
724               <value field="COMPLETED" conversion="TZID"/>
725             </parameter>
726             <parameter onlyformode="standard" name="VALUE" default="no" show="yes">
727               <value field="COMPLETED" conversion="VALUETYPE"/>
728             </parameter>
729           </property>
730
731           <property name="DUE" suppressempty="yes" delayedparsing="1">
732             <value field="DUE" conversion="autodate"/>
733             <parameter onlyformode="standard" name="TZID" default="no" show="yes">
734               <value field="DUE" conversion="TZID"/>
735             </parameter>
736             <parameter onlyformode="standard" name="VALUE" default="no" show="yes">
737               <value field="DUE" conversion="VALUETYPE"/>
738             </parameter>
739           </property>
740
741           <property name="PRIORITY" suppressempty="yes">
742             <value field="PRIORITY"/>
743           </property>
744
745           <property name="STATUS" onlyformode="standard" suppressempty="yes">
746             <value field="STATUS" conversion="emptyonly">
747               <enum name="COMPLETED"      value="0"/>
748               <enum name="NEEDS-ACTION"   value="1"/>
749               <enum name="IN-PROCESS"     value="2"/>
750               <enum name="CANCELLED"      value="3"/>
751               <enum name="ACCEPTED"       value="4"/>
752               <enum name="TENTATIVE"      value="5"/>
753               <enum name="DELEGATED"      value="6"/>
754               <enum name="DECLINED"       value="7"/>
755               <enum name="SENT"           value="8"/>
756               <enum name="CONFIRMED"      value="9"/>
757               <enum name="DRAFT"          value="10"/>
758               <enum name="FINAL"          value="11"/>
759             </value>
760           </property>
761
762           <property name="STATUS" onlyformode="old" suppressempty="yes">
763             <value field="STATUS" conversion="emptyonly">
764               <enum name="COMPLETED"      value="0"/>
765               <enum name="NEEDS ACTION"   value="1"/>
766               <enum mode="defaultvalue"   value="1"/> <!-- catch unknown, but also non-conformant NEEDS_ACTION -->
767               <enum name="IN PROCESS"     value="2"/>
768               <enum name="CANCELLED"      value="3"/>
769               <enum name="ACCEPTED"       value="4"/>
770               <enum name="TENTATIVE"      value="5"/>
771               <enum name="DELEGATED"      value="6"/>
772               <enum name="DECLINED"       value="7"/>
773               <enum name="SENT"           value="8"/>
774               <enum name="CONFIRMED"      value="9"/>
775               <enum name="DRAFT"          value="10"/>
776               <enum name="FINAL"          value="11"/>
777             </value>
778           </property>
779
780           <property name="PERCENT-COMPLETE" onlyformode="standard" suppressempty="yes">
781             <value field="PERCENT_COMPLETE"/>
782           </property>          
783
784           <!-- AALARM and DALARM both use the same fields -->
785           <property name="AALARM" onlyformode="old" values="4" suppressempty="yes">
786             <value index="0" field="ALARM_TIME" conversion="emptyonly"/>
787             <value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
788             <value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
789             <value index="3" field="ALARM_MSG" conversion="emptyonly"/>
790           </property>
791           <property name="DALARM" onlyformode="old" values="4" suppressempty="yes">
792             <value index="0" field="ALARM_TIME" conversion="emptyonly"/>
793             <value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
794             <value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
795             <value index="3" field="ALARM_MSG" conversion="emptyonly"/>
796           </property>
797
798           <subprofile onlyformode="standard" name="VALARM" nummandatory="1" field="ALARM_TIME">
799             <property name="TRIGGER" suppressempty="no" mandatory="yes">
800               <value field="ALARM_TIME"/>
801               <parameter name="VALUE" default="no" show="yes">
802                 <value field="ALARM_TIME" conversion="FULLVALUETYPE"/>
803               </parameter>
804               <parameter name="RELATED" default="no" show="yes">
805                 <value field="ALARM_REL">
806                   <enum mode="ignore" value="0"/>
807                   <enum name="START" value="1"/>
808                   <enum name="END"   value="2"/>
809                 </value>
810               </parameter>
811             </property>
812             <property name="ACTION" suppressempty="yes" mandatory="yes">
813               <value field="ALARM_ACTION"/>
814             </property>
815             <property name="DESCRIPTION" suppressempty="yes">
816               <value field="ALARM_MSG"/>
817             </property>
818             <property name="REPEAT" suppressempty="yes">
819               <value field="ALARM_REPEAT"/>
820             </property>
821             <property name="X-EVOLUTION-ALARM-UID" suppressempty="yes">
822               <value field="ALARM_UID"/>
823             </property>
824           </subprofile>
825
826           <property onlyformode="old" name="RELATED-TO" suppressempty="yes">
827             <value field="PARENT_UID"/>
828           </property>
829
830           <property onlyformode="standard" name="RELATED-TO" suppressempty="yes">
831             <value field="PARENT_UID"/>
832             <parameter onlyformode="standard" name="RELTYPE" default="no" positional="yes" show="yes">
833               <value>
834                 <enum name="PARENT"/>
835                 <enum mode="defaultvalue" name="other"/>
836               </value>
837               <position hasnot="other" shows="PARENT" field="PARENT_UID"/>
838             </parameter>
839           </property>
840
841         </subprofile>
842
843         <!-- sub-profile for event -->
844         <subprofile name="VEVENT" nummandatory="1" showifselectedonly="yes" field="ISEVENT" value="1">
845
846           <property name="LAST-MODIFIED" suppressempty="yes">
847             <value field="DMODIFIED"/>
848           </property>
849
850           <property name="DTSTAMP" suppressempty="yes" onlyformode="standard">
851             <value field="DGENERATED"/>
852           </property>
853
854           <property name="DCREATED" suppressempty="yes" onlyformode="old">
855             <value field="DCREATED"/>
856           </property>
857           <property name="CREATED" suppressempty="yes" onlyformode="standard">
858             <value field="DCREATED"/>
859           </property>
860
861
862           <property name="UID" suppressempty="yes">
863             <value field="UID"/>
864           </property>
865
866           <property name="SEQUENCE" suppressempty="yes">
867             <value field="SEQNO"/>
868           </property>
869
870           <property name="GEO" values="2" suppressempty="yes" onlyformode="standard" valueseparator=";">
871             <!-- LAT;LON in iCalendar 2.0 -->
872             <value index="0" field="GEO_LONG"/>
873             <value index="1" field="GEO_LAT"/>
874           </property>
875
876           <property onlyformode="standard" name="CATEGORIES" values="list" valueseparator="," suppressempty="yes">
877             <value field="CATEGORIES" />
878             <position field="CATEGORIES" repeat="array" minshow="0"/>
879           </property>
880
881           <property onlyformode="old" name="CATEGORIES" values="list" valueseparator=";" altvalueseparator="," suppressempty="yes">
882             <value field="CATEGORIES" />
883             <position field="CATEGORIES" repeat="array" minshow="0"/>
884           </property>
885
886           <property name="CLASS" suppressempty="yes">
887             <value field="CLASS">
888               <enum name="PUBLIC"       value="0"/>
889               <enum name="PRIVATE"      value="1"/>
890               <enum name="CONFIDENTIAL" value="2"/>
891             </value>
892           </property>
893
894
895           <property name="TRANSP" suppressempty="yes" onlyformode="standard">
896             <value field="TRANSP">
897               <enum name="OPAQUE"       value="0"/>
898               <enum name="TRANSPARENT"  value="1"/>
899               <enum name="TENTATIVE"     value="2"/> <!-- according to Oracle de facto usage in vCalendar 1.0 -->
900               <enum name="OUT_OF_OFFICE" value="3"/> <!-- according to Oracle de facto usage in vCalendar 1.0 -->
901               <enum mode="defaultvalue" value="0"/>
902             </value>
903           </property>
904           <property name="TRANSP" suppressempty="yes" onlyformode="old">
905             <value field="TRANSP"/> <!-- directly numeric in vCalendar 1.0 -->
906           </property>
907
908
909           <property name="PRIORITY" suppressempty="yes">
910             <value field="PRIORITY"/>
911           </property>
912
913           <property name="SUMMARY" mandatory="yes">
914             <value field="SUMMARY"/>
915           </property>
916
917           <!-- DESCRIPTION is an optional property and libical does not like
918                empty properties, so suppress it here. However, in the scripts
919                we ensure that the DESCRIPTION field should never be empty. -->
920           <property name="DESCRIPTION" suppressempty="yes" mandatory="no">
921             <value field="DESCRIPTION"/>
922           </property>
923
924           <property name="LOCATION" suppressempty="yes" mandatory="no">
925             <value field="LOCATION"/>
926           </property>
927
928           <property name="DTSTART" suppressempty="yes" delayedparsing="1">
929             <value field="DTSTART" conversion="autodate"/>
930             <parameter onlyformode="standard" name="TZID" default="no" show="yes">
931               <value field="DTSTART" conversion="TZID"/>
932             </parameter>
933             <parameter onlyformode="standard" name="VALUE" default="no" show="yes">
934               <value field="DTSTART" conversion="VALUETYPE"/>
935             </parameter>
936           </property>
937
938           <!-- recurrence rule (with delayed parsing, as it is dependent on DTSTART) -->
939           <property name="RRULE" suppressempty="yes" delayedparsing="2">
940             <!-- Note: RR_FREQ is the beginning of a block of fields
941                  suitable for the "rrule" conversion mode -->
942             <value field="RR_FREQ" conversion="rrule"/>
943           </property>
944
945           <!-- Symbian uses this, so it might make the client work with symbian-prepared servers better -->
946           <property name="X-RECURRENCE-ID" suppressempty="yes" onlyformode="old">
947             <value field="ORIGSTART" conversion="autodate"/>
948           </property>
949
950           <property name="RECURRENCE-ID" suppressempty="yes" onlyformode="standard" delayedparsing="1">
951             <value field="ORIGSTART" conversion="autodate"/>
952             <parameter name="TZID" default="no" show="yes">
953               <value field="ORIGSTART" conversion="TZID"/>
954             </parameter>
955             <parameter name="VALUE" default="no" show="yes">
956               <value field="ORIGSTART" conversion="VALUETYPE"/>
957             </parameter>
958           </property>
959
960           <!-- ScheduleWorld has a problem (bugzilla.moblin.org #2226)
961                with the EXDATE:value1,value2 format (correct in iCalendar 2.0):
962                as a workaround, accept all valid formats plus ; but
963                generate separate properties with one value each. -->
964           <property name="EXDATE" values="expandedlist" suppressempty="yes" onlyformode="standard" delayedparsing="1" valueseparator="," altvalueseparator=";">
965             <value field="EXDATES"/>
966             <position field="EXDATES" repeat="array" increment="1" minshow="0"/>
967             <parameter name="TZID" default="no" show="yes">
968               <value field="EXDATES" conversion="TZID"/>
969             </parameter>
970           </property>
971
972           <property name="EXDATE" values="list" suppressempty="yes" onlyformode="old" delayedparsing="1" valueseparator=";" altvalueseparator=",">
973             <value field="EXDATES"/>
974             <position field="EXDATES" repeat="array" increment="1" minshow="0"/>
975           </property>
976
977
978           <property name="DTEND" suppressempty="yes" delayedparsing="1">
979             <value field="DTEND" conversion="autoenddate"/>
980             <parameter onlyformode="standard" name="TZID" default="no" show="yes">
981               <value field="DTEND" conversion="TZID"/>
982             </parameter>
983             <parameter onlyformode="standard" name="VALUE" default="no" show="yes">
984               <value field="DTEND" conversion="VALUETYPE"/>
985             </parameter>
986           </property>
987
988           <property name="DURATION" suppressempty="yes" delayedparsing="1" onlyformode="standard">
989             <value field="DURATION"/>
990             <parameter onlyformode="standard" name="VALUE" default="no" show="no">
991               <value field="DURATION" conversion="VALUETYPE"/>
992             </parameter>
993           </property>
994
995           <property name="ATTENDEE" suppressempty="yes" onlyformode="old">
996             <value field="ATTENDEES"/>
997             <parameter name="ROLE" default="no" positional="yes" show="yes">
998               <value>
999                 <enum name="ORGANIZER"/>
1000               </value>
1001               <position has="ORGANIZER" field="ORGANIZER" overwriteempty="yes"/>
1002               <position hasnot="ORGANIZER" field="ATTENDEES" repeat="array" increment="1" overwriteempty="yes"/>
1003             </parameter>
1004             <parameter name="STATUS" default="no" show="yes">
1005               <value field="ATTENDEE_PARTSTATS">
1006                 <enum name="NEEDS ACTION"   value="1"/>
1007                 <enum mode="defaultvalue"   value="1"/> <!-- catch unknown, but also non-conformant NEEDS_ACTION -->
1008                 <enum name="ACCEPTED"       value="4"/>
1009                 <enum name="DECLINED"       value="7"/>
1010                 <enum name="TENTATIVE"      value="5"/>
1011                 <enum name="DELEGATED"      value="6"/>
1012               </value>
1013             </parameter>
1014           </property>
1015
1016           <property name="ATTENDEE" suppressempty="yes" onlyformode="standard">
1017             <value field="ATTENDEES" conversion="mailto"/>
1018             <position field="ATTENDEES" repeat="array" increment="1" minshow="0"/>
1019             <parameter name="CN" default="no" show="yes" shownonempty="yes">
1020               <value field="ATTENDEE_CNS"/>
1021             </parameter>
1022             <parameter name="PARTSTAT" default="no" show="yes">
1023               <value field="ATTENDEE_PARTSTATS">
1024                 <enum name="NEEDS-ACTION"   value="1"/>
1025                 <enum mode="defaultvalue"   value="1"/> <!-- catch unknown, but also non-conformant NEEDS_ACTION -->
1026                 <enum name="ACCEPTED"       value="4"/>
1027                 <enum name="DECLINED"       value="7"/>
1028                 <enum name="TENTATIVE"      value="5"/>
1029                 <enum name="DELEGATED"      value="6"/>
1030               </value>
1031             </parameter>
1032             <parameter name="ROLE" default="no" show="yes">
1033               <value field="ATTENDEE_ROLE">
1034                 <enum name="CHAIR"            value="1"/>
1035                 <enum name="REQ-PARTICIPANT"  value="2"/>
1036                 <enum name="OPT-PARTICIPANT"  value="3"/>
1037                 <enum name="NON-PARTICIPANT"  value="4"/>
1038               </value>
1039             </parameter>
1040             <parameter name="RSVP" default="no" show="yes">
1041               <value field="ATTENDEE_RSVP">
1042                 <enum name="TRUE"             value="1"/>
1043                 <enum name="FALSE"            value="0"/>
1044               </value>
1045             </parameter>
1046             <parameter name="LANGUAGE" show="yes">
1047               <value field="ATTENDEE_LANG"/>
1048             </parameter>
1049             <parameter name="CUTYPE" default="no" show="yes">
1050               <value field="ATTENDEE_CUTYPE">
1051                 <enum name="INDIVIDUAL"  value="1"/>
1052                 <enum name="GROUP"       value="2"/>
1053                 <enum name="RESOURCE"    value="3"/>
1054                 <enum name="ROOM"        value="4"/>
1055                 <enum name="UNKNOWN"     value="5"/>
1056               </value>
1057             </parameter>
1058           </property>
1059
1060           <property name="ORGANIZER" suppressempty="yes" onlyformode="standard">
1061             <value field="ORGANIZER" conversion="mailto"/>
1062             <parameter name="CN" default="no" show="yes">
1063               <value field="ORGANIZER_CN"/>
1064             </parameter>
1065           </property>
1066
1067
1068           <!-- AALARM and DALARM both use the same fields -->
1069           <property name="AALARM" onlyformode="old" values="4" suppressempty="yes">
1070             <value index="0" field="ALARM_TIME" conversion="emptyonly"/>
1071             <value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
1072             <value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
1073             <value index="3" field="ALARM_MSG" conversion="emptyonly"/>
1074           </property>
1075           <property name="DALARM" onlyformode="old" values="4" suppressempty="yes">
1076             <value index="0" field="ALARM_TIME" conversion="emptyonly"/>
1077             <value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
1078             <value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
1079             <value index="3" field="ALARM_MSG" conversion="emptyonly"/>
1080           </property>
1081
1082           <subprofile onlyformode="standard" name="VALARM" nummandatory="1" field="ALARM_TIME">
1083             <property name="TRIGGER" suppressempty="no" mandatory="yes">
1084               <value field="ALARM_TIME"/>
1085               <parameter name="VALUE" default="no" show="yes">
1086                 <value field="ALARM_TIME" conversion="FULLVALUETYPE"/>
1087               </parameter>
1088               <parameter name="RELATED" default="no" show="yes">
1089                 <value field="ALARM_REL">
1090                   <enum mode="ignore" value="0"/>
1091                   <enum name="START" value="1"/>
1092                   <enum name="END"   value="2"/>
1093                 </value>
1094               </parameter>
1095             </property>
1096             <property name="ACTION" suppressempty="yes" mandatory="yes">
1097               <value field="ALARM_ACTION"/>
1098             </property>
1099             <property name="DESCRIPTION" suppressempty="yes">
1100               <value field="ALARM_MSG"/>
1101             </property>
1102             <property name="REPEAT" suppressempty="yes">
1103               <value field="ALARM_REPEAT"/>
1104             </property>
1105             <property name="X-EVOLUTION-ALARM-UID" suppressempty="yes">
1106               <value field="ALARM_UID"/>
1107             </property>
1108           </subprofile>
1109
1110         </subprofile>
1111         
1112       </profile>
1113     </mimeprofile>
1114
1115
1116     <!-- vCalendar 1.0 datatype, using vCalendar profile defined above -->
1117     <datatype name="vCalendar10" basetype="vcalendar">
1118       <version>1.0</version>
1119       <use mimeprofile="vCalendar"/>
1120
1121       <incomingscript><![CDATA[
1122         $VCALENDAR_INCOMING_SCRIPT
1123       ]]></incomingscript>
1124
1125       <outgoingscript><![CDATA[
1126         $VCALENDAR_OUTGOING_SCRIPT
1127       ]]></outgoingscript>
1128
1129     </datatype>
1130
1131
1132     <!-- iCalendar 2.0 datatype, using vCalendar profile defined above -->
1133     <datatype name="iCalendar20" basetype="vcalendar">
1134       <version>2.0</version>
1135       <use mimeprofile="vCalendar"/>
1136
1137       <incomingscript><![CDATA[
1138         $VCALENDAR_INCOMING_SCRIPT
1139       ]]></incomingscript>
1140
1141       <outgoingscript><![CDATA[
1142         $VCALENDAR_OUTGOING_SCRIPT
1143       ]]></outgoingscript>
1144
1145     </datatype>
1146
1147
1148     <!-- list of internal fields representing plain text note data -->
1149     <fieldlist name="Note">
1150       <field name="SYNCLVL" type="integer" compare="never"/>
1151       <field name="SUBJECT" type="multiline" compare="always"/>
1152       <field name="TEXT" type="multiline" compare="conflict" merge="lines"/>
1153     </fieldlist>
1154
1155     <textprofile name="Note" fieldlist="Note">
1156       <linemap field="SUBJECT">
1157         <numlines>1</numlines>
1158         <inheader>false</inheader>
1159         <allowempty>true</allowempty>
1160         <filterkeyword>SUBJECT</filterkeyword>
1161       </linemap>
1162       <linemap field="TEXT">
1163         <numlines>0</numlines>
1164         <inheader>false</inheader>
1165         <allowempty>true</allowempty>
1166       </linemap>
1167     </textprofile>
1168
1169     <datatype name="note10" basetype="text">
1170       <use profile="Note"/>
1171       <typestring>text/plain</typestring>
1172       <versionstring>1.0</versionstring>
1173     </datatype>
1174
1175     <datatype name="note11" basetype="text">
1176       <use profile="Note"/>
1177       <typestring>text/plain</typestring>
1178       <versionstring>1.1</versionstring>
1179     </datatype>
1180
1181
1182     <!-- list of internal fields representing vBookmark data -->
1183     <fieldlist name="bookmarks">
1184       <field name="REV" type="timestamp" compare="never" age="yes"/>
1185       <field name="SYNCLVL" type="integer" compare="never"/>
1186
1187       <!-- Name -->
1188       <field name="TITLE" type="string" compare="always"/>
1189
1190       <!-- categories and classification -->
1191       <field name="CATEGORIES" type="string" compare="conflict" merge="fillempty"/>
1192       <field name="CLASS" type="string" compare="conflict" merge="fillempty"/>
1193
1194       <!-- web addresses -->
1195       <field name="URL" type="url" compare="slowsync" merge="fillempty"/>
1196
1197       <!-- Note -->
1198       <field name="NOTE" type="multiline" compare="conflict" merge="lines"/>
1199
1200     </fieldlist>
1201
1202     <!-- vBookmark profile -->
1203     <mimeprofile name="vBookmark" fieldlist="bookmarks">
1204
1205       <profile name="VBKM" nummandatory="0">
1206         <property name="VERSION">
1207           <value conversion="version"/>
1208         </property>
1209
1210         <property name="X-LAST-MODIFIED">
1211           <value field="REV"/>
1212         </property>
1213
1214         <property name="TITLE">
1215           <value field="TITLE"/>
1216         </property>
1217
1218         <property name="URL">
1219           <value field="URL"/>
1220         </property>
1221
1222         <!-- non-standard properties -->
1223
1224         <property name="CATEGORIES">
1225           <value field="CATEGORIES"/>
1226         </property>
1227
1228         <property name="CLASS" suppressempty="yes">
1229           <value field="CLASS"/>
1230         </property>
1231
1232         <property name="NOTE" filter="no">
1233           <value field="NOTE"/>
1234         </property>
1235
1236       </profile>
1237     </mimeprofile>
1238
1239     <!-- vBookmark datatype, using vBookmark profile defined above -->
1240     <datatype name="vBookmark10" basetype="mimedir">
1241       <typestring>text/x-vbookmark</typestring>
1242       <versionstring>1.0</versionstring>
1243       <use profile="vBookmark"/>
1244     </datatype>
1245
1246     <fieldlists/>
1247     <profiles/>
1248     <datatypes/>
1249   </datatypes>
1250
1251
1252   <client type="plugin">
1253     <binfilespath>$(binfilepath)</binfilespath>
1254     <defaultauth/>
1255
1256     <!-- SyncEvolution has traditionally not folded long lines in
1257          vCard.  Testing showed that servers still have problems with
1258          it, so avoid it by default -->
1259     <donotfoldcontent>yes</donotfoldcontent>
1260
1261     <fakedeviceid/>
1262
1263     <datastore/>
1264
1265     <remoterule name="EVOLUTION">
1266       <deviceid>none - this rule is activated via its name in MAKE/PARSETEXTWITHPROFILE() macro calls</deviceid>
1267     </remoterule>
1268
1269     <remoterules/>
1270   </client>
1271
1272 </sysync_config>