}
+/*
+ * XML sitemap generator -- go through the message list for a Blog room
+ */
+void sitemap_do_blog(void) {
+ wcsession *WCC = WC;
+ int num_msgs = 0;
+ int i;
+ SharedMessageStatus Stat;
+ message_summary *Msg = NULL;
+
+ memset(&Stat, 0, sizeof Stat);
+ Stat.maxload = INT_MAX;
+ Stat.lowest_found = (-1);
+ Stat.highest_found = (-1);
+ num_msgs = load_msg_ptrs("MSGS ALL", &Stat, NULL);
+ if (num_msgs < 1) return;
+
+ for (i=0; i<num_msgs; ++i) {
+ Msg = GetMessagePtrAt(i, WCC->summ);
+ if (Msg != NULL) {
+ struct bltr bltr = blogview_learn_thread_references(Msg->msgnum);
+ /* Show only top level posts, not comments */
+ if ((bltr.id != 0) && (bltr.refs == 0)) {
+ WC->bptlid = bltr.id;
+ wc_printf("<url><loc>%s", ChrPtr(site_prefix));
+ tmplput_blog_permalink(NULL, NULL);
+ wc_printf("</loc></url>\r\n");
+ }
+ }
+ }
+}
+
+
/*
* XML sitemap generator -- go through the message list for a wiki room
- * (this might work for blogs too; we'll see)
*/
void sitemap_do_wiki(void) {
wcsession *WCC = WC;
* Entry point for RSS feed generator
*/
void sitemap(void) {
- HashList *roomlist;
- HashPos *it;
- long HKlen;
- const char *HashKey;
- folder *room;
+ HashList *roomlist = NULL;
+ HashPos *it = NULL;
+ long HKlen = 0;
+ const char *HashKey = NULL;
+ folder *room = NULL;
output_headers(0, 0, 0, 0, 1, 0);
hprintf("Content-type: text/xml\r\n");
wc_printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
wc_printf("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n");
- roomlist = GetRoomListHashLKRA(NULL, NULL);
+ roomlist = GetRoomListHash(NULL, NULL);
+ if (!roomlist) syslog(LOG_CRIT, "GetRoomListHash() FAILED!");
it = GetNewHashPos(roomlist, 0);
+ if (!it) syslog(LOG_CRIT, "GetNewHashPos() FAILED!");
while (GetNextHashPos(roomlist, it, &HKlen, &HashKey, (void *)&room))
{
+ gotoroom(room->name);
+
/* Output the messages in this room only if it's a room type we can make sense of */
switch(room->defview) {
- case VIEW_BBS:
- gotoroom(room->name);
- sitemap_do_bbs();
- break;
- case VIEW_WIKI:
- gotoroom(room->name);
- sitemap_do_wiki();
- break;
- default:
- break;
+ case VIEW_BBS:
+ sitemap_do_bbs();
+ break;
+ case VIEW_WIKI:
+ sitemap_do_wiki();
+ break;
+ case VIEW_BLOG:
+ sitemap_do_blog();
+ break;
+ default:
+ break;
}
}
DeleteHashPos(&it);
- /* DeleteHash(&roomlist); This will be freed when the session closes */
-
+ DeleteHash(&roomlist);
wc_printf("</urlset>\r\n");
wDumpContent(0);
}