]> code.citadel.org Git - citadel.git/blobdiff - webcit/messages.c
* remove WCVIEW, we have COND:THISROOM:CURR_VIEW; TODO: is the usage in roombanner...
[citadel.git] / webcit / messages.c
index 8a814afe13b1a3a039515672af11061e3e42dec7..dd739fc5650092de222e312959b4527d2427f3fa 100644 (file)
@@ -650,17 +650,6 @@ int load_msg_ptrs(const char *servcmd,
 }
 
 
-inline message_summary* GetMessagePtrAt(int n, HashList *Summ)
-{
-       const char *Key;
-       long HKLen;
-       void *vMsg;
-
-       if (Summ == NULL)
-               return NULL;
-       GetHashAt(Summ, n, &HKLen, &Key, &vMsg);
-       return (message_summary*) vMsg;
-}
 
 
 
@@ -824,7 +813,6 @@ void readloop(long oper, eCustomRoomRenderer ForceRenderer)
        /* Put some helpful data in vars for mailsummary_json */
        svputlong("READLOOP:TOTALMSGS", Stat.nummsgs);
        svputlong("READLOOP:STARTMSG", Stat.startmsg);
-       svputlong("WCVIEW", WCC->CurRoom.view);
 
        /*
         * iterate over each message. if we need to load an attachment, do it here. 
@@ -987,6 +975,9 @@ void post_mime_to_server(void) {
  */
 void post_message(void)
 {
+       StrBuf *UserName;
+       StrBuf *EmailAddress;
+       StrBuf *EncBuf;
        char buf[1024];
        StrBuf *encoded_subject = NULL;
        static long dont_post = (-1L);
@@ -1011,7 +1002,9 @@ void post_message(void)
        if (WCC->upload_length > 0) {
                const char *pch;
                int n;
-               char N[64];
+               const char *newn;
+               long newnlen;
+               void *v;
 
                /* There's an attachment.  Save it to this struct... */
                lprintf(9, "Client is uploading %d bytes\n", WCC->upload_length);
@@ -1019,15 +1012,20 @@ void post_message(void)
                memset(att, 0, sizeof(wc_mime_attachment ));
                att->length = WCC->upload_length;
                att->ContentType = NewStrBufPlain(WCC->upload_content_type, -1);
-               att->FileName = NewStrBufPlain(WCC->upload_filename, -1);
+               att->FileName = NewStrBufDup(WCC->upload_filename);
                
                if (WCC->attachments == NULL) {
-                       WCC->attachments = NewHash(1, NULL);
+                       WCC->attachments = NewHash(1, Flathash);
                }
 
                /* And add it to the list. */
-               n = snprintf(N, sizeof N, "%d", GetCount(WCC->attachments) + 1);
-               Put(WCC->attachments, N, n, att, DestroyMime);
+               n = 0;
+               if ((GetCount(WCC->attachments) > 0) && 
+                   GetHashAt(WCC->attachments, 
+                             GetCount(WCC->attachments) -1, 
+                             &newnlen, &newn, &v))
+                   n = *((int*) newn) + 1;
+               Put(WCC->attachments, IKEY(n), att, DestroyMime);
 
                /*
                 * Mozilla sends a simple filename, which is what we want,
@@ -1063,12 +1061,39 @@ void post_message(void)
        } else if (lbstr("postseq") == dont_post) {
                sprintf(WCC->ImportantMessage, 
                        _("Automatically cancelled because you have already "
-                       "saved this message."));
+                         "saved this message."));
+       } else if (havebstr("remove_attach_button")) {
+               /* now thats st00pit. need to find it by name. */
+               void *vAtt;
+               StrBuf *WhichAttachment;
+               HashPos *at;
+               long len;
+               const char *key;
+
+               WhichAttachment = NewStrBufDup(sbstr("which_attachment"));
+               StrBufUnescape(WhichAttachment, 0);
+               at = GetNewHashPos(WCC->attachments, 0);
+               do {
+                       GetHashPos(WCC->attachments, at, &len, &key, &vAtt);
+               
+                       att = (wc_mime_attachment*) vAtt;
+                       if ((att != NULL) && 
+                           (strcmp(ChrPtr(WhichAttachment), 
+                                   ChrPtr(att->FileName)   ) == 0))
+                       {
+                               DeleteEntryFromHash(WCC->attachments, at);
+                               break;
+                       }
+               }
+               while (NextHashPos(WCC->attachments, at));
+               FreeStrBuf(&WhichAttachment);
+               display_enter();
+               return;
        } else {
                const char CMD[] = "ENT0 1|%s|%d|4|%s|%s||%s|%s|%s|%s|%s";
-               const StrBuf *Recp = NULL; 
-               const StrBuf *Cc = NULL;
-               const StrBuf *Bcc = NULL;
+               StrBuf *Recp = NULL; 
+               StrBuf *Cc = NULL;
+               StrBuf *Bcc = NULL;
                const StrBuf *Wikipage = NULL;
                const StrBuf *my_email_addr = NULL;
                StrBuf *CmdBuf = NULL;
@@ -1114,9 +1139,18 @@ void post_message(void)
                        
                        StrBufRFC2047encode(&encoded_subject, Subj);
                }
-               Recp = sbstr("recp");
-               Cc = sbstr("cc");
-               Bcc = sbstr("bcc");
+               UserName = NewStrBuf();
+               EmailAddress = NewStrBuf();
+               EncBuf = NewStrBuf();
+
+               Recp = StrBufSanitizeEmailRecipientVector(sbstr("recp"), UserName, EmailAddress, EncBuf);
+               Cc = StrBufSanitizeEmailRecipientVector(sbstr("cc"), UserName, EmailAddress, EncBuf);
+               Bcc = StrBufSanitizeEmailRecipientVector(sbstr("bcc"), UserName, EmailAddress, EncBuf);
+
+               FreeStrBuf(&UserName);
+               FreeStrBuf(&EmailAddress);
+               FreeStrBuf(&EncBuf);
+
                Wikipage = sbstr("page");
                my_email_addr = sbstr("my_email_addr");
                
@@ -1193,10 +1227,14 @@ void post_message(void)
                                if (save_to_drafts) gotoroom(WCC->CurRoom.name);
                                display_enter();
                                FreeStrBuf(&Buf);
+                               FreeStrBuf(&Cc);
+                               FreeStrBuf(&Bcc);
                                return;
                        }
                }
                FreeStrBuf(&Buf);
+               FreeStrBuf(&Cc);
+               FreeStrBuf(&Bcc);
        }
 
        DeleteHash(&WCC->attachments);
@@ -1471,8 +1509,10 @@ void postpart(StrBuf *partnum, StrBuf *filename, int force_download)
        void *vPart;
        StrBuf *content_type;
        wc_mime_attachment *part;
-       
-       if (GetHash(WC->attachments, SKEY(partnum), &vPart) &&
+       int i;
+
+       i = StrToi(partnum);
+       if (GetHash(WC->attachments, IKEY(i), &vPart) &&
            (vPart != NULL)) {
                part = (wc_mime_attachment*) vPart;
                if (force_download) {