Buf = NewStrBuf();
lprintf(1, "-------------------MSG4 %ld|%s--------------\n", Msg->msgnum, ChrPtr(Msg->PartNum));
- serv_printf("MSG4 %ld|%s", Msg->msgnum, ChrPtr(Msg->PartNum));
+ if (Msg->PartNum != NULL)
+ serv_printf("MSG4 %ld|%s", Msg->msgnum, ChrPtr(Msg->PartNum));
+ else
+ serv_printf("MSG4 %ld", Msg->msgnum);
+
StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) != 1) {
*Error = NewStrBuf();
/** begin everythingamundo table */
HdrToken = NewStrBuf();
- while ((StrBuf_ServGetlnBuffered(Buf)>=0) && !Done) {
+ while ((StrBuf_ServGetln(Buf)>=0) && !Done) {
if ( (StrLength(Buf)==3) &&
!strcmp(ChrPtr(Buf), "000"))
{
Done = 1;
if (state < 2) {
lprintf(1, _("unexpected end of message"));
-
+ if (Msg->MsgBody->Data == NULL)
+ Msg->MsgBody->Data = NewStrBuf();
Msg->MsgBody->ContentType = NewStrBufPlain(HKEY("text/html"));
StrBufAppendPrintf(Msg->MsgBody->Data, "<div><i>");
StrBufAppendPrintf(Msg->MsgBody->Data, _("unexpected end of message"));
* printable_view Nonzero to display a printable view
* section Optional for encapsulated message/rfc822 submessage
*/
-int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, const StrBuf *PartNum)
+int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, const StrBuf *PartNum, const StrBuf **OutMime)
{
StrBuf *Buf;
StrBuf *FoundCharset;
memset(&SubTP, 0, sizeof(WCTemplputParams));
SubTP.Filter.ContextType = CTX_MAILSUM;
SubTP.Context = Msg;
- DoTemplate(tmpl, tmpllen, Target, &SubTP);
+ *OutMime = DoTemplate(tmpl, tmpllen, Target, &SubTP);
DestroyMessageSummary(Msg);
FreeStrBuf(&FoundCharset);
* msgnum_as_string == Message number, as a string instead of as a long int
*/
void embed_message(void) {
+ const StrBuf *Mime;
long msgnum = 0L;
wcsession *WCC = WC;
- const StrBuf *Tmpl = sbstr("template");
+ const StrBuf *Tmpl;
+ StrBuf *CmdBuf = NULL;
msgnum = StrTol(WCC->UrlFragment2);
- if (StrLength(Tmpl) > 0)
- read_message(WCC->WBuf, SKEY(Tmpl), msgnum, NULL);
- else
- read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL);
+ switch (WCC->eReqType)
+ {
+ case eGET:
+ case ePOST:
+ Tmpl = sbstr("template");
+ if (StrLength(Tmpl) > 0)
+ read_message(WCC->WBuf, SKEY(Tmpl), msgnum, NULL, &Mime);
+ else
+ read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
+ http_transmit_thing(ChrPtr(Mime), 0);
+ break;
+ case eDELETE:
+ CmdBuf = NewStrBuf ();
+ if (WCC->wc_is_trash) { /** Delete from Trash is a real delete */
+ serv_printf("DELE %ld", msgnum);
+ }
+ else { /** Otherwise move it to Trash */
+ serv_printf("MOVE %ld|_TRASH_|0", msgnum);
+ }
+ StrBuf_ServGetln(CmdBuf);
+ FlushStrBuf(WCC->ImportantMsg);
+ StrBufAppendBuf(WCC->ImportantMsg, CmdBuf, 4);
+ break;
+ default:
+ break;
+
+ }
}
*/
void print_message(void) {
long msgnum = 0L;
+ const StrBuf *Mime;
msgnum = StrTol(WC->UrlFragment2);
output_headers(0, 0, 0, 0, 0, 0);
begin_burst();
- read_message(WC->WBuf, HKEY("view_message_print"), msgnum, NULL);
+ read_message(WC->WBuf, HKEY("view_message_print"), msgnum, NULL, &Mime);
wDumpContent(0);
}
*
* @param msg_num_as_string Message number as a string instead of as a long int
*/
-void mobile_message_view(void) {
- long msgnum = 0L;
- msgnum = StrTol(WC->UrlFragment2);
- output_headers(1, 0, 0, 0, 0, 1);
- begin_burst();
- do_template("msgcontrols", NULL);
- read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL);
- wDumpContent(0);
+void mobile_message_view(void)
+{
+ long msgnum = 0L;
+ const StrBuf *Mime;
+
+ msgnum = StrTol(WC->UrlFragment2);
+ output_headers(1, 0, 0, 0, 0, 1);
+ begin_burst();
+ do_template("msgcontrols", NULL);
+ read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
+ wDumpContent(0);
}
/**
serv_printf("MSG0 %ld|1", MsgNum); /* ask for headers only */
- StrBuf_ServGetlnBuffered(Buf);
+ StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) == 1) {
FreeStrBuf(&Buf);
return NULL;
Msg = (message_summary*)malloc(sizeof(message_summary));
memset(Msg, 0, sizeof(message_summary));
- while (len = StrBuf_ServGetlnBuffered(Buf),
+ while (len = StrBuf_ServGetln(Buf),
((len != 3) ||
strcmp(ChrPtr(Buf), "000")== 0)){
buf = ChrPtr(Buf);
long len;
int n;
int skipit;
- const char *Ptr;
+ const char *Ptr = NULL;
if (WCC->summ != NULL) {
DeleteHash(&WCC->summ);
Buf = NewStrBuf();
serv_puts(servcmd);
- StrBuf_ServGetlnBuffered(Buf);
+ StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) != 1) {
FreeStrBuf(&Buf);
return (nummsgs);
}
Buf2 = NewStrBuf();
- while (len = StrBuf_ServGetlnBuffered(Buf),
+ while (len = StrBuf_ServGetln(Buf),
((len != 3) ||
strcmp(ChrPtr(Buf), "000")!= 0))
{
int defaultsortorder = 0;
WCTemplputParams SubTP;
char *ab_name;
+ const StrBuf *Mime;
if (havebstr("is_summary") && (1 == (ibstr("is_summary"))))
WCC->wc_view = VIEW_MAILBOX;
case VIEW_ADDRESSBOOK:
ab_name = NULL;
fetch_ab_name(Msg, &ab_name);
+ if (ab_name == NULL)
+ break;
++num_ab;
addrbook = realloc(addrbook,
(sizeof(addrbookent) * num_ab) );
/** if we do a split bbview in the future, begin messages div here */
for (a=0; a<num_displayed; ++a) {
- read_message(WCC->WBuf, HKEY("view_message"), displayed_msgs[a], NULL);
+ read_message(WCC->WBuf, HKEY("view_message"), displayed_msgs[a], NULL, &Mime);
}
/** if we do a split bbview in the future, end messages div here */
break;
case VIEW_ADDRESSBOOK:
if (is_singlecard)
- read_message(WC->WBuf, HKEY("view_message"), lbstr("startmsg"), NULL);
+ read_message(WC->WBuf, HKEY("view_message"), lbstr("startmsg"), NULL, &Mime);
else
do_addrbook_view(addrbook, num_ab); /** Render the address book */
break;
* message" command really means "add new entry."
*/
if (WCC->wc_default_view == VIEW_ADDRESSBOOK) {
- do_edit_vcard(-1, "", "", ChrPtr(WCC->wc_roomname));
+ do_edit_vcard(-1, "", NULL, NULL, "", ChrPtr(WCC->wc_roomname));
return;
}
Buf = NewStrBuf();
serv_printf("OPNA %s|%s", ChrPtr(WCC->UrlFragment2), ChrPtr(WCC->UrlFragment3));
- StrBuf_ServGetlnBuffered(Buf);
+ StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) == 2) {
StrBufCutLeft(Buf, 4);
bytes = StrBufExtract_long(Buf, 0, '|');
read_server_binary(WCC->WBuf, bytes, Buf);
serv_puts("CLOS");
- StrBuf_ServGetlnBuffered(Buf);
+ StrBuf_ServGetln(Buf);
CT = ChrPtr(ContentType);
if (!force_download) {
Buf = NewStrBuf();
serv_printf("DLAT %ld|%s", msgnum, partnum);
- StrBuf_ServGetlnBuffered(Buf);
+ StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) == 6) {
StrBufCutLeft(Buf, 4);
bytes = StrBufExtract_long(Buf, 0, '|');
-
+ FreeStrBuf(&Buf);
+ Buf = NewStrBuf();
StrBuf_ServGetBLOBBuffered(Buf, bytes);
return(Buf);
}
/* TODO: is there a chance the contenttype is different to the one we know? */
serv_printf("DLAT %ld|%s", Mime->msgnum, ChrPtr(Mime->PartNum));
Buf = NewStrBuf();
- StrBuf_ServGetlnBuffered(Buf);
+ StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) == 6) {
bytes = extract_long(&(ChrPtr(Buf)[4]), 0);
WebcitAddUrlHandler(HKEY("move_msg"), move_msg, 0);
WebcitAddUrlHandler(HKEY("delete_msg"), delete_msg, 0);
WebcitAddUrlHandler(HKEY("confirm_move_msg"), confirm_move_msg, 0);
- WebcitAddUrlHandler(HKEY("msg"), embed_message, NEED_URL|AJAX);
+ WebcitAddUrlHandler(HKEY("msg"), embed_message, NEED_URL);
WebcitAddUrlHandler(HKEY("printmsg"), print_message, NEED_URL);
WebcitAddUrlHandler(HKEY("mobilemsg"), mobile_message_view, NEED_URL);
WebcitAddUrlHandler(HKEY("msgheaders"), display_headers, NEED_URL);
WebcitAddUrlHandler(HKEY("roommsgs"), jsonMessageList,0);
return ;
}
+
+void
+SessionDetachModule_MSG
+(wcsession *sess)
+{
+ DeleteHash(&sess->summ);
+}