* The groupware folders "Calendar", "Contacts", "Notes", and "Tasks" are
authorArt Cancro <ajc@citadel.org>
Wed, 11 Feb 2004 03:50:49 +0000 (03:50 +0000)
committerArt Cancro <ajc@citadel.org>
Wed, 11 Feb 2004 03:50:49 +0000 (03:50 +0000)
  now presented as subfolders of INBOX when using IMAP.  This is for the
  purpose of Kolab compatibility.

citadel/ChangeLog
citadel/imap_tools.c
citadel/sysconfig.h

index ee6e9db9c3bb67201552e8b4a4b87b0554aede45..3a001a0ce75334a242f9cf0411c4a7f1a32c4d1e 100644 (file)
@@ -1,4 +1,9 @@
  $Log$
+ Revision 614.26  2004/02/11 03:50:49  ajc
+ * The groupware folders "Calendar", "Contacts", "Notes", and "Tasks" are
+   now presented as subfolders of INBOX when using IMAP.  This is for the
+   purpose of Kolab compatibility.
+
  Revision 614.25  2004/02/09 22:40:57  error
  * oops...also close the client on EOF/error on tty OUTPUT
 
@@ -5308,3 +5313,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import
+
index 47941d117102755e3306c3759a6b8449ee9c1b7b..9215873aa0b1fb88a6dc2ff554971e00f0be02fe 100644 (file)
@@ -97,13 +97,27 @@ void imap_mailboxname(char *buf, int bufsize, struct ctdlroom *qrbuf)
        int i;
 
        /*
-        * For mailboxes, just do it straight...
+        * For mailboxes, just do it straight.
+        * Also handle Kolab-compatible groupware folder names.
         */
        if (qrbuf->QRflags & QR_MAILBOX) {
                safestrncpy(buf, qrbuf->QRname, bufsize);
                strcpy(buf, &buf[11]);
-               if (!strcasecmp(buf, MAILROOM))
+               if (!strcasecmp(buf, MAILROOM)) {
                        strcpy(buf, "INBOX");
+               }
+               if (!strcasecmp(buf, USERCALENDARROOM)) {
+                       sprintf(buf, "INBOX|%s", USERCALENDARROOM);
+               }
+               if (!strcasecmp(buf, USERCONTACTSROOM)) {
+                       sprintf(buf, "INBOX|%s", USERCONTACTSROOM);
+               }
+               if (!strcasecmp(buf, USERTASKSROOM)) {
+                       sprintf(buf, "INBOX|%s", USERTASKSROOM);
+               }
+               if (!strcasecmp(buf, USERNOTESROOM)) {
+                       sprintf(buf, "INBOX|%s", USERNOTESROOM);
+               }
        }
        /*
         * Otherwise, prefix the floor name as a "public folders" moniker
@@ -149,11 +163,32 @@ int imap_roomname(char *rbuf, int bufsize, char *foldername)
 
        /*
         * Convert the crispy idiot's reserved names to our reserved names.
+        * Also handle Kolab-compatible groupware folder names.
         */
        if (!strcasecmp(foldername, "INBOX")) {
                safestrncpy(rbuf, MAILROOM, bufsize);
                ret = (0 | IR_MAILBOX);
        }
+       else if ( (!strncasecmp(foldername, "INBOX", 5))
+             && (!strcasecmp(&foldername[6], USERCALENDARROOM)) ) {
+               safestrncpy(rbuf, USERCALENDARROOM, bufsize);
+               ret = (0 | IR_MAILBOX);
+       }
+       else if ( (!strncasecmp(foldername, "INBOX", 5))
+             && (!strcasecmp(&foldername[6], USERCONTACTSROOM)) ) {
+               safestrncpy(rbuf, USERCONTACTSROOM, bufsize);
+               ret = (0 | IR_MAILBOX);
+       }
+       else if ( (!strncasecmp(foldername, "INBOX", 5))
+             && (!strcasecmp(&foldername[6], USERTASKSROOM)) ) {
+               safestrncpy(rbuf, USERTASKSROOM, bufsize);
+               ret = (0 | IR_MAILBOX);
+       }
+       else if ( (!strncasecmp(foldername, "INBOX", 5))
+             && (!strcasecmp(&foldername[6], USERNOTESROOM)) ) {
+               safestrncpy(rbuf, USERNOTESROOM, bufsize);
+               ret = (0 | IR_MAILBOX);
+       }
        else if (levels > 1) {
                extract(floorname, foldername, 0);
                strcpy(roomname, &foldername[strlen(floorname)+1]);
index 39ea373fe5d76880a13e5662c80678c86949e0a9..257b779effc7f1c9789a6fdb9a41b20ff514d4bf 100644 (file)
 #define USERCALENDARROOM       "Calendar"
 #define USERTASKSROOM          "Tasks"
 #define USERCONTACTSROOM       "Contacts"
+#define USERNOTESROOM          "Notes"
 #define PAGELOGROOM            "Sent/Received Pages"
 #define SYSCONFIGROOM          "Local System Configuration"
 #define SMTP_SPOOLOUT_ROOM     "__CitadelSMTPspoolout__"