#define RSS_REQUIRE_BUF (1<<3)
typedef struct _rss_item {
- char *roomlist;
- int done_parsing;
+ int done_parsing;
+ int item_tag_nesting;
+ int roomlist_parts;
+ time_t pubdate;
+ StrBuf *roomlist;
StrBuf *guid;
StrBuf *title;
StrBuf *link;
StrBuf *reLink;
StrBuf *reLinkTitle;
StrBuf *description;
- time_t pubdate;
StrBuf *channel_title;
- int item_tag_nesting;
StrBuf *author_or_creator;
StrBuf *author_url;
StrBuf *author_email;
}rss_item;
-
-typedef struct rssnetcfg rssnetcfg;
-struct rssnetcfg {
- int Attached;
- rssnetcfg *next;
- StrBuf* Url;
- char *rooms;
- time_t last_error_when;
- int ItemType;
- time_t next_poll;
-};
+typedef struct __rssnetcfg {
+ int Attached;
+ int ItemType;
+ int roomlist_parts;
+ time_t last_error_when;
+ time_t next_poll;
+ StrBuf *Url;
+ StrBuf *rooms;
+}rssnetcfg;
typedef void (*rss_handler_func)(StrBuf *CData,
rss_item *ri,
const char** Attr);
typedef struct __rss_xml_handler {
- int Flags;
+ int Flags;
rss_handler_func Handler;
}rss_xml_handler;
typedef struct _rsscollection {
- AsyncIO IO;
- XML_Parser xp;
-
- StrBuf *CData;
- StrBuf *Key;
-
- rss_item *Item;
- rssnetcfg *Cfg;
+ AsyncIO IO;
+ XML_Parser xp;
+
+ StrBuf *CData;
+ StrBuf *Key;
+
+ rss_item *Item;
+ rssnetcfg *Cfg;
rss_xml_handler *Current;
} rsscollection;
int msglen = 0;
StrBuf *Message;
StrBuf *guid;
+ StrBuf *Buf;
recp = (struct recptypes *) malloc(sizeof(struct recptypes));
if (recp == NULL) return;
memset(recp, 0, sizeof(struct recptypes));
- recp->recp_room = strdup(ri->roomlist);
- recp->num_room = num_tokens(ri->roomlist, '|');
+ Buf = NewStrBufDup(ri->roomlist);
+ recp->recp_room = SmashStrBuf(&Buf);
+ recp->num_room = ri->roomlist_parts;
recp->recptypes_magic = RECPTYPES_MAGIC;
/* Construct a GUID to use in the S_USETABLE table.
rssnetcfg *rncptr = (rssnetcfg *)vptr;
FreeStrBuf(&rncptr->Url);
- if (rncptr->rooms != NULL) free(rncptr->rooms);
+ FreeStrBuf(&rncptr->rooms);
free(rncptr);
}
Count->count ++;
rncptr = (rssnetcfg *) malloc(sizeof(rssnetcfg));
memset (rncptr, 0, sizeof(rssnetcfg));
+ rncptr->roomlist_parts = 1;
rncptr->Url = NewStrBuf();
StrBufExtract_NextToken(rncptr->Url, Line, &lPtr, '|');
}
else
{
- /* TODO: hook us into the otherone here. */
+ StrBufAppendBufPlain(use_this_rncptr->rooms,
+ qrbuf->QRname,
+ -1, 0);
+ use_this_rncptr->roomlist_parts++;
}
continue;
rncptr->ItemType = RSS_UNSET;
- rncptr->rooms = NULL;
- rncptr->rooms = strdup(qrbuf->QRname);
+ rncptr->rooms = NewStrBufPlain(qrbuf->QRname, -1);
citthread_mutex_lock(&RSSQueueMutex);
Put(RSSFetchUrls, SKEY(rncptr->Url), rncptr, DeleteRssCfg);