syncevolution/src/syncclient_sample_config.xml
2009-10-20 14:32:40 +02:00

1351 lines
56 KiB
XML

<?xml version="1.0"?>
<!-- SYNTHESIS SYNCML CLIENT Version 3.2 Configuration file -->
<sysync_config version="1.0">
<configvar name="logpath" value="$(defout_path)"/>
<!-- this string is output to every session debug logfile to identify the config in use -->
<configidstring>SyncEvolution client config</configidstring>
<!-- information about maximum supported message and object size (in bytes) -->
<maxmsgsize/>
<maxobjsize/>
<!-- information for DevInf -->
<model/>
<manufacturer/>
<hardwareversion/>
<firmwareversion/>
<devicetype/>
<configdate/>
<debug/>
<transport type="xpt">
<!-- allow HTTP 1.1 kepp-alive (multiple request-answer-exchanges in single TCP connection) -->
<keepconnection>true</keepconnection>
</transport>
<scripting>
<looptimeout>5</looptimeout>
<function><![CDATA[
// create a UID
string newuid() {
return "syuid" + NUMFORMAT(RANDOM(1000000),6,"0") + "." + (string)MILLISECONDS(NOW());
}
]]></function>
<macro name="VCARD_BEFOREWRITE_SCRIPT_EVOLUTION"><![CDATA[
// a wordaround for cellphone in evolution. for incoming contacts, if there is only one CELL,
// strip the HOME or WORK flag from it. Evolution then should show it. */
INTEGER i, wanted, cell_phones;
i = 0;
cell_phones = 0;
while(i < SIZE(TEL_FLAGS)) {
// 0x10 is the flag of 'cell' type of telephone
if(TEL_FLAGS[i] & 0x10) {
cell_phones = cell_phones + 1;
wanted = i;
}
i = i + 1;
}
if(cell_phones == 1) {
TEL_FLAGS[wanted] = 0x10;
}
// Google sends TYPE=WORK and TYPE=HOME when it means
// normal VOICE phone numbers. Add that flag when
// importing into Evolution, because Evolution does not
// display the numbers without VOICE.
i = 0;
while(i < SIZE(TEL_FLAGS)) {
if(TEL_FLAGS[i] == 1 || TEL_FLAGS[i] == 2) {
TEL_FLAGS[i] = TEL_FLAGS[i] | 8;
}
i = i + 1;
}
]]></macro>
<macro name="VCALENDAR_20TO10_PRIORITY_CONVERSION"><![CDATA[
//vCalendar10 has different interpretation from iCalendar20 in 'priority'.
//see mappings:
// Category vCalendar1.0 iCalendar2.0
// undefined 0 0
// high 1 1 ~ 4
// normal 2 5
// low 3 6 ~ bigger
if(PRIORITY<5 && PRIORITY>0) {
PRIORITY=1;
}else if(PRIORITY==5){
PRIORITY=2;
}else if(PRIORITY>5){
PRIORITY=3;
} // 0 is undefined and remains unchanged
]]></macro>
<macro name="VCALENDAR_10TO20_PRIORITY_CONVERSION"><![CDATA[
if(PRIORITY==2) {
PRIORITY=5;
}else if(PRIORITY==3){
PRIORITY=7;
} //others remain unchanged
]]></macro>
<macro name="VCALENDAR10_BEFOREWRITE_SCRIPT"><![CDATA[
$VCALENDAR_20TO10_PRIORITY_CONVERSION;
]]></macro>
<macro name="VCALENDAR10_AFTERREAD_SCRIPT"><![CDATA[
$VCALENDAR_10TO20_PRIORITY_CONVERSION;
]]></macro>
<!-- define script macros for scripts that are used by both vCalendar 1.0 and iCalendar 2.0 -->
<macro name="VCALENDAR_INCOMING_SCRIPT"><![CDATA[
STRING MATCHES[];
STRING CAT,CN,EM;
INTEGER i;
// make sure we have all trailing and leading spaces eliminated
DESCRIPTION=NORMALIZED(DESCRIPTION);
SUMMARY=NORMALIZED(SUMMARY);
// make sure that we have a DESCRIPTION
if (DESCRIPTION==EMPTY) DESCRIPTION=SUMMARY;
// calendar or todo
if (ISEVENT) {
// VEVENT
// - handle duration cases
if (ISDURATION(DURATION)) {
if (DTEND==EMPTY) DTEND = DTSTART + DURATION;
if (DTSTART==EMPTY) DTSTART = DTEND - DURATION;
}
// - detect alldays in vCalendar 1.0 (0:00-0:00 or 23:59 localtime)
i = ALLDAYCOUNT(DTSTART,DTEND,TRUE);
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);
MAKEALLDAY(DTSTART,DTEND,i);
}
// Make sure that all EXDATE times are in the same timezone as the start
// time. Some servers send them as UTC, which is all fine and well, but
// only if the timezone definition doesn't change. Also, libical does not
// handle such UTC EXDATEs, so let's convert it while the UTC and
// time zone definition (hopefully) are in sync.
if (TIMEZONE(DTSTART) != "UTC" && !ISFLOATING(DTSTART)) {
i = 0;
timestamp exdate;
while (i<SIZE(EXDATES)) {
exdate = EXDATES[i];
if (!ISDATEONLY(exdate) &&
(TIMEZONE(exdate) == "UTC" || ISFLOATING(exdate))) {
// "unfloat" floating time stamps: not sure whether that occcurs
// in practice, but it looks as wrong as UTC EXDATEs
EXDATES[i] = CONVERTTOZONE(exdate,DTSTART,TRUE);
}
i=i+1;
}
}
// If vcalendar1.0, rrule is not secondly, minutely, or hourly, we strip time information
// and only reserve date information
if (ITEMDATATYPE()=="vCalendar10" && RR_FREQ!="h" && RR_FREQ!="m" && RR_FREQ!="s") {
timestamp exdate;
i = 0;
while (i<SIZE(EXDATES)) {
exdate = EXDATES[i];
if (!ISDATEONLY(exdate)) {
EXDATES[i] = DATEONLY(exdate);
}
i=i+1;
}
}
// - shape attendees (and make sure ATTENDEES[] is assigned even for empty email addresses)
i=0;
while(i<SIZE(ATTENDEES) || i<SIZE(ATTENDEE_CNS)) {
PARSEEMAILSPEC(ATTENDEES[i], CN, EM);
ATTENDEES[i] = EM; // pure email address
// in case we have no specific common name, use the one extracted from the email
// This catches the vCalendar 1.0 case and eventually ill-formed iCalendar 2.0 as well
if (ATTENDEE_CNS[i]==EMPTY)
ATTENDEE_CNS[i]=CN;
// default participation status to needs-action
if (ATTENDEE_PARTSTATS[i]==EMPTY)
ATTENDEE_PARTSTATS[i]=1; // 1=needs action
i=i+1;
}
// - shape organizer
PARSEEMAILSPEC(ORGANIZER, CN, EM);
ORGANIZER = EM; // pure email address
if (ORGANIZER_CN==EMPTY)
ORGANIZER_CN=CN;
}
else {
// VTODO
// - make sure we have at least a summary
if (SUMMARY==EMPTY) SUMMARY=DESCRIPTION; // use description if we don't have a summary
if (SUMMARY==EMPTY) SUMMARY="unnamed"; // set dummy summary if we still don't have one
// due shaping for non-iCalendar 2.0
if (ITEMDATATYPE()=="vCalendar10" && ALLDAYCOUNT(DUE,DUE,TRUE,TRUE)>0) {
DUE = DATEONLY(DUE);
}
if (ITEMDATATYPE()=="vCalendar10") {
$VCALENDAR_10TO20_PRIORITY_CONVERSION;
}
}
// a workaround for funambol: adding 'action' for 'alarm'
if (ITEMDATATYPE()=="iCalendar20") {
if (ALARM_TIME!=EMPTY && ALARM_ACTION==EMPTY) {
ALARM_ACTION = "DISPLAY";
}
}
]]></macro>
<macro name="VCALENDAR_OUTGOING_SCRIPT"><![CDATA[
// set UTC time of generation for iCalendar 2.0 DTSTAMP
DGENERATED = NOW();
// make sure we have all trailing and leading spaces eliminated
DESCRIPTION=NORMALIZED(DESCRIPTION);
SUMMARY=NORMALIZED(SUMMARY);
if (ISEVENT) {
// VEVENT
// - combine attendee email address and common name into single string for vCalendar 1.0
if (ITEMDATATYPE()=="vCalendar10") {
i=0;
while(i<SIZE(ATTENDEES)) {
ATTENDEES[i] = MAKEEMAILSPEC(ATTENDEE_CNS[i], ATTENDEES[i]);
i=i+1;
}
ORGANIZER = MAKEEMAILSPEC(ORGANIZER_CN, ORGANIZER);
}
}
else {
// VTODO
// interal representation is iCalendar20
if (ITEMDATATYPE()=="vCalendar10") {
$VCALENDAR_20TO10_PRIORITY_CONVERSION;
}
}
// 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
if (ALARM_TIME!=EMPTY) {
if (ITEMDATATYPE()=="iCalendar20") {
if (ALARM_ACTION==EMPTY) ALARM_ACTION = "AUDIO";
}
else {
if (ALARM_MSG==EMPTY) ALARM_MSG="alarm";
}
}
]]></macro>
</scripting>
<datatypes>
<!-- list of internal fields representing vCard data -->
<fieldlist name="contacts">
<field name="REV" type="timestamp" compare="never" age="yes"/>
<!-- Name elements -->
<field name="N_LAST" type="string" compare="always"/>
<field name="N_FIRST" type="string" compare="always"/>
<field name="N_MIDDLE" type="string" compare="always"/>
<field name="N_PREFIX" type="string" compare="conflict"/>
<field name="N_SUFFIX" type="string" compare="conflict"/>
<field name="NICKNAME" type="string" compare="conflict"/>
<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"/>
<!-- 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 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"/>
<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 -->
<!-- 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"/>
<field name="ADR_STREET_FLAGS" array="yes" type="integer" compare="conflict"/> <!-- offset 0 (from ADR_STREET_FLAGS) -->
<field name="ADR_STREET_LABEL" array="yes" type="string" compare="conflict"/> <!-- offset 1 -->
<field name="ADR_STREET_ID" array="yes" type="integer" compare="conflict"/> <!-- offset 2 -->
<field name="ADR_POBOX" array="yes" type="multiline" compare="conflict"/>
<field name="ADR_CITY" array="yes" type="multiline" compare="conflict"/>
<field name="ADR_REG" array="yes" type="multiline" compare="conflict"/>
<field name="ADR_ZIP" array="yes" type="multiline" compare="conflict"/>
<field name="ADR_COUNTRY" array="yes" type="multiline" compare="conflict"/>
<!-- Note -->
<field name="NOTE" type="multiline" compare="conflict" merge="lines"/>
<!-- Photo -->
<field name="PHOTO" type="blob" compare="never" merge="fillempty"/>
<field name="PHOTO_TYPE" type="integer" compare="never" merge="fillempty"/>
</fieldlist>
<!-- vCard profile -->
<mimeprofile name="vCard" fieldlist="contacts">
<profile name="VCARD" nummandatory="0"> <!-- we allow records without "N" as Address book can store them -->
<property name="VERSION">
<value conversion="version"/>
</property>
<property onlyformode="standard" name="PRODID" mandatory="no">
<value conversion="prodid"/>
</property>
<property name="REV">
<value field="REV"/>
</property>
<property name="N" values="5" mandatory="yes"> <!-- Note: makes N parse and generate even if not in remote's CTCap -->
<value index="0" field="N_LAST"/>
<value index="1" field="N_FIRST"/>
<value index="2" field="N_MIDDLE"/>
<value index="3" field="N_PREFIX"/>
<value index="4" field="N_SUFFIX"/>
</property>
<property name="FN">
<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 -->
<property name="NICKNAME">
<value field="NICKNAME"/>
</property>
<property name="TITLE">
<value field="TITLE"/>
</property>
<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 ";") -->
<value field="CATEGORIES"/>
<position field="CATEGORIES" repeat="array" increment="1" minshow="0"/>
</property>
<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">
<value field="TEL"/>
<position field="TEL" repeat="array" increment="1" minshow="1"/>
<parameter name="TYPE" default="yes" positional="no" show="yes">
<value field="TEL_FLAGS" conversion="multimix" combine=",">
<enum name="HOME" value="B0"/>
<enum name="WORK" value="B1"/>
<enum mode="ignore" value="B2"/> <!-- OTHER -->
<enum name="VOICE" value="B3"/>
<enum name="CELL" value="B4"/>
<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">
<value field="EMAIL"/>
<position field="EMAIL" repeat="array" increment="1" minshow="1"/>
<parameter name="TYPE" default="yes" positional="no" show="yes">
<value field="EMAIL_FLAGS" conversion="multimix" combine=",">
<enum name="HOME" value="B0"/>
<enum name="WORK" value="B1"/>
<enum mode="ignore" value="B2"/> <!-- OTHER -->
<enum name="INTERNET" value="B3"/>
<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="EMAIL_SLOT"/>
</parameter>
</property>
<property name="URL">
<value field="WEB"/>
<position field="WEB" repeat="array" increment="1" minshow="1"/>
<parameter name="TYPE" default="yes" positional="no" show="yes">
<value field="WEB_FLAGS" conversion="multimix" combine=",">
<enum name="HOME" value="B0"/>
<enum name="WORK" value="B1"/>
<enum mode="ignore" value="B2"/> <!-- OTHER -->
<enum name="PREF" value="B3"/>
<enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
<enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
</value>
</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>
<!-- item for SyncML server: EVOLUTION rule not active,
both X-EVOLUTION-MANAGER and X-MANAGER are sent.
item from SyncML server: EVOLUTION rule not active,
both X-EVOLUTION-MANAGER and X-MANAGER are checked,
but X-EVOLUTION-MANAGER later so that it overwrites
a value set earlier by X-MANAGER (if any). This is
a more or less arbitrary priority, chosen because
servers that know about SyncEvolution (ScheduleWorld,
Memotoo) use the X-EVOLUTION variant.
item to/from Evolution: EVOLUTION rule is active,
only X-EVOLUTION-MANAGER is used. -->
<property name="X-EVOLUTION-MANAGER" suppressempty="yes" delayedparsing="1">
<value field="MANAGER" show="yes"/>
</property>
<property name="X-MANAGER" suppressempty="yes" rule="EVOLUTION"/> <!-- disables the X-MANAGER for EVOLUTION -->
<property name="X-MANAGER" suppressempty="yes" rule="other">
<value field="MANAGER" show="yes"/>
</property>
<property name="X-EVOLUTION-ASSISTANT" suppressempty="yes" delayedparsing="1">
<value field="ASSISTANT" show="yes"/>
</property>
<property name="X-ASSISTANT" suppressempty="yes" rule="EVOLUTION"/>
<property name="X-ASSISTANT" suppressempty="yes" rule="other">
<value field="ASSISTANT" show="yes"/>
</property>
<property name="X-EVOLUTION-SPOUSE" suppressempty="yes" delayedparsing="1">
<value field="SPOUSE" show="yes"/>
</property>
<property name="X-SPOUSE" suppressempty="yes" rule="EVOLUTION"/>
<property name="X-SPOUSE" suppressempty="yes" rule="other">
<value field="SPOUSE" show="yes"/>
</property>
<property name="X-EVOLUTION-ANNIVERSARY" suppressempty="yes" delayedparsing="1">
<value field="ANNIVERSARY" show="yes"/>
</property>
<property name="X-ANNIVERSARY" suppressempty="yes" rule="EVOLUTION"/>
<property name="X-ANNIVERSARY" suppressempty="yes" rule="other">
<value field="ANNIVERSARY" 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"/>
<value index="2" field="ADR_STREET"/>
<value index="3" field="ADR_CITY"/>
<value index="4" field="ADR_REG"/>
<value index="5" field="ADR_ZIP"/>
<value index="6" field="ADR_COUNTRY"/>
<position field="ADR_POBOX" repeat="array" increment="1" minshow="1"/>
<parameter name="TYPE" default="yes" positional="no" show="yes">
<value field="ADR_STREET_FLAGS" conversion="multimix" combine=",">
<enum name="HOME" value="B0"/>
<enum name="WORK" value="B1"/>
<enum mode="ignore" value="B2"/> <!-- OTHER -->
<enum mode="prefix" name="X-CustomLabel-" value="1.L"/>
<enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/>
</value>
</parameter>
</property>
<property name="BDAY">
<value field="BDAY"/>
</property>
<property name="NOTE" filter="no">
<value field="NOTE"/>
</property>
<property name="PHOTO" filter="no">
<value field="PHOTO" conversion="BLOB_B64"/>
<parameter name="TYPE" default="no" show="yes">
<value field="PHOTO_TYPE">
<enum name="JPEG" value="0"/>
</value>
</parameter>
</property>
</profile>
</mimeprofile>
<!-- vCard 2.1 datatype, using vCard profile defined above -->
<datatype name="vCard21" basetype="vcard">
<version>2.1</version>
<use mimeprofile="vCard"/>
</datatype>
<!-- vCard 3.0 datatype, using vCard profile defined above -->
<datatype name="vCard30" basetype="vcard">
<version>3.0</version>
<use mimeprofile="vCard"/>
</datatype>
<!-- common field list for events and todos (both represented by vCalendar/iCalendar) -->
<fieldlist name="calendar">
<field name="ISEVENT" type="integer" compare="always"/>
<field name="DMODIFIED" type="timestamp" compare="never" age="yes"/>
<field name="DCREATED" type="timestamp" compare="never"/>
<field name="DGENERATED" type="timestamp" compare="never"/>
<field name="UID" type="string" compare="never"/>
<field name="CATEGORIES" array="yes" type="string" compare="conflict" merge="fillempty"/>
<field name="CLASS" type="integer" compare="conflict" merge="fillempty"/>
<field name="TRANSP" type="integer" compare="conflict" merge="fillempty"/>
<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 !! -->
<field name="RR_FREQ" type="string" compare="conflict"/>
<field name="RR_INTERVAL" type="integer" compare="conflict"/>
<field name="RR_FMASK" type="integer" compare="conflict"/>
<field name="RR_LMASK" type="integer" compare="conflict"/>
<field name="RR_END" type="timestamp" compare="conflict"/>
<!-- Note: DTSTART/DTEND are compared in the <comparescript>,
therefore compare is set no "never" here -->
<field name="DTSTART" type="timestamp" compare="never"/>
<field name="DTEND" type="timestamp" compare="never"/>
<field name="DURATION" type="timestamp" compare="never"/>
<field name="COMPLETED" type="timestamp" compare="never"/>
<field name="DUE" type="timestamp" compare="never"/>
<field name="GEO_LAT" type="string" compare="never"/>
<field name="GEO_LONG" type="string" compare="never"/>
<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"/>
<field name="ALARM_REPEAT" type="string" compare="conflict"/>
<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"/>
<!-- for events -->
<field name="EXDATES" array="yes" type="timestamp" compare="never"/>
<field name="ORIGSTART" array="no" type="timestamp" compare="never"/>
<field name="SEQNO" array="no" type="integer" compare="never"/>
<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"/>
</fieldlist>
<!-- vCalendar with VTODO and VEVENT variants -->
<mimeprofile name="vCalendar" fieldlist="calendar">
<vtimezonegenmode>current</vtimezonegenmode>
<tzidgenmode>olson</tzidgenmode>
<profile name="VCALENDAR" nummandatory="1">
<property name="VERSION" mandatory="yes">
<value conversion="version"/>
</property>
<property onlyformode="standard" name="PRODID" mandatory="no">
<value conversion="prodid"/>
</property>
<property onlyformode="old" name="TZ" filter="false" suppressempty="yes">
<value field="DTSTART" conversion="tz"/>
</property>
<property onlyformode="old" name="DAYLIGHT" mode="daylight" filter="false" suppressempty="yes">
<value field="DTSTART" conversion="daylight"/>
</property>
<property name="GEO" values="2" suppressempty="yes" onlyformode="old" valueseparator=",">
<!-- LON,LAT in vCalendar 1.0 -->
<value index="0" field="GEO_LAT"/>
<value index="1" field="GEO_LONG"/>
</property>
<subprofile onlyformode="standard" name="VTIMEZONE" mode="vtimezones"/>
<!-- sub-profile for todoz -->
<subprofile name="VTODO" nummandatory="1" showifselectedonly="yes" field="ISEVENT" value="0">
<property name="LAST-MODIFIED" suppressempty="yes">
<value field="DMODIFIED"/>
</property>
<property name="DTSTAMP" suppressempty="yes" onlyformode="standard">
<value field="DGENERATED"/>
</property>
<property name="DCREATED" suppressempty="yes" onlyformode="old">
<value field="DCREATED"/>
</property>
<property name="CREATED" suppressempty="yes" onlyformode="standard">
<value field="DCREATED"/>
</property>
<property name="UID" suppressempty="yes">
<value field="UID"/>
</property>
<property name="SEQUENCE" suppressempty="yes">
<value field="SEQNO"/>
</property>
<property name="GEO" values="2" suppressempty="yes" onlyformode="standard" valueseparator=";">
<!-- LAT;LON in iCalendar 2.0 -->
<value index="0" field="GEO_LONG"/>
<value index="1" field="GEO_LAT"/>
</property>
<property onlyformode="standard" name="CATEGORIES" values="list" valueseparator="," suppressempty="yes">
<value field="CATEGORIES" />
<position field="CATEGORIES" repeat="array" minshow="0"/>
</property>
<property onlyformode="old" name="CATEGORIES" values="list" valueseparator=";" altvalueseparator="," suppressempty="yes">
<value field="CATEGORIES" />
<position field="CATEGORIES" repeat="array" minshow="0"/>
</property>
<property name="CLASS" suppressempty="yes">
<value field="CLASS">
<enum name="PUBLIC" value="0"/>
<enum name="PRIVATE" value="1"/>
<enum name="CONFIDENTIAL" value="2"/>
</value>
</property>
<property name="SUMMARY" mandatory="yes">
<value field="SUMMARY"/>
</property>
<!-- 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>
<property name="LOCATION" suppressempty="yes" mandatory="no">
<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">
<value field="DTSTART" conversion="TZID"/>
</parameter>
<parameter onlyformode="standard" name="VALUE" default="no" show="yes">
<value field="DTSTART" conversion="VALUETYPE"/>
</parameter>
</property>
<property name="COMPLETED" suppressempty="yes" delayedparsing="1">
<value field="COMPLETED" conversion="autoenddate"/>
<parameter onlyformode="standard" name="TZID" default="no" show="yes">
<value field="COMPLETED" conversion="TZID"/>
</parameter>
<parameter onlyformode="standard" name="VALUE" default="no" show="yes">
<value field="COMPLETED" conversion="VALUETYPE"/>
</parameter>
</property>
<property name="DUE" suppressempty="yes" delayedparsing="1">
<value field="DUE" conversion="autodate"/>
<parameter onlyformode="standard" name="TZID" default="no" show="yes">
<value field="DUE" conversion="TZID"/>
</parameter>
<parameter onlyformode="standard" name="VALUE" default="no" show="yes">
<value field="DUE" conversion="VALUETYPE"/>
</parameter>
</property>
<property name="PRIORITY" suppressempty="yes">
<value field="PRIORITY"/>
</property>
<property name="STATUS" onlyformode="standard" suppressempty="yes">
<value field="STATUS" conversion="emptyonly">
<enum name="COMPLETED" value="0"/>
<enum name="NEEDS-ACTION" value="1"/>
<enum name="IN-PROCESS" value="2"/>
<enum name="CANCELLED" value="3"/>
<enum name="ACCEPTED" value="4"/>
<enum name="TENTATIVE" value="5"/>
<enum name="DELEGATED" value="6"/>
<enum name="DECLINED" value="7"/>
<enum name="SENT" value="8"/>
<enum name="CONFIRMED" value="9"/>
<enum name="DRAFT" value="10"/>
<enum name="FINAL" value="11"/>
</value>
</property>
<property name="STATUS" onlyformode="old" suppressempty="yes">
<value field="STATUS" conversion="emptyonly">
<enum name="COMPLETED" value="0"/>
<enum name="NEEDS ACTION" value="1"/>
<enum mode="defaultvalue" value="1"/> <!-- catch unknown, but also non-conformant NEEDS_ACTION -->
<enum name="IN PROCESS" value="2"/>
<enum name="CANCELLED" value="3"/>
<enum name="ACCEPTED" value="4"/>
<enum name="TENTATIVE" value="5"/>
<enum name="DELEGATED" value="6"/>
<enum name="DECLINED" value="7"/>
<enum name="SENT" value="8"/>
<enum name="CONFIRMED" value="9"/>
<enum name="DRAFT" value="10"/>
<enum name="FINAL" value="11"/>
</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">
<value index="0" field="ALARM_TIME" conversion="emptyonly"/>
<value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
<value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
<value index="3" field="ALARM_MSG" conversion="emptyonly"/>
</property>
<property name="DALARM" onlyformode="old" values="4" suppressempty="yes">
<value index="0" field="ALARM_TIME" conversion="emptyonly"/>
<value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
<value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
<value index="3" field="ALARM_MSG" conversion="emptyonly"/>
</property>
<subprofile onlyformode="standard" name="VALARM" nummandatory="1" field="ALARM_TIME">
<property name="TRIGGER" suppressempty="no" mandatory="yes">
<value field="ALARM_TIME"/>
<parameter name="VALUE" default="no" show="yes">
<value field="ALARM_TIME" conversion="FULLVALUETYPE"/>
</parameter>
<parameter name="RELATED" default="no" show="yes">
<value field="ALARM_REL">
<enum mode="ignore" value="0"/>
<enum name="START" value="1"/>
<enum name="END" value="2"/>
</value>
</parameter>
</property>
<property name="ACTION" suppressempty="yes" mandatory="yes">
<value field="ALARM_ACTION"/>
</property>
<property name="DESCRIPTION" suppressempty="yes">
<value field="ALARM_MSG"/>
</property>
<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">
<value field="PARENT_UID"/>
</property>
<property onlyformode="standard" name="RELATED-TO" suppressempty="yes">
<value field="PARENT_UID"/>
<parameter onlyformode="standard" name="RELTYPE" default="no" positional="yes" show="yes">
<value>
<enum name="PARENT"/>
<enum mode="defaultvalue" name="other"/>
</value>
<position hasnot="other" shows="PARENT" field="PARENT_UID"/>
</parameter>
</property>
</subprofile>
<!-- sub-profile for event -->
<subprofile name="VEVENT" nummandatory="1" showifselectedonly="yes" field="ISEVENT" value="1">
<property name="LAST-MODIFIED" suppressempty="yes">
<value field="DMODIFIED"/>
</property>
<property name="DTSTAMP" suppressempty="yes" onlyformode="standard">
<value field="DGENERATED"/>
</property>
<property name="DCREATED" suppressempty="yes" onlyformode="old">
<value field="DCREATED"/>
</property>
<property name="CREATED" suppressempty="yes" onlyformode="standard">
<value field="DCREATED"/>
</property>
<property name="UID" suppressempty="yes">
<value field="UID"/>
</property>
<property name="SEQUENCE" suppressempty="yes">
<value field="SEQNO"/>
</property>
<property name="GEO" values="2" suppressempty="yes" onlyformode="standard" valueseparator=";">
<!-- LAT;LON in iCalendar 2.0 -->
<value index="0" field="GEO_LONG"/>
<value index="1" field="GEO_LAT"/>
</property>
<property onlyformode="standard" name="CATEGORIES" values="list" valueseparator="," suppressempty="yes">
<value field="CATEGORIES" />
<position field="CATEGORIES" repeat="array" minshow="0"/>
</property>
<property onlyformode="old" name="CATEGORIES" values="list" valueseparator=";" altvalueseparator="," suppressempty="yes">
<value field="CATEGORIES" />
<position field="CATEGORIES" repeat="array" minshow="0"/>
</property>
<property name="CLASS" suppressempty="yes">
<value field="CLASS">
<enum name="PUBLIC" value="0"/>
<enum name="PRIVATE" value="1"/>
<enum name="CONFIDENTIAL" value="2"/>
</value>
</property>
<property name="TRANSP" suppressempty="yes" onlyformode="standard">
<value field="TRANSP">
<enum name="OPAQUE" value="0"/>
<enum name="TRANSPARENT" value="1"/>
<enum name="TENTATIVE" value="2"/> <!-- according to Oracle de facto usage in vCalendar 1.0 -->
<enum name="OUT_OF_OFFICE" value="3"/> <!-- according to Oracle de facto usage in vCalendar 1.0 -->
<enum mode="defaultvalue" value="0"/>
</value>
</property>
<property name="TRANSP" suppressempty="yes" onlyformode="old">
<value field="TRANSP"/> <!-- directly numeric in vCalendar 1.0 -->
</property>
<property name="PRIORITY" suppressempty="yes">
<value field="PRIORITY"/>
</property>
<property name="SUMMARY" mandatory="yes">
<value field="SUMMARY"/>
</property>
<!-- 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>
<property name="LOCATION" suppressempty="yes" mandatory="no">
<value field="LOCATION"/>
</property>
<property name="DTSTART" suppressempty="yes" delayedparsing="1">
<value field="DTSTART" conversion="autodate"/>
<parameter onlyformode="standard" name="TZID" default="no" show="yes">
<value field="DTSTART" conversion="TZID"/>
</parameter>
<parameter onlyformode="standard" name="VALUE" default="no" show="yes">
<value field="DTSTART" conversion="VALUETYPE"/>
</parameter>
</property>
<!-- recurrence rule (with delayed parsing, as it is dependent on DTSTART) -->
<property name="RRULE" suppressempty="yes" delayedparsing="2">
<!-- Note: RR_FREQ is the beginning of a block of fields
suitable for the "rrule" conversion mode -->
<value field="RR_FREQ" conversion="rrule"/>
</property>
<!-- Symbian uses this, so it might make the client work with symbian-prepared servers better -->
<property name="X-RECURRENCE-ID" suppressempty="yes" onlyformode="old">
<value field="ORIGSTART" conversion="autodate"/>
</property>
<property name="RECURRENCE-ID" suppressempty="yes" onlyformode="standard" delayedparsing="1">
<value field="ORIGSTART" conversion="autodate"/>
<parameter name="TZID" default="no" show="yes">
<value field="ORIGSTART" conversion="TZID"/>
</parameter>
<parameter name="VALUE" default="no" show="yes">
<value field="ORIGSTART" conversion="VALUETYPE"/>
</parameter>
</property>
<!-- 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">
<value field="EXDATES" conversion="TZID"/>
</parameter>
</property>
<property name="EXDATE" values="list" suppressempty="yes" onlyformode="old" delayedparsing="1" valueseparator=";" altvalueseparator=",">
<value field="EXDATES"/>
<position field="EXDATES" repeat="array" increment="1" minshow="0"/>
</property>
<property name="DTEND" suppressempty="yes" delayedparsing="1">
<value field="DTEND" conversion="autoenddate"/>
<parameter onlyformode="standard" name="TZID" default="no" show="yes">
<value field="DTEND" conversion="TZID"/>
</parameter>
<parameter onlyformode="standard" name="VALUE" default="no" show="yes">
<value field="DTEND" conversion="VALUETYPE"/>
</parameter>
</property>
<property name="DURATION" suppressempty="yes" delayedparsing="1" onlyformode="standard">
<value field="DURATION"/>
<parameter onlyformode="standard" name="VALUE" default="no" show="no">
<value field="DURATION" conversion="VALUETYPE"/>
</parameter>
</property>
<property name="ATTENDEE" suppressempty="yes" onlyformode="old">
<value field="ATTENDEES"/>
<parameter name="ROLE" default="no" positional="yes" show="yes">
<value>
<enum name="ORGANIZER"/>
</value>
<position has="ORGANIZER" field="ORGANIZER" overwriteempty="yes"/>
<position hasnot="ORGANIZER" field="ATTENDEES" repeat="array" increment="1" overwriteempty="yes"/>
</parameter>
<parameter name="STATUS" default="no" show="yes">
<value field="ATTENDEE_PARTSTATS">
<enum name="NEEDS ACTION" value="1"/>
<enum mode="defaultvalue" value="1"/> <!-- catch unknown, but also non-conformant NEEDS_ACTION -->
<enum name="ACCEPTED" value="4"/>
<enum name="DECLINED" value="7"/>
<enum name="TENTATIVE" value="5"/>
<enum name="DELEGATED" value="6"/>
</value>
</parameter>
</property>
<property name="ATTENDEE" suppressempty="yes" onlyformode="standard">
<value field="ATTENDEES" conversion="mailto"/>
<position field="ATTENDEES" repeat="array" increment="1" minshow="0"/>
<parameter name="CN" default="no" show="yes" shownonempty="yes">
<value field="ATTENDEE_CNS"/>
</parameter>
<parameter name="PARTSTAT" default="no" show="yes">
<value field="ATTENDEE_PARTSTATS">
<enum name="NEEDS-ACTION" value="1"/>
<enum mode="defaultvalue" value="1"/> <!-- catch unknown, but also non-conformant NEEDS_ACTION -->
<enum name="ACCEPTED" value="4"/>
<enum name="DECLINED" value="7"/>
<enum name="TENTATIVE" value="5"/>
<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">
<value field="ORGANIZER" conversion="mailto"/>
<parameter name="CN" default="no" show="yes">
<value field="ORGANIZER_CN"/>
</parameter>
</property>
<!-- AALARM and DALARM both use the same fields -->
<property name="AALARM" onlyformode="old" values="4" suppressempty="yes">
<value index="0" field="ALARM_TIME" conversion="emptyonly"/>
<value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
<value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
<value index="3" field="ALARM_MSG" conversion="emptyonly"/>
</property>
<property name="DALARM" onlyformode="old" values="4" suppressempty="yes">
<value index="0" field="ALARM_TIME" conversion="emptyonly"/>
<value index="1" field="ALARM_SNOOZE" conversion="emptyonly"/>
<value index="2" field="ALARM_REPEAT" conversion="emptyonly"/>
<value index="3" field="ALARM_MSG" conversion="emptyonly"/>
</property>
<subprofile onlyformode="standard" name="VALARM" nummandatory="1" field="ALARM_TIME">
<property name="TRIGGER" suppressempty="no" mandatory="yes">
<value field="ALARM_TIME"/>
<parameter name="VALUE" default="no" show="yes">
<value field="ALARM_TIME" conversion="FULLVALUETYPE"/>
</parameter>
<parameter name="RELATED" default="no" show="yes">
<value field="ALARM_REL">
<enum mode="ignore" value="0"/>
<enum name="START" value="1"/>
<enum name="END" value="2"/>
</value>
</parameter>
</property>
<property name="ACTION" suppressempty="yes" mandatory="yes">
<value field="ALARM_ACTION"/>
</property>
<property name="DESCRIPTION" suppressempty="yes">
<value field="ALARM_MSG"/>
</property>
<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>
</profile>
</mimeprofile>
<!-- vCalendar 1.0 datatype, using vCalendar profile defined above -->
<datatype name="vCalendar10" basetype="vcalendar">
<version>1.0</version>
<use mimeprofile="vCalendar"/>
<incomingscript><![CDATA[
$VCALENDAR_INCOMING_SCRIPT
]]></incomingscript>
<outgoingscript><![CDATA[
$VCALENDAR_OUTGOING_SCRIPT
]]></outgoingscript>
</datatype>
<!-- iCalendar 2.0 datatype, using vCalendar profile defined above -->
<datatype name="iCalendar20" basetype="vcalendar">
<version>2.0</version>
<use mimeprofile="vCalendar"/>
<incomingscript><![CDATA[
$VCALENDAR_INCOMING_SCRIPT
]]></incomingscript>
<outgoingscript><![CDATA[
$VCALENDAR_OUTGOING_SCRIPT
]]></outgoingscript>
</datatype>
<!-- list of internal fields representing plain text note data -->
<fieldlist name="Note">
<field name="SYNCLVL" type="integer" compare="never"/>
<field name="SUBJECT" type="multiline" compare="always"/>
<field name="TEXT" type="multiline" compare="conflict" merge="lines"/>
</fieldlist>
<textprofile name="Note" fieldlist="Note">
<linemap field="SUBJECT">
<numlines>1</numlines>
<inheader>false</inheader>
<allowempty>true</allowempty>
<filterkeyword>SUBJECT</filterkeyword>
</linemap>
<linemap field="TEXT">
<numlines>0</numlines>
<inheader>false</inheader>
<allowempty>true</allowempty>
</linemap>
</textprofile>
<datatype name="note10" basetype="text">
<use profile="Note"/>
<typestring>text/plain</typestring>
<versionstring>1.0</versionstring>
</datatype>
<datatype name="note11" basetype="text">
<use profile="Note"/>
<typestring>text/plain</typestring>
<versionstring>1.1</versionstring>
</datatype>
<!-- list of internal fields representing vBookmark data -->
<fieldlist name="bookmarks">
<field name="REV" type="timestamp" compare="never" age="yes"/>
<field name="SYNCLVL" type="integer" compare="never"/>
<!-- Name -->
<field name="TITLE" type="string" compare="always"/>
<!-- categories and classification -->
<field name="CATEGORIES" type="string" compare="conflict" merge="fillempty"/>
<field name="CLASS" type="string" compare="conflict" merge="fillempty"/>
<!-- web addresses -->
<field name="URL" type="url" compare="slowsync" merge="fillempty"/>
<!-- Note -->
<field name="NOTE" type="multiline" compare="conflict" merge="lines"/>
</fieldlist>
<!-- vBookmark profile -->
<mimeprofile name="vBookmark" fieldlist="bookmarks">
<profile name="VBKM" nummandatory="0">
<property name="VERSION">
<value conversion="version"/>
</property>
<property name="X-LAST-MODIFIED">
<value field="REV"/>
</property>
<property name="TITLE">
<value field="TITLE"/>
</property>
<property name="URL">
<value field="URL"/>
</property>
<!-- non-standard properties -->
<property name="CATEGORIES">
<value field="CATEGORIES"/>
</property>
<property name="CLASS" suppressempty="yes">
<value field="CLASS"/>
</property>
<property name="NOTE" filter="no">
<value field="NOTE"/>
</property>
</profile>
</mimeprofile>
<!-- vBookmark datatype, using vBookmark profile defined above -->
<datatype name="vBookmark10" basetype="mimedir">
<typestring>text/x-vbookmark</typestring>
<versionstring>1.0</versionstring>
<use profile="vBookmark"/>
</datatype>
<fieldlists/>
<profiles/>
<datatypes/>
</datatypes>
<clientorserver/>
</sysync_config>