* add outfunction to MSGS that just outputs ID|EUID
authorWilfried Göesgens <willi@citadel.org>
Sun, 25 Oct 2009 13:31:57 +0000 (13:31 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 25 Oct 2009 13:31:57 +0000 (13:31 +0000)
citadel/debian/rules
citadel/msgbase.c
citadel/msgbase.h

index b3c036451b0ae6ebfcd10e7bb4dc99016da83a1d..c9b87e558f686c3a01ccc02902daa85f5bdaf342 100755 (executable)
@@ -53,10 +53,6 @@ configure-stamp:
                --with-autosysconfdir=/var/lib/citadel/data/ \
                --with-pam \
                --with-db \
-               --with-zlib \
-               --with-ldap \
-               --with-libical \
-               --with-libsieve \
                --enable-debug $(EXTRA_ARGS) $(PROFILE_ARGS) $(THREAD_ARGS)
 
        touch configure-stamp
index 53d0fccbaca34607e590e09a0d5513c62e20ac73..2de00fd2909475770ebbcdfb4b616487e03b04e7 100644 (file)
@@ -296,6 +296,28 @@ void headers_listing(long msgnum, void *userdata)
        CtdlFreeMessage(msg);
 }
 
+/*
+ * Back end for the MSGS command: output EUID header.
+ */
+void headers_euid(long msgnum, void *userdata)
+{
+       struct CtdlMessage *msg;
+
+       msg = CtdlFetchMessage(msgnum, 0);
+       if (msg == NULL) {
+               cprintf("%ld||\n", msgnum);
+               return;
+       }
+
+       cprintf("%ld|%s|\n",
+               msgnum,
+               (msg->cm_fields['U'] ? msg->cm_fields['U'] : "")
+       );
+       CtdlFreeMessage(msg);
+}
+
+
+
 
 
 /* Determine if a given message matches the fields in a message template.
@@ -580,7 +602,7 @@ void CtdlSetSeen(long *target_msgnums, int num_target_msgnums,
 int CtdlForEachMessage(int mode, long ref, char *search_string,
                        char *content_type,
                        struct CtdlMessage *compare,
-                       void (*CallBack) (long, void *),
+                        ForEachMsgCallback CallBack,
                        void *userdata)
 {
 
@@ -773,14 +795,26 @@ void cmd_msgs(char *cmdbuf)
        int i;
        int with_template = 0;
        struct CtdlMessage *template = NULL;
-       int with_headers = 0;
        char search_string[1024];
+       ForEachMsgCallback CallBack;
 
        extract_token(which, cmdbuf, 0, '|', sizeof which);
        cm_ref = extract_int(cmdbuf, 1);
        extract_token(search_string, cmdbuf, 1, '|', sizeof search_string);
        with_template = extract_int(cmdbuf, 2);
-       with_headers = extract_int(cmdbuf, 3);
+       switch (extract_int(cmdbuf, 3))
+       {
+       default:
+       case MSG_HDRS_BRIEF:
+               CallBack = simple_listing;
+               break;
+       case MSG_HDRS_ALL:
+               CallBack = headers_listing;
+               break;
+       case MSG_HDRS_EUID:
+               CallBack = headers_euid;
+               break;
+       }
 
        strcat(which, "   ");
        if (!strncasecmp(which, "OLD", 3))
@@ -836,13 +870,12 @@ void cmd_msgs(char *cmdbuf)
        }
 
        CtdlForEachMessage(mode,
-                       ( (mode == MSGS_SEARCH) ? 0 : cm_ref ),
-                       ( (mode == MSGS_SEARCH) ? search_string : NULL ),
-                       NULL,
-                       template,
-                       (with_headers ? headers_listing : simple_listing),
-                       NULL
-       );
+                          ( (mode == MSGS_SEARCH) ? 0 : cm_ref ),
+                          ( (mode == MSGS_SEARCH) ? search_string : NULL ),
+                          NULL,
+                          template,
+                          CallBack,
+                          NULL);
        if (template != NULL) CtdlFreeMessage(template);
        cprintf("000\n");
 }
index 39e274630eb2380237101bce6868ae4b8351a73f..999f46138c9a7cc2d16dffbbb09387987ec55614 100644 (file)
@@ -15,6 +15,12 @@ enum {
        MSGS_SEARCH
 };
 
+enum {
+       MSG_HDRS_BRIEF = 0,
+       MSG_HDRS_ALL = 1,
+       MSG_HDRS_EUID = 4
+};
+
 /*
  * Possible return codes from CtdlOutputMsg()
  */
@@ -112,12 +118,13 @@ void TDAP_AdjRefCount(long, int);
 int TDAP_ProcessAdjRefCountQueue(void);
 void simple_listing(long, void *);
 int CtdlMsgCmp(struct CtdlMessage *msg, struct CtdlMessage *template);
+typedef void (*ForEachMsgCallback)(long MsgNumber, void *UserData);
 int CtdlForEachMessage(int mode,
                        long ref,
                        char *searchstring,
                        char *content_type,
                        struct CtdlMessage *compare,
-                        void (*CallBack) (long, void *),
+                        ForEachMsgCallback CallBack,
                        void *userdata);
 int CtdlDeleteMessages(char *, long *, int, char *);
 void CtdlWriteObject(char *req_room,                   /* Room to stuff it in */