Hello cruel, synchronised world :-)

For the most part, multisync works brilliantly for me.  I'm syncing my
Siemens S55 phone with Evolution, but there are some occasional
glitches.  I've recovered quite easily from them most of the time, but
yesterday I majorly stuffed up my calendar :-) I managed to get out of
this by deleting ~/.multisync/1/remoteevolutionchanges (it contained a
lot of bogus entries it was continually sending to my phone), manually
resetting some change counters and syncing the entire calendar across
again.  Just pressing Resync didn't work for me.

Anyway, my problems yesterday prompted me to break my silence :-)

Issues I've encountered:

.  crashing phone:  occasionally, my phone will crash mid-sync.  Most
  of the time, booting the phone, and restarting multisync (reboot
  everything mentality :-) will fix it.  Occasionally, I'll get stuck
  with the phone crashing on every sync though.  I think one such bug
  in the phone is when you try to sync a birthday event over to it in
  certain circumstances.

.  all day events:  syncing between Evo and s55 of all-day events
  results in midnight-midnight events in the s55.  a) this is done in
  GMT, so its 8am -> 8am for me, and b) midnight-midnight localtime
  spills over into the next day (looks bad on s55 calendar, I saw
  someone else asking about that too).
  
  I patched the code to equate vCal v2 all day events to vCal v1
  zero-minute events at midnight on the day.  Which is great for the
  s55 (but probably not so good for other v1 vCal devices; I think the
  "proper" way to do it on the s55 is to supply a midnight starttime
  and no end time at all).  The patch is attached.  It needs some
  work, and probably a checkbox exposed to the UI to turn it on and
  off.  It breaks multiday allday events.  I was hoping to refine it
  later, but best to put these things out there in case I don't get
  time or I'm barking up the wrong tree.

.  Evo contact "labels":  contacts sync to Evo with a ADR;WORK:  line,
  but Evo won't display them by default without a label.  multisync
  might like to insert a LABEL; line too on the Evolution side.  I
  ended up exporting my Contact database to a .vcs file, fixing it
  with a perl script, and reimporting :-)

So I thought I'd put these out there just to introduce myself :-)

,dunc
--- multisync-0.81.orig/src/sync_vtype.c        2003-12-03 09:24:12.000000000 +0800
+++ multisync-0.81/src/sync_vtype.c     2004-03-15 12:48:42.000000000 +0800
@@ -395,13 +395,14 @@
       if (value && alldayevent) {
        int y, m, d, h, min, s, res;
        char utc = ' ';
+       time_t fixtz;
        res = sscanf(value, 
                     "%4d%2d%2dT%2d%2d%2d%c", &y, &m, &d, &h, &min, &s, &utc);
        if (res >= 3) {
          // Date only, convert to 00:00
          if (!dtend) { // DTSTART
            g_free(value);
-           value = g_strdup_printf("%04d%02d%02dT000000Z", y, m, d);
+           value = g_strdup_printf("%04d%02d%02dT000000", y, m, d);
          } else { // DTEND
            time_t t = sync_dt_to_timet(value);
            char *tpos;
@@ -412,7 +413,7 @@
            if (tpos) {
              char *tmp;
              tpos[0] = 0;
-             tmp = g_strdup_printf("%sT240000Z", value);
+             tmp = g_strdup_printf("%sT000000", value);
              g_free(value);
              value = tmp;
            }
@@ -420,26 +421,21 @@
        }
       }
       if (value && dt1to2) {
-       int y, m, d, h, min, s, res;
-       char utc = ' ';
-       res = sscanf(value, 
-                    "%4d%2d%2dT%2d%2d%2d%c", &y, &m, &d, &h, &min, &s, &utc);
-       if (res == 7 && (h == 0|| h == 24) && min == 0 && s == 0) {
+       struct tm *lt;
+       time_t t;
+
+       t = sync_dt_to_timet(value);
+       if (dtend)
+         t += 86400;
+
+       lt = localtime(&t);
+       if (lt->tm_hour == 0 && lt->tm_min == 0 && lt->tm_sec == 0) {
          // All day event?
          g_free(value);
-         
+
          g_string_append(outcard, ";VALUE=DATE");
-         value = g_strdup_printf("%04d%02d%02d", y, m, d);
-         if (h == 24) {
-           time_t t = sync_dt_to_timet(value);
-           char *tpos;
-           t += 24*3600; // Move one day forwards
-           g_free(value);
-           value = sync_timet_to_dt(t);
-           tpos = strstr(value, "T");
-           if (tpos)
-             tpos[0] = 0; // End string after date
-         }         
+         value = g_strdup_printf("%04d%02d%02d", lt->tm_year + 1900,
+               lt->tm_mon + 1, lt->tm_mday);
        }
       }
       if (fixdst && value) {

Reply via email to