From 981c64649e8886f81cb64e31ac80d8bc56b0923d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sun, 25 Oct 2009 13:31:57 +0000 Subject: [PATCH] * add outfunction to MSGS that just outputs ID|EUID --- citadel/debian/rules | 4 ---- citadel/msgbase.c | 53 +++++++++++++++++++++++++++++++++++--------- citadel/msgbase.h | 9 +++++++- 3 files changed, 51 insertions(+), 15 deletions(-) diff --git a/citadel/debian/rules b/citadel/debian/rules index b3c036451..c9b87e558 100755 --- a/citadel/debian/rules +++ b/citadel/debian/rules @@ -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 diff --git a/citadel/msgbase.c b/citadel/msgbase.c index 53d0fccba..2de00fd29 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -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"); } diff --git a/citadel/msgbase.h b/citadel/msgbase.h index 39e274630..999f46138 100644 --- a/citadel/msgbase.h +++ b/citadel/msgbase.h @@ -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 */ -- 2.30.2