]> code.citadel.org Git - citadel.git/blobdiff - citadel/msgbase.c
* Implemented BOUNCE BOUNCE BOUNCE
[citadel.git] / citadel / msgbase.c
index fed836cbd1b2e65f082601daed5f87a4aba523bd..8c3e06e8011786c4657b524d79aec441fff89a46 100644 (file)
@@ -5,12 +5,27 @@
  *
  */
 
+#ifdef DLL_EXPORT
+#define IN_LIBCIT
+#endif
+
 #include "sysdep.h"
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <fcntl.h>
-#include <time.h>
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
 #include <ctype.h>
 #include <string.h>
 #include <syslog.h>
@@ -20,6 +35,7 @@
 #include <sys/stat.h>
 #include "citadel.h"
 #include "server.h"
+#include "dynloader.h"
 #include "database.h"
 #include "msgbase.h"
 #include "support.h"
@@ -29,7 +45,6 @@
 #include "user_ops.h"
 #include "file_ops.h"
 #include "control.h"
-#include "dynloader.h"
 #include "tools.h"
 #include "mime_parser.h"
 #include "html.h"
@@ -365,6 +380,8 @@ int CtdlForEachMessage(int mode, long ref,
        struct SuppMsgInfo smi;
        struct CtdlMessage *msg;
        int is_seen;
+       long lastold = 0L;
+       int printed_lastold = 0;
 
        /* Learn about the user and room in question */
        get_mm();
@@ -434,19 +451,25 @@ int CtdlForEachMessage(int mode, long ref,
                for (a = 0; a < num_msgs; ++a) {
                        thismsg = msglist[a];
                        is_seen = is_msg_in_mset(vbuf.v_seen, thismsg);
-                       if ((thismsg > 0)
+                       if (is_seen) lastold = thismsg;
+                       if ((thismsg > 0L)
                            && (
 
                                       (mode == MSGS_ALL)
                                       || ((mode == MSGS_OLD) && (is_seen))
                                       || ((mode == MSGS_NEW) && (!is_seen))
-                                           /* FIXME handle lastold mode */
                                       || ((mode == MSGS_LAST) && (a >= (num_msgs - ref)))
                                   || ((mode == MSGS_FIRST) && (a < ref))
                                || ((mode == MSGS_GT) && (thismsg > ref))
                                || ((mode == MSGS_EQ) && (thismsg == ref))
                            )
                            ) {
+                               if ((mode == MSGS_NEW) && (CC->usersupp.flags & US_LASTOLD) && (lastold > 0L) && (printed_lastold == 0) && (!is_seen)) {
+                                       if (CallBack)
+                                               CallBack(lastold, userdata);
+                                       printed_lastold = 1;
+                                       ++num_processed;
+                               }
                                if (CallBack) CallBack(thismsg, userdata);
                                ++num_processed;
                        }
@@ -807,7 +830,7 @@ void fixed_output(char *name, char *filename, char *partnum, char *disp,
                char *ptr;
                char *wptr;
                size_t wlen;
-               CIT_UBYTE ch;
+               CIT_UBYTE ch = 0;
        
                if (!strcasecmp(cbtype, "multipart/alternative")) {
                        strcpy(ma->prefix, partnum);
@@ -832,9 +855,13 @@ void fixed_output(char *name, char *filename, char *partnum, char *disp,
                        wptr = content;
                        while (wlen--) {
                                ch = *wptr++;
+                               /**********
                                if (ch==10) cprintf("\r\n");
                                else cprintf("%c", ch);
+                                **********/
+                               cprintf("%c", ch);
                        }
+                       if (ch != '\n') cprintf("\n");
                }
                else if (!strcasecmp(cbtype, "text/html")) {
                        ptr = html_to_ascii(content, 80, 0);
@@ -1520,7 +1547,7 @@ void serialize_message(struct ser_ret *ret,               /* return values */
                ret->len = ret->len +
                        strlen(msg->cm_fields[(int)forder[i]]) + 2;
 
-       lprintf(9, "calling malloc(%d)\n", ret->len);
+       lprintf(9, "serialize_message() calling malloc(%d)\n", ret->len);
        ret->ser = mallok(ret->len);
        if (ret->ser == NULL) {
                ret->len = 0;
@@ -2751,10 +2778,8 @@ char *CtdlGetSysConfig(char *sysconfname) {
 
        getroom(&CC->quickroom, hold_rm);
 
-       lprintf(9, "eggstracting...\n");
        if (conf != NULL) do {
                extract_token(buf, conf, 0, '\n');
-               lprintf(9, "eggstracted <%s>\n", buf);
                strcpy(conf, &conf[strlen(buf)+1]);
        } while ( (strlen(conf)>0) && (strlen(buf)>0) );