]> code.citadel.org Git - citadel.git/blobdiff - webcit/messages.c
* get synced with citadels mime_parser
[citadel.git] / webcit / messages.c
index cfce5f9743c401005144e8bd4dc941cae399fe0f..96fe8cbe36136909859bb5171f57a751ecc69226 100644 (file)
@@ -127,7 +127,18 @@ void utf8ify_rfc822_string(char *buf) {
                        ibuflen = CtdlDecodeBase64(ibuf, istr, strlen(istr));
                }
                else if (!strcasecmp(encoding, "Q")) {  /**< quoted-printable */
-                       ibuflen = CtdlDecodeQuotedPrintable(ibuf, istr, strlen(istr));
+                       size_t len;
+                       long pos;
+                       
+                       len = strlen(istr);
+                       pos = 0;
+                       while (pos < len)
+                       {
+                               if (istr[pos] == '_') istr[pos] = ' ';
+                               pos++;
+                       }
+
+                       ibuflen = CtdlDecodeQuotedPrintable(ibuf, istr, len);
                }
                else {
                        strcpy(ibuf, istr);             /**< unknown encoding */
@@ -966,7 +977,7 @@ void read_message(long msgnum, int printable_view, char *section) {
        wprintf("</tr></table>\n");
 
        /** Begin body */
-       wprintf("<table border=0 width=100%% bgcolor=\"#FFFFFF\" "
+       wprintf("<table class=\"messages_background\" "
                "cellpadding=1 cellspacing=0><tr><td>");
 
        /**
@@ -2068,7 +2079,7 @@ int summcmp_rdate(const void *s1, const void *s2) {
  */
 void readloop(char *oper)
 {
-       char cmd[SIZ];
+       char cmd[256];
        char buf[SIZ];
        char old_msgs[SIZ];
        int a, b;
@@ -2140,23 +2151,39 @@ void readloop(char *oper)
        else if (!strcmp(oper, "readold")) {
                strcpy(cmd, "MSGS OLD");
        }
+       else if (!strcmp(oper, "do_search")) {
+               sprintf(cmd, "MSGS SEARCH|%s", bstr("query"));
+       }
        else {
                strcpy(cmd, "MSGS ALL");
        }
 
        if ((WC->wc_view == VIEW_MAILBOX) && (maxmsgs > 1)) {
                is_summary = 1;
-               strcpy(cmd, "MSGS ALL");
+               if (!strcmp(oper, "do_search")) {
+                       sprintf(cmd, "MSGS SEARCH|%s", bstr("query"));
+               }
+               else {
+                       strcpy(cmd, "MSGS ALL");
+               }
        }
 
        if ((WC->wc_view == VIEW_ADDRESSBOOK) && (maxmsgs > 1)) {
                is_addressbook = 1;
-               strcpy(cmd, "MSGS ALL");
+               if (!strcmp(oper, "do_search")) {
+                       sprintf(cmd, "MSGS SEARCH|%s", bstr("query"));
+               }
+               else {
+                       strcpy(cmd, "MSGS ALL");
+               }
                maxmsgs = 9999999;
        }
 
-       if (is_summary) {
-               strcpy(cmd, "MSGS ALL|||1");    /**< fetch header summary */
+       if (is_summary) {                       /**< fetch header summary */
+               snprintf(cmd, sizeof cmd, "MSGS %s|%s||1",
+                       (!strcmp(oper, "do_search") ? "SEARCH" : "ALL"),
+                       (!strcmp(oper, "do_search") ? bstr("query") : "")
+               );
                startmsg = 1;
                maxmsgs = 9999999;
        }
@@ -2202,7 +2229,7 @@ void readloop(char *oper)
        if (nummsgs == 0) {
 
                if ((!is_tasks) && (!is_calendar) && (!is_notes) && (!is_addressbook)) {
-                       wprintf("<em>");
+                       wprintf("<div align=\"center\"><br /><em>");
                        if (!strcmp(oper, "readnew")) {
                                wprintf(_("No new messages."));
                        } else if (!strcmp(oper, "readold")) {
@@ -2210,7 +2237,7 @@ void readloop(char *oper)
                        } else {
                                wprintf(_("No messages here."));
                        }
-                       wprintf("</em>\n");
+                       wprintf("</em><br /></div>\n");
                }
 
                goto DONE;
@@ -2556,6 +2583,7 @@ void post_mime_to_server(void) {
 
        /** RFC2045 requires this, and some clients look for it... */
        serv_puts("MIME-Version: 1.0");
+       serv_puts("X-Mailer: " SERVER);
 
        /** If there are attachments, we have to do multipart/mixed */
        if (WC->first_attachment != NULL) {
@@ -2591,7 +2619,7 @@ void post_mime_to_server(void) {
                        encoded_length = ((att->length * 150) / 100);
                        encoded = malloc(encoded_length);
                        if (encoded == NULL) break;
-                       CtdlEncodeBase64(encoded, att->data, att->length);
+                       CtdlEncodeBase64(encoded, att->data, att->length, 1);
 
                        serv_printf("--%s", boundary);
                        serv_printf("Content-type: %s", att->content_type);
@@ -2768,6 +2796,18 @@ void display_enter(void)
                is_anonymous = 1;
        }
 
+       /** First test to see whether this is a room that requires recipients to be entered */
+       serv_puts("ENT0 0");
+       serv_getln(buf, sizeof buf);
+       if (!strncmp(buf, "570", 3)) {          /** 570 means that we need a recipient here */
+               recipient_required = 1;
+       }
+       else if (buf[0] != '2') {               /** Any other error means that we cannot continue */
+               sprintf(WC->ImportantMessage, "%s", &buf[4]);
+               readloop("readnew");
+               return;
+       }
+
        /**
         * Are we perhaps in an address book view?  If so, then an "enter
         * message" command really means "add new entry."
@@ -2807,18 +2847,7 @@ void display_enter(void)
        wprintf("</div>\n");
        wprintf("<div id=\"content\">\n"
                "<div class=\"fix_scrollbar_bug\">"
-               "<table width=100%% border=0 bgcolor=\"#ffffff\"><tr><td>");
-
-       /** First test to see whether this is a room that requires recipients to be entered */
-       serv_puts("ENT0 0");
-       serv_getln(buf, sizeof buf);
-       if (!strncmp(buf, "570", 3)) {          /** 570 means that we need a recipient here */
-               recipient_required = 1;
-       }
-       else if (buf[0] != '2') {               /** Any other error means that we cannot continue */
-               wprintf("<em>%s</em><br />\n", &buf[4]);
-               goto DONE;
-       }
+               "<table class=\"messages_background\"><tr><td>");
 
        /** Now check our actual recipients if there are any */
        if (recipient_required) {