From 63e88e1b13b6270cfb73504e7b3ee825c343db09 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sun, 14 Nov 2021 18:34:32 -0500 Subject: [PATCH] Removed the 'old threaded view save for reference' code from the tree. It's still in the git history if we need it, and JWZ is still a self-righteous asshole. --- .../old_threaded_view_save_for_reference.c | 286 ------------------ webcit-ng/room_functions.c | 25 +- 2 files changed, 13 insertions(+), 298 deletions(-) delete mode 100644 webcit-ng/old_threaded_view_save_for_reference.c diff --git a/webcit-ng/old_threaded_view_save_for_reference.c b/webcit-ng/old_threaded_view_save_for_reference.c deleted file mode 100644 index e9964265b..000000000 --- a/webcit-ng/old_threaded_view_save_for_reference.c +++ /dev/null @@ -1,286 +0,0 @@ -// -// This is some older code for the forum view that does server-side rendering. -// We're keeping it around as a reference. -// -// Copyright (c) 1996-2018 by the citadel.org team -// -// This program is open source software. It runs great on the -// Linux operating system (and probably elsewhere). You can use, -// copy, and run it under the terms of the GNU General Public -// License version 3. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - - -#if 0 -// Renderer for one message in the threaded view -// (This will probably work for the flat view too.) -// -void forum_render_one_message(struct ctdlsession *c, StrBuf * sj, long msgnum) -{ - StrBuf *raw_msg = NULL; - StrBuf *sanitized_msg = NULL; - char buf[1024]; - char content_transfer_encoding[1024] = { 0 }; - char content_type[1024] = { 0 }; - char author[128] = { 0 }; - char datetime[128] = { 0 }; - - ctdl_printf(c, "MSG4 %ld", msgnum); - ctdl_readline(c, buf, sizeof(buf)); - if (buf[0] != '1') { - StrBufAppendPrintf(sj, "
ERROR CONDITION FIXME WRITE A BOX
"); - return; - } - - while ((ctdl_readline(c, buf, sizeof(buf)) >= 0) && (strcmp(buf, "text")) && (strcmp(buf, "000"))) { - // citadel header parsing here - if (!strncasecmp(buf, "from=", 5)) { - safestrncpy(author, &buf[5], sizeof author); - } - if (!strncasecmp(buf, "time=", 5)) { - time_t tt; - struct tm tm; - tt = atol(&buf[5]); - localtime_r(&tt, &tm); - strftime(datetime, sizeof datetime, "%c", &tm); - } - } - - if (!strcmp(buf, "text")) { - while ((ctdl_readline(c, buf, sizeof(buf)) >= 0) && (strcmp(buf, "")) && (strcmp(buf, "000"))) { - // rfc822 header parsing here - if (!strncasecmp(buf, "Content-transfer-encoding:", 26)) { - strcpy(content_transfer_encoding, &buf[26]); - striplt(content_transfer_encoding); - } - if (!strncasecmp(buf, "Content-type:", 13)) { - strcpy(content_type, &buf[13]); - striplt(content_type); - } - } - raw_msg = ctdl_readtextmsg(c); - } else { - raw_msg = NULL; - } - - // begin output - - StrBufAppendPrintf(sj, "
"); // begin message wrapper - StrBufAppendPrintf(sj, "
"); // begin avatar FIXME move the style to a stylesheet - StrBufAppendPrintf(sj, " "); // FIXME temporary avatar - StrBufAppendPrintf(sj, "
"); // end avatar - StrBufAppendPrintf(sj, "
"); // begin content - StrBufAppendPrintf(sj, "
"); // begin header - StrBufAppendPrintf(sj, "%s ", author); // FIXME link to user profile or whatever - StrBufAppendPrintf(sj, "%s ", datetime); - StrBufAppendPrintf(sj, "
"); // end header - StrBufAppendPrintf(sj, "
"); // begin body - - if (raw_msg) { - - // These are the encodings we know how to handle. Decode in-place. - - if (!strcasecmp(content_transfer_encoding, "base64")) { - StrBufDecodeBase64(raw_msg); - } - if (!strcasecmp(content_transfer_encoding, "quoted-printable")) { - StrBufDecodeQP(raw_msg); - } - // At this point, raw_msg contains the decoded message. - // Now run through the renderers we have available. - - if (!strncasecmp(content_type, "text/html", 9)) { - sanitized_msg = html2html("UTF-8", 0, c->room, msgnum, raw_msg); - } else if (!strncasecmp(content_type, "text/plain", 10)) { - sanitized_msg = text2html("UTF-8", 0, c->room, msgnum, raw_msg); - } else if (!strncasecmp(content_type, "text/x-citadel-variformat", 25)) { - sanitized_msg = variformat2html(raw_msg); - } else { - sanitized_msg = NewStrBufPlain(HKEY("No renderer for this content type
")); - } - FreeStrBuf(&raw_msg); - - // If sanitized_msg is not NULL, we have rendered the message and can output it. - - if (sanitized_msg) { - StrBufAppendBuf(sj, sanitized_msg, 0); - FreeStrBuf(&sanitized_msg); - } - } - - StrBufAppendPrintf(sj, "
"); // end body - StrBufAppendPrintf(sj, "
"); // end content - StrBufAppendPrintf(sj, "
"); // end wrapper -} - - -// This code implements the thread display code. The thread sorting algorithm is working nicely but we're trying -// not to do rendering in the C server of webcit. Maybe move it into the server as "MSGS threaded" or something like that? - -// Threaded view (recursive section) -// -void thread_o_print(struct ctdlsession *c, StrBuf * sj, struct mthread *m, int num_msgs, int where_parent_is, int nesting_level) -{ - int i = 0; - int j = 0; - int num_printed = 0; - - for (i = 0; i < num_msgs; ++i) { - if (m[i].parent == where_parent_is) { - - if (++num_printed == 1) { - StrBufAppendPrintf(sj, ""); - } -} - - -// Threaded view (entry point) -// -void threaded_view(struct http_transaction *h, struct ctdlsession *c, char *which) -{ - int num_msgs = 0; - int num_alloc = 0; - struct mthread *m; - char buf[1024]; - char refs[1024]; - int i, j, k; - - ctdl_printf(c, "MSGS ALL|||9"); // 9 == headers + thread references - ctdl_readline(c, buf, sizeof(buf)); - if (buf[0] != '1') { - do_404(h); - return; - } - - StrBuf *sj = NewStrBuf(); - StrBufAppendPrintf(sj, "\r\n"); - - while (ctdl_readline(c, buf, sizeof buf), strcmp(buf, "000")) { - - ++num_msgs; - if (num_msgs > num_alloc) { - if (num_alloc == 0) { - num_alloc = 100; - m = malloc(num_alloc * sizeof(struct mthread)); - } else { - num_alloc *= 2; - m = realloc(m, (num_alloc * sizeof(struct mthread))); - } - } - - memset(&m[num_msgs - 1], 0, sizeof(struct mthread)); - m[num_msgs - 1].msgnum = extract_long(buf, 0); - m[num_msgs - 1].datetime = extract_long(buf, 1); - extract_token(m[num_msgs - 1].from, buf, 2, '|', sizeof m[num_msgs - 1].from); - m[num_msgs - 1].threadhash = extract_int(buf, 6); - extract_token(refs, buf, 7, '|', sizeof refs); - - char *t; - char *r = refs; - i = 0; - while ((t = strtok_r(r, ",", &r))) { - if (i == 0) { - m[num_msgs - 1].refhashes[0] = atoi(t); // always keep the first one - } else { - memcpy(&m[num_msgs - 1].refhashes[1], &m[num_msgs - 1].refhashes[2], sizeof(int) * 8); // shift the rest - m[num_msgs - 1].refhashes[9] = atoi(t); - } - ++i; - } - - } - - // Sort by thread. I did read jwz's sorting algorithm and it looks pretty good, but jwz is a self-righteous asshole so we do it our way. - for (i = 0; i < num_msgs; ++i) { - for (j = 9; (j >= 0) && (m[i].parent == 0); --j) { - for (k = 0; (k < num_msgs) && (m[i].parent == 0); ++k) { - if (m[i].refhashes[j] == m[k].threadhash) { - m[i].parent = k; - } - } - } - } - - // Now render it - setup_for_forum_view(c); - thread_o_print(c, sj, m, num_msgs, 0, 0); // Render threads recursively and recursively - - // Garbage collection is for people who aren't smart enough to manage their own memory. - if (num_msgs > 0) { - free(m); - } - - StrBufAppendPrintf(sj, "\r\n"); - - add_response_header(h, strdup("Content-type"), strdup("text/html; charset=utf-8")); - h->response_code = 200; - h->response_string = strdup("OK"); - h->response_body_length = StrLength(sj); - h->response_body = SmashStrBuf(&sj); - return; -} - - -// flat view (entry point) -// -void flat_view(struct http_transaction *h, struct ctdlsession *c, char *which) -{ - StrBuf *sj = NewStrBuf(); - StrBufAppendPrintf(sj, "\r\n"); - - setup_for_forum_view(c); - long *msglist = get_msglist(c, "ALL"); - if (msglist) { - int i; - for (i = 0; (msglist[i] > 0); ++i) { - forum_render_one_message(c, sj, msglist[i]); - } - free(msglist); - } - - StrBufAppendPrintf(sj, "\r\n"); - - add_response_header(h, strdup("Content-type"), strdup("text/html; charset=utf-8")); - h->response_code = 200; - h->response_string = strdup("OK"); - h->response_body_length = StrLength(sj); - h->response_body = SmashStrBuf(&sj); - return; -} - - -// render one message (entire transaction) FIXME EXTERMINATE -// -void html_render_one_message(struct http_transaction *h, struct ctdlsession *c, long msgnum) -{ - StrBuf *sj = NewStrBuf(); - StrBufAppendPrintf(sj, "\r\n"); - setup_for_forum_view(c); // FIXME way too inefficient to do this for every message !!!!!!!!!!!!! - forum_render_one_message(c, sj, msgnum); - StrBufAppendPrintf(sj, "\r\n"); - add_response_header(h, strdup("Content-type"), strdup("text/html; charset=utf-8")); - h->response_code = 200; - h->response_string = strdup("OK"); - h->response_body_length = StrLength(sj); - h->response_body = SmashStrBuf(&sj); - return; -} - -#endif diff --git a/webcit-ng/room_functions.c b/webcit-ng/room_functions.c index 338f034ad..179884d9f 100644 --- a/webcit-ng/room_functions.c +++ b/webcit-ng/room_functions.c @@ -32,7 +32,8 @@ long *get_msglist(struct ctdlsession *c, char *which_msgs) { if (num_alloc == 0) { num_alloc = 1024; msglist = malloc(num_alloc * sizeof(long)); - } else { + } + else { num_alloc *= 2; msglist = realloc(msglist, num_alloc * sizeof(long)); } @@ -158,7 +159,8 @@ void object_in_room(struct http_transaction *h, struct ctdlsession *c) { if (!IsEmptyStr(buf)) { if (!strcasecmp(buf, "json")) { json_render_one_message(h, c, msgnum); - } else { + } + else { download_mime_component(h, c, msgnum, buf); } return; @@ -360,8 +362,7 @@ void propfind_the_room_itself(struct http_transaction *h, struct ctdlsession *c) StrBufAppendPrintf(Buf, ""); free(datestring); } - if (enumerate_by_euid) // FIXME ajc 2017oct30 should this be inside the timestamp conditional? - { + if (enumerate_by_euid) { // FIXME ajc 2017oct30 should this be inside the timestamp conditional? StrBufAppendPrintf(Buf, "\"%ld\"", msglist[i]); } } @@ -496,8 +497,7 @@ void ctdl_r(struct http_transaction *h, struct ctdlsession *c) { extract_token(requested_roomname, h->uri, 3, '/', sizeof requested_roomname); unescape_input(requested_roomname); - if (IsEmptyStr(requested_roomname)) // /ctdl/r/ - { + if (IsEmptyStr(requested_roomname)) { // /ctdl/r/ room_list(h, c); return; } @@ -511,18 +511,18 @@ void ctdl_r(struct http_transaction *h, struct ctdlsession *c) { c->new_messages = extract_int(&buf[4], 1); c->total_messages = extract_int(&buf[4], 2); // 3 (int)info Info flag: set to nonzero if the user needs to read this room's info file - // 4 (int)CCC->room.QRflags Various flags associated with this room. - // 5 (long)CCC->room.QRhighest The highest message number present in this room + // 4 (int)CC->room.QRflags Various flags associated with this room. + // 5 (long)CC->room.QRhighest The highest message number present in this room c->last_seen = extract_long(&buf[4], 6); // The highest message number the user has read in this room // 7 (int)rmailflag Boolean flag: 1 if this is a Mail> room, 0 otherwise. // 8 (int)raideflag Nonzero if user is either Aide or a Room Aide in this room // 9 (int)newmailcount The number of new Mail messages the user has - // 10 (int)CCC->room.QRfloor The floor number this room resides on + // 10 (int)CC->room.QRfloor The floor number this room resides on c->room_current_view = extract_int(&buf[4], 11); c->room_default_view = extract_int(&buf[4], 12); // 13 (int)is_trash Boolean flag: 1 if this is the user's Trash folder, 0 otherwise. - // 14 (int)CCC->room.QRflags2 More flags associated with this room - // 15 (long)CCC->room.QRmtime Timestamp of the last write activity in this room + // 14 (int)CC->room.QRflags2 More flags associated with this room + // 15 (long)CC->room.QRmtime Timestamp of the last write activity in this room } else { do_404(h); return; @@ -540,7 +540,8 @@ void ctdl_r(struct http_transaction *h, struct ctdlsession *c) { if (num_tokens(h->uri, '/') == 5) { if (IsEmptyStr(buf)) { the_room_itself(h, c); // /ctdl/r/roomname/ ( same as /ctdl/r/roomname ) - } else { + } + else { object_in_room(h, c); // /ctdl/r/roomname/object } return; -- 2.39.2