X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Ffeed_generator.c;h=34b721bdd248ec35fd8902a6558e69902d2eb6f5;hb=4b4dc864ede7c5d8d956febe4a0afb422b78e7c4;hp=8aa3f0912cfceab4c9d1e74c55c82738037758e4;hpb=99fb55af6e6e18b3c190de29eef4ebadab2010b1;p=citadel.git diff --git a/webcit/feed_generator.c b/webcit/feed_generator.c index 8aa3f0912..34b721bdd 100644 --- a/webcit/feed_generator.c +++ b/webcit/feed_generator.c @@ -36,6 +36,7 @@ void feed_rss_one_message(long msgnum) { const char *BufPtr = NULL; StrBuf *Line = NewStrBufPlain(NULL, 1024); char buf[1024]; + int permalink_hash = 0; /* Phase 1: read the message into memory */ serv_printf("MSG4 %ld", msgnum); @@ -49,10 +50,19 @@ void feed_rss_one_message(long msgnum) { /* Phase 2: help SkyNet become self-aware */ BufPtr = NULL; while (StrBufSipLine(Line, ServerResponse, &BufPtr), ((BufPtr!=StrBufNOTNULL)&&(BufPtr!=NULL)) ) { - if (StrLength(Line) == 0) ++in_body; - if ((StrLength(Line) > 5) && (!strncasecmp(ChrPtr(Line), "wefw=", 5))) { + if (in_body) { + /* do nothing */ + } + else if (StrLength(Line) == 0) { + ++in_body; + } + else if ((StrLength(Line) > 5) && (!strncasecmp(ChrPtr(Line), "wefw=", 5))) { is_top_level_post = 0; /* presence of references means it's a reply/comment */ } + else if ((StrLength(Line) > 5) && (!strncasecmp(ChrPtr(Line), "msgn=", 5))) { + StrBufCutLeft(Line, 5); + permalink_hash = ThreadIdHash(Line); + } } /* @@ -63,7 +73,13 @@ void feed_rss_one_message(long msgnum) { wc_printf(""); wc_printf("%s/readfwd?go=", ChrPtr(site_prefix)); urlescputs(ChrPtr(WC->CurRoom.name)); - wc_printf("?start_reading_at=%ld", msgnum); + if ((WC->CurRoom.view == VIEW_BLOG) && (permalink_hash != 0)) { + wc_printf("?p=%d", permalink_hash); + } + else { + wc_printf("?start_reading_at=%ld", msgnum); + } + wc_printf(""); BufPtr = NULL; in_body = 0; @@ -139,7 +155,7 @@ void feed_rss_do_messages(void) { Stat.maxload = INT_MAX; Stat.lowest_found = (-1); Stat.highest_found = (-1); - num_msgs = load_msg_ptrs("MSGS ALL", &Stat, NULL); + num_msgs = load_msg_ptrs("MSGS ALL", NULL, &Stat, NULL); if (num_msgs < 1) return; i = num_msgs; /* convention is to feed newest-to-oldest */ @@ -251,17 +267,16 @@ void tmplput_rssmeta(StrBuf *Target, WCTemplputParams *TP) */ void tmplput_rssbutton(StrBuf *Target, WCTemplputParams *TP) { - wcsession *WCC = WC; - char feed_link[1024]; - char encoded_link[1024]; + StrBuf *FeedLink = NULL; - strcpy(feed_link, "/feed_rss?go="); - urlesc(&feed_link[20], sizeof(feed_link) - 20, (char *)ChrPtr(WCC->CurRoom.name) ); - CtdlEncodeBase64(encoded_link, feed_link, strlen(feed_link), 0); + FeedLink = NewStrBufPlain(HKEY("/feed_rss?go=")); + StrBufUrlescAppend(FeedLink, WC->CurRoom.name, NULL); - StrBufAppendPrintf(Target, "", encoded_link); - StrBufAppendPrintf(Target, "\"RSS\""); + StrBufAppendPrintf(Target, "\"RSS\""); StrBufAppendPrintf(Target, ""); + FreeStrBuf(&FeedLink); }