From 4fa11ee1af73783d66b27746de24231876166c50 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 8 Sep 2010 18:31:44 -0400 Subject: [PATCH] RSS feed generator is basically complete --- webcit/feed_generator.c | 57 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/webcit/feed_generator.c b/webcit/feed_generator.c index e7bcaa2eb..4daebf4d9 100644 --- a/webcit/feed_generator.c +++ b/webcit/feed_generator.c @@ -26,12 +26,52 @@ * RSS feed generator -- do one message */ void feed_rss_one_message(long msgnum) { + char buf[1024]; + int in_body = 0; + int found_title = 0; + char pubdate[128]; + + serv_printf("MSG0 %ld", msgnum); /* FIXME we want msg4 eventually */ + serv_getln(buf, sizeof buf); + if (buf[0] != '1') return; + wc_printf(""); - wc_printf("title %ld title", msgnum); - wc_printf("Wed, 08 Sep 2010 20:03:21 GMT"); - wc_printf("http://xxxxx.xxxx.xxxxxx.xxxx.xxx"); - wc_printf("<b>foo bar baz:</b> message %ld", msgnum); - wc_printf("xxxx-xxxx-xxxx-xxxx-xxxx-xxxx"); + wc_printf("%s/readfwd?gotofirst=", ChrPtr(site_prefix)); + urlescputs(ChrPtr(WC->CurRoom.name)); + wc_printf("?start_reading_at=%ld", msgnum); + + while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + if (in_body) { + escputs(buf); + } + else if (!strncasecmp(buf, "subj=", 5)) { + wc_printf(""); + escputs(&buf[5]); + wc_printf(""); + ++found_title; + } + else if (!strncasecmp(buf, "exti=", 5)) { + wc_printf(""); + escputs(&buf[5]); + wc_printf(""); + } + else if (!strncasecmp(buf, "time=", 5)) { + http_datestring(pubdate, sizeof pubdate, atol(&buf[5])); + wc_printf("%s", pubdate); + } + else if (!strncasecmp(buf, "text", 4)) { + if (!found_title) { + wc_printf("Message #%ld", msgnum); + } + wc_printf(""); + in_body = 1; + } + } + + if (in_body) { + wc_printf(""); + } + wc_printf(""); } @@ -45,7 +85,10 @@ void feed_rss_do_messages(void) { int num_msgs_alloc = 0; int i; - serv_puts("MSGS ALL"); + serv_puts("MSGP text/html|text/plain"); /* identify our preferred mime types */ + serv_getln(buf, sizeof buf); /* don't care about the result */ + + serv_puts("MSGS ALL"); /* ask for all messages in the room */ serv_getln(buf, sizeof buf); if (buf[0] != '1') return; @@ -58,7 +101,7 @@ void feed_rss_do_messages(void) { msgs[num_msgs++] = atol(buf); } - i = num_msgs; + i = num_msgs; /* convention is to feed newest-to-oldest */ while (i > 0) { feed_rss_one_message(msgs[i-1]); --i; -- 2.39.2