/usr/share/syncevolution/xml/scripting/server/12email.xml is in syncevolution-common 1.4-1ubuntu4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | <!-- The following email handling scripts are defined as script MACROS because they
are used in multiple <datatype> definitions below. This avoids duplicating these
script's source code in the config file -->
<macro name="EMAIL_INIT_SCRIPT"><![CDATA[
INTEGER ITEMLIMIT;
// default limit is limit of session
ITEMLIMIT = SIZELIMIT();
]]></macro>
<macro name="EMAIL_PROCESSITEM_SCRIPT"><![CDATA[
// pre-process item
if (UPPERCASE(FOLDER)=="INBOX") {
// In any case, prevent adding to inbox (delete remote items instead)
PREVENTADD();
// server always wins for inbox
CONFLICTSTRATEGY("server-wins");
if (SLOWSYNC()) {
// also prevent modifications in server
IGNOREUPDATE();
}
else {
// normal sync items going to inbox from client need special treatment
if (SYNCOP()=="add" || SYNCOP()=="replace") {
// make sure that existing server item will conflict with this item
if (LIMIT!=EMPTY && (LIMIT<0 || LIMIT>SIZELIMIT())) {
// force conflict only if this is a reload
FORCECONFLICT();
}
// make sure we never overwrite a body in the inbox
BODY = UNASSIGNED;
// delete always wins over replace in inbox (to avoid adds to inbox)
DELETEWINS();
}
}
}
else if (UPPERCASE(FOLDER)=="OUTBOX") {
// never try to change something in outbox
IGNOREUPDATE();
if (SYNCOP()!="delete") {
// - date of mail is NOW, set it such that a correct date is written to the DB
MAILDATE = DBNOW();
// MAILDATE = (INTEGER)DBNOW() - TIMEUNITS(120); // %%% backdate it 2 mins to make sure it does not get retransmitted
// - echo item as replace (to force-move it to the sent folder)
ECHOITEM("replace");
}
CONFLICTSTRATEGY("client-wins");
}
else if (UPPERCASE(FOLDER)=="SENT") {
// never try to change something in sent folder
IGNOREUPDATE();
// Server has precedence in case of conflicts
CONFLICTSTRATEGY("server-wins");
// Implement reload capability for sent items as well
if (SLOWSYNC()) {
// do not add new sent items to the server in slowsync
PREVENTADD(); // causes extra sent items on the client to be deleted
}
else {
// make sure that existing server item will conflict with this item
if (SYNCOP()=="replace") {
if (LIMIT!=EMPTY && (LIMIT<0 || LIMIT>SIZELIMIT())) {
// force conflict only if this is a reload
FORCECONFLICT();
REJECTITEM(200); // but do not process the item further
}
else {
// silently ignore other types of changes
REJECTITEM(200);
}
// make sure we never overwrite a body in the sent folder
BODY = UNASSIGNED;
}
}
}
else {
// Other folder
// - silently discard incoming item for other folder than the above
// except if it is a delete
if (SYNCOP()!="delete")
REJECTITEM(0);
}
]]></macro>
<macro name="EMAIL_MERGE_SCRIPT"><![CDATA[
// pre-process item
if (UPPERCASE(LOOSING.FOLDER)!="OUTBOX") {
// non-outbox (especially inbox) needs special merge to accomplish reload feature
// - loosing item is client's, winning is server's
if (LOOSING.LIMIT!=EMPTY) {
// loosing (remote) item specifies a new limit, override winning's default
WINNING.LIMIT=LOOSING.LIMIT;
SETWINNINGCHANGED(TRUE);
}
// make sure winning has right folder
WINNING.FOLDER=LOOSING.FOLDER;
// make sure a set read-flag gets propagated to server
if (LOOSING.ISREAD=="true") WINNING.ISREAD="true";
// merge other fields normally
MERGEFIELDS();
// make sure body does not get re-written to local DB even if merge would cause local update
LOOSING.BODY=UNASSIGNED;
}
else {
// normal merging in other folders
MERGEFIELDS();
}
]]></macro>
<macro name="EMAIL_OUTGOING_SCRIPT"><![CDATA[
// pre-process item
if (UPPERCASE(FOLDER)=="OUTBOX") {
// writing to outbox is always the ECHOITEM
// - cause item to move into "sent" folder
FOLDER = "sent";
if (!SESSIONVAR("retransfer_body")) {
// - prevent body retransfer, but not for dumb P800/P900/M600/P990 clients
BODY = UNASSIGNED; // prevent body transfer
ATT_COUNT = 0; // prevent attachment transfer
ATT_CONTENTS = UNASSIGNED;
// basically, this item is not limited (already complete on the client)
// even if contents are not sent
LIMIT = -1;
SETSIZELIMIT(-1);
}
}
else {
// outgoing item to any folder of of remote (inbox, sent...)
// - limit body to what is set in the LIMIT field
// %%% probably obsolete, as textitem will handle limit field automatically for >=V1.0.8.21
IF (LIMIT==EMPTY)
LIMIT = SIZELIMIT(); // if none set already, use default for this item (=default of datastore, if not SETSIZELIMIT() called before for this item generation)
}
// set limit for item generator
if (LIMIT!=EMPTY)
SETSIZELIMIT(LIMIT);
]]></macro>
<macro name="EMAIL_FILTERINIT_SCRIPT"><![CDATA[
// check if we need to filter
INTEGER NEEDFILTER;
NEEDFILTER =
!DBHANDLESOPTS() && // only if DB cannot handle it
(STARTDATE()!=EMPTY); // and only if a start date is set (end date not needed as there are never future emails today)
SETFILTERALL(NEEDFILTER);
RETURN NEEDFILTER;
]]></macro>
<macro name="EMAIL_FILTER_SCRIPT"><![CDATA[
INTEGER PASSES;
// check if item passes filter
PASSES=FALSE;
// Emails pass if they have a MAILDATE on or later than start date
PASSES = MAILDATE>=STARTDATE();
RETURN PASSES;
]]></macro>
|