X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmessages.c;h=fd886f4158ed1e503fbdecd56b5b752ee079ba3e;hb=54a3ac9e8fbc5e533cec6b83c171fa87551b8af4;hp=3eaef681715a05c7e64417c55562242b8e8bc088;hpb=d88fd4e9952bd2858ea12497173dcda6ecfbdf09;p=citadel.git diff --git a/webcit/messages.c b/webcit/messages.c index 3eaef6817..fd886f415 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -930,6 +930,7 @@ void post_mime_to_server(void) { /* Remember, serv_printf() appends an extra newline */ if (include_text_alt) { + StrBuf *Buf; serv_printf("Content-type: multipart/alternative; " "boundary=\"%s\"\n", alt_boundary); serv_printf("This is a multipart message in MIME format.\n"); @@ -939,18 +940,30 @@ void post_mime_to_server(void) { serv_puts("Content-Transfer-Encoding: quoted-printable"); serv_puts(""); txtmail = html_to_ascii(bstr("msgtext"), 0, 80, 0); - text_to_server_qp(txtmail); /* Transmit message in quoted-printable encoding */ + Buf = NewStrBufPlain(txtmail, -1); free(txtmail); + text_to_server_qp(Buf); /* Transmit message in quoted-printable encoding */ + FreeStrBuf(&Buf); serv_printf("\n--%s", alt_boundary); } - serv_puts("Content-type: text/html; charset=utf-8"); - serv_puts("Content-Transfer-Encoding: quoted-printable"); - serv_puts(""); - serv_puts("\r\n"); - text_to_server_qp(bstr("msgtext")); /* Transmit message in quoted-printable encoding */ - serv_puts("\r\n"); + if (havebstr("markdown")) + { + serv_puts("Content-type: text/x-markdown; charset=utf-8"); + serv_puts("Content-Transfer-Encoding: quoted-printable"); + serv_puts(""); + text_to_server_qp(sbstr("msgtext")); /* Transmit message in quoted-printable encoding */ + } + else + { + serv_puts("Content-type: text/html; charset=utf-8"); + serv_puts("Content-Transfer-Encoding: quoted-printable"); + serv_puts(""); + serv_puts("\r\n"); + text_to_server_qp(sbstr("msgtext")); /* Transmit message in quoted-printable encoding */ + serv_puts("\r\n"); + } if (include_text_alt) { serv_printf("--%s--", alt_boundary); @@ -1219,24 +1232,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; + begin_burst(); syslog(LOG_DEBUG, "upload_attachment()\n"); - wc_printf("upload_attachment()
\n"); + if (!Tmpl) wc_printf("upload_attachment()
\n"); if (WCC->upload_length <= 0) { syslog(LOG_DEBUG, "ERROR no attachment was uploaded\n"); - wc_printf("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
\n"); + http_transmit_thing(ChrPtr(MimeType), 0); + return; } syslog(LOG_DEBUG, "Client is uploading %d bytes\n", WCC->upload_length); - wc_printf("Client is uploading %d bytes
\n", WCC->upload_length); - att = malloc(sizeof(wc_mime_attachment)); + if (Tmpl) putlbstr("UPLOAD_LENGTH", WCC->upload_length); + else wc_printf("Client is uploading %d bytes
\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 +1300,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 +1319,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); } @@ -1695,7 +1736,10 @@ void display_enter(void) begin_burst(); output_headers(1, 0, 0, 0, 1, 0); - DoTemplate(HKEY("edit_message"), NULL, &NoCtx); + if (WCC->CurRoom.defview == VIEW_WIKIMD) + DoTemplate(HKEY("edit_markdown_epic"), NULL, &NoCtx); + else + DoTemplate(HKEY("edit_message"), NULL, &NoCtx); end_burst(); return;