/*
* XML sitemap generator
*
- * Copyright (c) 2010-2011 by the citadel.org team
+ * Copyright (c) 2010-2012 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "webcit.h"
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, NULL, &Stat, NULL, NULL, NULL, NULL, 0);
if (num_msgs < 1) return;
for (i=0; i<num_msgs; i+=20) {
/*
* 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;
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, NULL, &Stat, NULL, NULL, NULL, NULL, 0);
if (num_msgs < 1) return;
for (i=0; i<num_msgs; ++i) {
}
+struct sitemap_room_list {
+ struct sitemap_room_list *next;
+ StrBuf *roomname;
+ int defview;
+};
+
+
+/*
+ * Load the room list for the sitemap
+ */
+struct sitemap_room_list *sitemap_load_roomlist(void) {
+ char buf[SIZ];
+ char roomname_plain[SIZ];
+ struct sitemap_room_list *roomlist = NULL;
+
+ serv_puts("LKRA");
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '1') while(serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+ struct sitemap_room_list *ptr = malloc(sizeof(struct sitemap_room_list));
+ extract_token(roomname_plain, buf, 0, '|', sizeof roomname_plain);
+ ptr->roomname = NewStrBufPlain(roomname_plain, -1);
+ ptr->defview = extract_int(buf, 6);
+ ptr->next = roomlist;
+ roomlist = ptr;
+ }
+
+ return(roomlist);
+}
+
+extern void sitemap_do_blog(void);
+
/*
* Entry point for RSS feed generator
*/
void sitemap(void) {
-
+ struct sitemap_room_list *roomlist = NULL;
output_headers(0, 0, 0, 0, 1, 0);
hprintf("Content-type: text/xml\r\n");
hprintf(
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");
- HashList *roomlist = GetRoomListHashLKRA(NULL, NULL);
- HashPos *it = GetNewHashPos(roomlist, 0);
- long HKlen;
- const char *HashKey;
- folder *room;
+ roomlist = sitemap_load_roomlist();
- while (GetNextHashPos(roomlist, it, &HKlen, &HashKey, (void *)&room))
+ while (roomlist != NULL)
{
+ struct sitemap_room_list *ptr;
+
+ gotoroom(roomlist->roomname);
+
/* Output the messages in this room only if it's a room type we can make sense of */
- switch(room->defview) {
+ switch(roomlist->defview) {
case VIEW_BBS:
- gotoroom(room->name);
sitemap_do_bbs();
break;
case VIEW_WIKI:
- gotoroom(room->name);
+ case VIEW_WIKIMD:
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 */
+ ptr = roomlist;
+ roomlist = roomlist->next;
+ FreeStrBuf(&ptr->roomname);
+ free(ptr);
+ }
wc_printf("</urlset>\r\n");
wDumpContent(0);