Hello,
on my way getting a resync between Evolution and Palm Tungsten E working
I applied some patches to plugins/palm_sync/src/vcard.c, perhaps these
are useful for others working with both evolution and palm devices?
Here are some comments, the full diff is at the end of the mail:
@@ -145,6 +146,9 @@
As described in my mail from 2004-01-05: Just take the summary of the
event as the description for the alarm (this is the default behaviour
from evolution).
@@ -693,12 +697,54 @@
(Be warned: I am very unexercised in programming in C (in general I use
java), so check my code. Perhaps the strncpy-stuff could be solved much
smarter using string functions from gtk-api?)
With this patch I generate a FN property within the vcard, simply by
combining firstname and lastname. This provides a better synchronization
with evolution!
@@ -743,8 +789,8 @@
Just swap the sequence of "WORK" and "FAX".
@@ -773,7 +819,7 @@
Put the streetname into "STREET" and not into "EXT ADD"
@@ -943,17 +989,22 @@
Now the values of the "ADR" property are used to fill the address fields
in palm's address db.
@@ -970,7 +1021,7 @@
Added "LABEL" to the list of ignored properties
Now the complete diff:
[EMAIL PROTECTED]:~/palmprg/multisync> cvs diff -uw plugins/palm_sync/src/vcard.c
Index: plugins/palm_sync/src/vcard.c
===================================================================
RCS file: /cvsroot/multisync/multisync/plugins/palm_sync/src/vcard.c,v
retrieving revision 1.16
diff -u -w -r1.16 vcard.c
--- plugins/palm_sync/src/vcard.c 29 Nov 2003 14:14:43 -0000 1.16
+++ plugins/palm_sync/src/vcard.c 25 Jan 2004 15:48:31 -0000
@@ -145,6 +146,9 @@
break;
}
+ if (appointment.description)
+ addPropValueO(prop, VCDescriptionPropO,
appointment.description);
+
prop = addPropValueO(prop, VCTriggerPropO, buffer);
addPropValueO(prop, VCRelatedPropO, "START");
addPropValueO(prop, VCValuePropO, "DURATION");
@@ -693,12 +697,54 @@
GString *vcardstr;
char *vcardptr;
gchar *label = NULL;
+ int firstnamelength = 0, lastnamelength = 0;
palm_debug(conn, 2, "Converting address to vcard");
vcard = newVObjectO(VCCardPropO);
addPropValueO(vcard, VCVersionPropO, "2.1");
+
+ if (address.entry[0])
+ lastnamelength = strlen(address.entry[0]);
+
+ if (address.entry[1])
+ firstnamelength= strlen(address.entry[1]);
+
+ // if we have first- or lastname compose a fullname
+ if (firstnamelength + lastnamelength > 0) {
+ char *tmp;
+ char *fname = NULL;
+
+ if (firstnamelength > 0) {
+ // we have firstname, so allocate place for firstname,
lastname, a space
+ // and trailing zero (we don't need the space, if we have no
lastname, but
+ // I don't mind, do you?
+
+ fname = malloc(firstnamelength + lastnamelength + 2);
+ strncpy(fname, address.entry[1], firstnamelength + 1);
+
+ if (lastnamelength > 0) {
+ // now append lastname
+ fname[firstnamelength] = ' ';
+ strncpy(fname + firstnamelength + 1, address.entry[0],
lastnamelength + 1);
+ }
+ } else {
+ // no firstname, so allocate place for lastname and trailing
zero
+ fname = malloc(lastnamelength + 1);
+ strncpy(fname, address.entry[0], lastnamelength + 1);
+ }
+
+ // do the conversion and use converted string
+ tmp = g_convert(fname, strlen(fname), "utf8", "cp1252", NULL, NULL,
NULL);
+ free(fname);
+ fname = tmp;
+
+ addPropValueO(vcard, VCFullNamePropO, fname);
+ }
+
+
+
for (i = 0; i < 19; i++) {
if (address.entry[i]) {
char *tmp;
@@ -743,8 +789,8 @@
break;
case 2:
prop = addPropValueO(vcard,
"TEL", address.entry[i]);
- addPropO(prop, "FAX");
addPropO(prop, "WORK");
+ addPropO(prop, "FAX");
break;
case 3:
prop = addPropValueO(vcard,
"TEL", address.entry[i]);
@@ -773,7 +819,7 @@
addrprop = addPropO(vcard, "ADR");
addPropValueO(addrprop, "ENCODING",
"QUOTED-PRINTABLE");
}
- addPropValueO(addrprop, "EXT ADD",
address.entry[i]);
+ addPropValueO(addrprop, "STREET",
address.entry[i]);
break;
case 9:
if (!addrprop) {
@@ -943,17 +989,22 @@
goto next;
}
- //Address
- //TODO
- if (!strcmp(attributes, "LABEL")) {
- if (isAPropertyOfO(v, "WORK"))
- entry->address.entry[8] =
fakeCStringO(vObjectUStringZValueO(v));
- if (!entry->address.entry[8])
- entry->address.entry[8] =
fakeCStringO(vObjectUStringZValueO(v));
- goto next;
- }
-
if (!strcmp(attributes, "ADR")) {
+ if (prop = isAPropertyOfO(v, VCStreetAddressPropO)) {
+ entry->address.entry[8] =
fakeCStringO(vObjectUStringZValueO(prop));
+ }
+ if (prop = isAPropertyOfO(v, VCCityPropO)) {
+ entry->address.entry[9] =
fakeCStringO(vObjectUStringZValueO(prop));
+ }
+ if (prop = isAPropertyOfO(v, VCRegionPropO)) {
+ entry->address.entry[10] =
fakeCStringO(vObjectUStringZValueO(prop));
+ }
+ if (prop = isAPropertyOfO(v, VCPostalCodePropO)) {
+ entry->address.entry[11] =
fakeCStringO(vObjectUStringZValueO(prop));
+ }
+ if (prop = isAPropertyOfO(v, VCCountryNamePropO)) {
+ entry->address.entry[12] =
fakeCStringO(vObjectUStringZValueO(prop));
+ }
goto next;
}
@@ -970,7 +1021,7 @@
}
//Ignore these
- if (!strcmp(attributes, "FN") || !strcmp(attributes, "VERSION") ||
!strcmp(attributes, "X-EVOLUTION-FILE-AS") || !strcmp(attributes, "UID"))
+ if (!strcmp(attributes, "LABEL") || !strcmp(attributes, "FN") ||
!strcmp(attributes, "VERSION") || !strcmp(attributes, "X-EVOLUTION-FILE-AS") ||
!strcmp(attributes, "UID"))
goto next;
//Catch all
Regards,
Thomas
--
Thomas Stieler <[EMAIL PROTECTED]>
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Multisync-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/multisync-devel