]> code.citadel.org Git - citadel.git/blobdiff - webcit/messages.c
ATTACHMENTS: hande UID of files on the partnum param on upload. that way fresh &...
[citadel.git] / webcit / messages.c
index 6da0b55aa1a97b37df63fc990ab813c185ea9237..099eb0b7f3f5341021cc9116912964d3f207f7be 100644 (file)
@@ -531,7 +531,7 @@ message_summary *ReadOneMessageSummary(StrBuf *RawMessage, const char *DefaultSu
                        StrBufCutLeft(Buf, nBuf + 1);
                        Eval->f(Msg, Buf);
                }
-               else syslog(1, "Don't know how to handle Message Headerline [%s]", ChrPtr(Buf));
+               else syslog(LOG_INFO, "Don't know how to handle Message Headerline [%s]", ChrPtr(Buf));
        }
        return Msg;
 }
@@ -1054,7 +1054,7 @@ void post_message(void)
                        StrBuf_ServGetln(Buf);
                        if (GetServerStatusMsg(Buf, NULL, 1, 2) != 2) {
                                /* You probably don't even have a dumb Drafts folder */
-                               syslog(9, "%s:%d: server save to drafts error: %s\n", __FILE__, __LINE__, ChrPtr(Buf) + 4);
+                               syslog(LOG_DEBUG, "%s:%d: server save to drafts error: %s\n", __FILE__, __LINE__, ChrPtr(Buf) + 4);
                                AppendImportantMessage(_("Saved to Drafts failed: "), -1);
                                display_enter();
                                FreeStrBuf(&Buf);
@@ -1128,7 +1128,7 @@ void post_message(void)
                }
                else 
                {
-                       syslog(9, "%s\n", ChrPtr(CmdBuf));
+                       syslog(LOG_DEBUG, "%s\n", ChrPtr(CmdBuf));
                        serv_puts(ChrPtr(CmdBuf));
                        FreeStrBuf(&CmdBuf);
 
@@ -1165,7 +1165,7 @@ void post_message(void)
                                }
                                dont_post = lbstr("postseq");
                        } else {
-                               syslog(9, "%s:%d: server post error: %s", __FILE__, __LINE__, ChrPtr(Buf) + 4);
+                               syslog(LOG_DEBUG, "%s:%d: server post error: %s", __FILE__, __LINE__, ChrPtr(Buf) + 4);
                                AppendImportantMessage(ChrPtr(Buf) + 4, StrLength(Buf) - 4);
                                display_enter();
                                if (saving_to_drafts) gotoroom(WCC->CurRoom.name);
@@ -1219,24 +1219,40 @@ void upload_attachment(void) {
        long newnlen;
        void *v;
        wc_mime_attachment *att;
+       const StrBuf *Tmpl = sbstr("template");
+       const StrBuf *MimeType = NULL;
+       const StrBuf *UID;
 
-       syslog(9, "upload_attachment()\n");
-       wc_printf("upload_attachment()<br>\n");
+       begin_burst();
+       syslog(LOG_DEBUG, "upload_attachment()\n");
+       if (!Tmpl) wc_printf("upload_attachment()<br>\n");
 
        if (WCC->upload_length <= 0) {
-               syslog(9, "ERROR no attachment was uploaded\n");
-               wc_printf("ERROR no attachment was uploaded<br>\n");
+               syslog(LOG_DEBUG, "ERROR no attachment was uploaded\n");
+               if (Tmpl)
+               {
+                       putlbstr("UPLOAD_ERROR", 1);
+                       MimeType = DoTemplate(SKEY(Tmpl), NULL, &NoCtx);
+               }
+               else      wc_printf("ERROR no attachment was uploaded<br>\n");
+               http_transmit_thing(ChrPtr(MimeType), 0);
+
                return;
        }
 
-       syslog(9, "Client is uploading %d bytes\n", WCC->upload_length);
-       wc_printf("Client is uploading %d bytes<br>\n", WCC->upload_length);
-       att = malloc(sizeof(wc_mime_attachment));
+       syslog(LOG_DEBUG, "Client is uploading %d bytes\n", WCC->upload_length);
+       if (Tmpl) putlbstr("UPLOAD_LENGTH", WCC->upload_length);
+       else wc_printf("Client is uploading %d bytes<br>\n", WCC->upload_length);
+
+       att = (wc_mime_attachment*)malloc(sizeof(wc_mime_attachment));
        memset(att, 0, sizeof(wc_mime_attachment ));
        att->length = WCC->upload_length;
        att->ContentType = NewStrBufPlain(WCC->upload_content_type, -1);
        att->FileName = NewStrBufDup(WCC->upload_filename);
-       
+       UID = SBSTR("qquuid");
+       if (UID)
+               att->PartNum = NewStrBufDup(UID);
+
        if (WCC->attachments == NULL) {
                WCC->attachments = NewHash(1, Flathash);
        }
@@ -1271,6 +1287,9 @@ void upload_attachment(void) {
        att->Data = WCC->upload;
        WCC->upload = NULL;
        WCC->upload_length = 0;
+       
+       if (Tmpl) MimeType = DoTemplate(SKEY(Tmpl), NULL, &NoCtx);
+       http_transmit_thing(ChrPtr(MimeType), 0);
 }
 
 
@@ -1287,26 +1306,35 @@ void remove_attachment(void) {
        StrBuf *WhichAttachment;
        HashPos *at;
        long len;
+       int found=0;
        const char *key;
 
        WhichAttachment = NewStrBufDup(sbstr("which_attachment"));
+       if (ChrPtr(WhichAttachment)[0] == '/')
+               StrBufCutLeft(WhichAttachment, 1);
        StrBufUnescape(WhichAttachment, 0);
        at = GetNewHashPos(WCC->attachments, 0);
        do {
+               vAtt = NULL;
                GetHashPos(WCC->attachments, at, &len, &key, &vAtt);
-       
+
                att = (wc_mime_attachment*) vAtt;
-               if ((att != NULL) && 
-                   (strcmp(ChrPtr(WhichAttachment), 
-                           ChrPtr(att->FileName)   ) == 0))
+               if ((att != NULL) &&
+                   (
+                           !strcmp(ChrPtr(WhichAttachment), ChrPtr(att->FileName)) ||
+                   ((att->PartNum != NULL) &&
+                    !strcmp(ChrPtr(WhichAttachment), ChrPtr(att->PartNum)))
+                           ))
                {
                        DeleteEntryFromHash(WCC->attachments, at);
+                       found=1;
                        break;
                }
        }
        while (NextHashPos(WCC->attachments, at));
+
        FreeStrBuf(&WhichAttachment);
-       wc_printf("remove_attachment() completed\n");
+       wc_printf("remove_attachment(%d) completed\n", found);
 }
 
 
@@ -1335,10 +1363,11 @@ long l_cccc;
 long l_replyto;
 long l_node;
 long l_rfca;
+long l_nvto;
 
 const char *ReplyToModeStrings [3] = {
        "reply",
-       "replyalle",
+       "replyall",
        "forward"
 };
 typedef enum _eReplyToNodes {
@@ -1454,6 +1483,7 @@ void display_enter(void)
                StrBuf *rcpt = NULL;
                StrBuf *cccc = NULL;
                StrBuf *replyto = NULL;
+               StrBuf *nvto = NULL;
                serv_printf("MSG0 %ld|1", replying_to); 
 
                StrBuf_ServGetln(Line);
@@ -1539,7 +1569,7 @@ void display_enter(void)
                                }
                                else if (which == l_replyto) {
                                        replyto = NewStrBufPlain(ChrPtr(Line) + 5, StrLength(Line) - 5);
-                               }                               
+                               }
                                else if (which == l_rfca) {
                                        StrBuf *FlatRFCA;
                                        rfca = NewStrBufPlain(ChrPtr(Line) + 5, StrLength(Line) - 5);
@@ -1548,6 +1578,10 @@ void display_enter(void)
                                        FreeStrBuf(&rfca);
                                        rfca = FlatRFCA;
                                }
+                               else if (which == l_nvto) {
+                                       nvto = NewStrBufPlain(ChrPtr(Line) + 5, StrLength(Line) - 5);
+                                       putbstr("nvto", nvto);
+                               }
                        }
 
 
@@ -2071,6 +2105,7 @@ InitModule_MSG
        l_replyto = FourHash("rep2", 4);
        l_node = FourHash("node", 4);
        l_rfca = FourHash("rfca", 4);
+       l_nvto = FourHash("nvto", 4);
 
        return ;
 }