From b6909588a983810105144077a936ecdde03ee85c Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 12 Jul 2011 00:34:54 -0400 Subject: [PATCH] Initial implementation of the 'replying_to=' method for extracting Subject and References from Citadel using the msgnum being replied to instead of passing them back and forth through the browser. Fully in place for public rooms Reply and ReplyQuoted. Mail messages are next. --- webcit/messages.c | 56 +++++++++++++++++++++++++++++++ webcit/static/t/view_message.html | 4 +-- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/webcit/messages.c b/webcit/messages.c index 6d83128d2..049b1f10f 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -1347,6 +1347,62 @@ void display_enter(void) return; } + + /* + * If the "replying_to" variable is set, it refers to a message + * number from which we must extract some header fields... + */ + long replying_to = lbstr("replying_to"); + if (replying_to > 0) { + char wefw[1024] = ""; + char msgn[1024] = ""; + serv_printf("MSG0 %ld|1", replying_to); + serv_getln(buf, sizeof buf); + if (buf[0] == '1') while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + + if ( (!strncasecmp(buf, "subj=", 5)) && (strlen(buf) > 5) ) { + StrBuf *subj = NewStrBuf(); + if (strncasecmp(&buf[5], "Re:", 3)) { + StrBufAppendBufPlain(subj, HKEY("Re: "), 0); + } + StrBufAppendBufPlain(subj, &buf[5], -1, 0); + PutBstr(HKEY("subject"), subj); + } + + else if (!strncasecmp(buf, "wefw=", 5)) { + safestrncpy(wefw, &buf[5], sizeof wefw); + + /* Trim down excessively long lists of thread references. We eliminate the + * second one in the list so that the thread root remains intact. + */ + int rrtok = num_tokens(wefw, '|'); + int rrlen = strlen(wefw); + if ( ((rrtok >= 3) && (rrlen > 900)) || (rrtok > 10) ) { + remove_token(wefw, 1, '|'); + } + } + + else if (!strncasecmp(buf, "msgn=", 5)) { + safestrncpy(msgn, &buf[5], sizeof msgn); + } + + } + + if (strlen(wefw) + strlen(msgn) > 0) { + StrBuf *refs = NewStrBuf(); + if (!IsEmptyStr(wefw)) { + StrBufAppendBufPlain(refs, wefw, -1, 0); + } + if ( (!IsEmptyStr(wefw)) && (!IsEmptyStr(msgn)) ) { + StrBufAppendBufPlain(refs, HKEY("|"), 0); + } + if (!IsEmptyStr(msgn)) { + StrBufAppendBufPlain(refs, msgn, -1, 0); + } + PutBstr(HKEY("references"), refs); + } + } + /* * Otherwise proceed normally. * Do a custom room banner with no navbar... diff --git a/webcit/static/t/view_message.html b/webcit/static/t/view_message.html index fd2491edb..82c32275c 100644 --- a/webcit/static/t/view_message.html +++ b/webcit/static/t/view_message.html @@ -15,8 +15,8 @@

?cc=?subject=?force_room=_MAIL_">[] - %7C?subject='));">[] - %7C?replyquote=?recp=%22%22%3C%3E?subject='));">[] + [] + [] -- 2.30.2