X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Fmsg_renderers.c;h=ed8de1fe96b56f26fbd66f6b68c5290f7071224a;hp=9c63236903813da9046d502827dc2c5930e4a8a4;hb=b98d9f087b3a24a9549470ab066c2aea187ecfba;hpb=dda7d0d3dfaa0a7fede33155e2795f4379d492e7 diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index 9c6323690..ed8de1fe9 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -329,6 +329,7 @@ void examine_msgn(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) CheckConvertBufs(WCC); FreeStrBuf(&Msg->reply_inreplyto); Msg->reply_inreplyto = NewStrBufPlain(NULL, StrLength(HdrLine)); + Msg->reply_inreplyto_hash = ThreadIdHash(HdrLine); StrBuf_RFC822_2_Utf8(Msg->reply_inreplyto, HdrLine, WCC->DefaultCharset, @@ -355,6 +356,7 @@ void examine_wefw(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) CheckConvertBufs(WCC); FreeStrBuf(&Msg->reply_references); Msg->reply_references = NewStrBufPlain(NULL, StrLength(HdrLine)); + Msg->reply_references_hash = ThreadIdHash(HdrLine); StrBuf_RFC822_2_Utf8(Msg->reply_references, HdrLine, WCC->DefaultCharset, @@ -621,8 +623,9 @@ void render_MIME_VCard(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharse Buf = NewStrBuf(); /** If it's my vCard I can edit it */ if ( (!strcasecmp(ChrPtr(WCC->CurRoom.name), USERCONFIGROOM)) - || (!strcasecmp(&(ChrPtr(WCC->CurRoom.name)[11]), USERCONFIGROOM)) - || (WC->CurRoom.view == VIEW_ADDRESSBOOK) + || ((StrLength(WCC->CurRoom.name) > 11) && + (!strcasecmp(&(ChrPtr(WCC->CurRoom.name)[11]), USERCONFIGROOM))) + || (WCC->CurRoom.view == VIEW_ADDRESSBOOK) ) { StrBufAppendPrintf(Buf, "", Mime->msgnum, ChrPtr(Mime->PartNum)); @@ -878,29 +881,22 @@ void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCh } -message_summary *ReadOneMessageSummary(StrBuf *RawMessage, const char *DefaultSubject, StrBuf *FoundCharset, long MsgNum) +int ReadOneMessageSummary(message_summary *Msg, StrBuf *FoundCharset, StrBuf *Buf) { void *vHdr; headereval *Hdr; - message_summary *Msg; - StrBuf *Buf; const char *buf; const char *ebuf; int nBuf; long len; - Buf = NewStrBuf(); - - serv_printf("MSG0 %ld|1", MsgNum); /* ask for headers only */ + serv_printf("MSG0 %ld|1", Msg->msgnum); /* ask for headers only */ StrBuf_ServGetln(Buf); - if (GetServerStatus(Buf, NULL) == 1) { - FreeStrBuf(&Buf); - return NULL; + if (GetServerStatus(Buf, NULL) != 1) { + return 0; } - Msg = (message_summary*)malloc(sizeof(message_summary)); - memset(Msg, 0, sizeof(message_summary)); while (len = StrBuf_ServGetln(Buf), (len >= 0) && ((len != 3) || @@ -918,7 +914,7 @@ message_summary *ReadOneMessageSummary(StrBuf *RawMessage, const char *DefaultSu } else syslog(LOG_INFO, "Don't know how to handle Message Headerline [%s]", ChrPtr(Buf)); } - return Msg; + return 1; } void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP) @@ -931,12 +927,20 @@ void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP) void tmplput_MAIL_SUMM_PERMALINK(StrBuf *Target, WCTemplputParams *TP) { message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM); - char perma_link[1024]; - - strcpy(perma_link, "/readfwd?go="); - urlesc(&perma_link[12], sizeof(perma_link) - 12, (char *)ChrPtr(WC->CurRoom.name) ); - sprintf(&perma_link[strlen(perma_link)], "?start_reading_at=%ld#%ld", Msg->msgnum, Msg->msgnum); - StrBufAppendPrintf(Target, "%s", perma_link); + StrBuf *perma_link; + const StrBuf *View; + + perma_link = NewStrBufPlain(HKEY("/readfwd?go=")); + StrBufUrlescAppend(perma_link, WC->CurRoom.name, NULL); + View = sbstr("view"); + if (View != NULL) { + StrBufAppendBufPlain(perma_link, HKEY("?view="), 0); + StrBufAppendBuf(perma_link, View, 0); + } + StrBufAppendBufPlain(perma_link, HKEY("?start_reading_at="), 0); + StrBufAppendPrintf(perma_link, "%ld#%ld", Msg->msgnum, Msg->msgnum); + StrBufAppendBuf(Target, perma_link, 0); + FreeStrBuf(&perma_link); } @@ -1212,7 +1216,6 @@ void render_MAIL_markdown(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCha FreeStrBuf(&Mime->Data); Mime->Data = NewStrBufPlain(md_as_html, -1); } -// free(md_as_html); mkd_cleanup(doc); } }