Hi 

and sorry for the email barrage. Should have done some more testing
before sending the first ones. Now here's a list of some test results:

1. Multisync doesn't store a copy of the devinf from the device nor
request it. If the device doesn't send it (like a 7650 never does after
the initial connection), then MS doesn't know e.g. what version of iCal
it should send. A 7650 can only handle 1.0.  The handling of devinf
should probably be done by somebody more familiar with the codebase.

(For testing further I modified the plugin to always send 1.0).

2. As I mentioned earlier, the 7650 only handles DESCRIPTION and not
SUMMARY, whereas evo wants SUMMARY. I've added some code to
sync_vtype_convert that adds a SUMMARY if none is found. A diff
(ms-desc-summary.diff) against the cvs snapshot is attached.

3. Again, as mentioned, multisync assumes that changes have been
successfully sent after sending them to the phone, regardless of if the
phone responds with the UID mapping. So if any error occurs, the entry
is lost. Who is responsible for setting entries as synched?

4. If after (3.) changes are made to those entries, MS thinks it can
send a 'Replace' to the device, but can't of course send the
Target/LocURI. The sync client on the phone then breaks the connection.
I don't quite know how this should be fixed. Is the object marked for
modification since we thought it was added? Or is it wrong to try to
modify something that we don't have an ID mapping for? And would that
mean that it should me multisync that changes the operation, and not the
plugin? If it is correct for the plugin to do this, then the attached
diff (ms-syncml-uid.diff) could be used.

5. Minor thing: the user interface that shows conflicts doesn't decode
the quoted-printable text.

6. The 7650 supports recurring events, but not exclusions for them,
which makes them pretty useless. I wonder if we should fake the
recurrence in this case or not?

Regards,
        Mika Raento

-- 
Mika Raento           mailto:[EMAIL PROTECTED]       http://www.iki.fi/mikie/
"You can't *ADD* things and come out with *LESS* than you started with!"
"I  can  do  that!  It's  a  free  country!  I've  got  my  rights!"
                                      -from Calvin & Hobbes by Watterson

--- multisync-cvs-snapshot/src/sync_vtype.c	Tue Apr  6 13:34:07 2004
+++ multisync/src/sync_vtype.c	Mon Dec 13 19:10:57 2004
@@ -98,6 +98,7 @@
       gboolean triggervaluedatetime = FALSE, triggerrelatedend = FALSE;
       gboolean ver2rrule = FALSE, ver1rrule = FALSE;
       gboolean addfn = FALSE;
+      gboolean addsummary = FALSE;
       gboolean addlabel = FALSE;
       gboolean adr = FALSE;
       gboolean fixlocaltime = FALSE;
@@ -180,6 +181,13 @@
 	} else
 	  g_free(fn);
       }
+      if (!g_strcasecmp(name, "DESCRIPTION")) {
+	char *summary = sync_get_key_data(card, "SUMMARY");
+	if (!summary) {
+	  addsummary = TRUE;
+	} else
+	  g_free(summary);
+      }
       if (!g_strcasecmp(name, "ADR")) {
 	char *label = sync_get_key_data(card, "LABEL");
 	adr = TRUE;
@@ -278,6 +286,7 @@
 	    g_string_sprintfa(outcard, "DESCRIPTION:%s\r\n", descr);
 	  } else {
 	    summary = sync_get_key_data(card, "SUMMARY");
+	    if (!summary) summary = sync_get_key_data(card, "DESCRIPTION");
 	    if (summary) {
 	      g_string_sprintfa(outcard, "DESCRIPTION:%s\r\n", summary);
 	      g_free(summary);
@@ -598,6 +607,13 @@
 	}
 	g_strfreev(data);
       }
+      if (addsummary && value) {
+        char* summary = sync_vtype_encode_qp(value);
+        g_string_append(outcard, "SUMMARY");
+	g_string_sprintfa(outcard, ";ENCODING=QUOTED-PRINTABLE:%s\r\n",
+			    summary);
+	g_free(summary);
+      }
       
       g_free(value);
     }
@@ -605,6 +621,7 @@
     if (incard)
       incard += 1;
   }
+
   ret = outcard->str;
   g_string_free(outcard, FALSE);
   g_free(incard);
--- multisync-cvs-snapshot/plugins/syncml_plugin/src/syncml_engine.c	Sat Apr  3 20:08:02 2004
+++ multisync/plugins/syncml_plugin/src/syncml_engine.c	Mon Dec 13 19:54:40 2004
@@ -572,12 +572,13 @@
       if (maxsizereached)
 	return(FALSE); // We want to send, but we cannot
       obj->sent = TRUE;
-      if (obj->change.change_type == SYNC_OBJ_MODIFIED)
+      if (obj->change.change_type == SYNC_OBJ_MODIFIED && obj->change.uid)
 	cmd = xmlNewChild(hdr, NULL, "Replace", NULL);
-      else if (obj->change.change_type == SYNC_OBJ_ADDED)
+      else if (obj->change.change_type == SYNC_OBJ_ADDED || ! obj->change.uid)
 	cmd = xmlNewChild(hdr, NULL, "Add", NULL);
-      else if (obj->change.change_type == SYNC_OBJ_SOFTDELETED ||
-	       obj->change.change_type == SYNC_OBJ_HARDDELETED)
+      else if ( obj->change.uid && (
+		obj->change.change_type == SYNC_OBJ_SOFTDELETED ||
+	       obj->change.change_type == SYNC_OBJ_HARDDELETED ) )
 	cmd = xmlNewChild(hdr, NULL, "Delete", NULL);
       if (cmd) {
 	node = xmlNewChildInt(cmd, NULL, "CmdID", state->cmdid++);

Reply via email to