From 70911d4adbfc3dd8751a23f912c7ca6781a24411 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sat, 18 Sep 2010 16:02:30 +0200 Subject: [PATCH] * suport author/email tag in atoms * try more elaborate to create a valid email address with realname and email sender (if available, else it will be 'rss@localhost') --- citadel/modules/rssclient/serv_rssclient.c | 50 ++++++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index 17ec61ace..e43b56ee0 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -85,6 +85,7 @@ typedef struct _rss_item { int item_tag_nesting; StrBuf *author_or_creator; StrBuf *author_url; + StrBuf *author_email; }rss_item; @@ -356,7 +357,7 @@ void rss_save_item(rss_item *ri) /* Find out if we've already seen this item */ cdbut = cdb_fetch(CDB_USETABLE, utmsgid, strlen(utmsgid)); -#ifndef DEBUG_RSS +#ifdef DEBUG_RSS/////TODO ifndef if (cdbut != NULL) { /* Item has already been seen */ CtdlLogPrintf(CTDL_DEBUG, "%s has already been seen\n", utmsgid); @@ -390,6 +391,7 @@ void rss_save_item(rss_item *ri) StrBuf *UserName; StrBuf *EmailAddress; StrBuf *EncBuf; + int FromAt; UserName = NewStrBuf(); EmailAddress = NewStrBuf(); @@ -398,8 +400,37 @@ void rss_save_item(rss_item *ri) From = html_to_ascii(ChrPtr(ri->author_or_creator), StrLength(ri->author_or_creator), 512, 0); - - Encoded = NewStrBufPlain(From, -1); + FromAt = strchr(From, '@') != NULL; + if (!FromAt && StrLength (ri->author_email) > 0) + { + Encoded = NewStrBuf(); + if (!IsEmptyStr(From)) + { + StrBufPrintf(Encoded, + "\"%s\" <%s>", + From, + ChrPtr(ri->author_email)); + } + else + { + StrBufPrintf(Encoded, + "<%s>", + ChrPtr(ri->author_email)); + } + } + else + { + if (FromAt) + Encoded = NewStrBufPlain(From, -1); + else + { + Encoded = NewStrBuf(); + StrBufPrintf(Encoded, + "\"%s\" <%s>", + From, + "rss@localhost"); /// TODO: get hostname? + } + } free(From); StrBufTrim(Encoded); QPEncoded = StrBufSanitizeEmailRecipientVector(Encoded, UserName, EmailAddress, EncBuf); @@ -520,6 +551,7 @@ void flush_rss_item(rss_item *ri) FreeStrBuf(&ri->title); FreeStrBuf(&ri->link); FreeStrBuf(&ri->author_or_creator); + FreeStrBuf(&ri->author_email); FreeStrBuf(&ri->author_url); FreeStrBuf(&ri->description); } @@ -881,6 +913,14 @@ void ATOM_item_name_end(StrBuf *CData, rss_item *ri, rssnetcfg *Cfg, const char* } } +void ATOM_item_email_end(StrBuf *CData, rss_item *ri, rssnetcfg *Cfg, const char** Attr) +{ + if (StrLength(CData) > 0) { + NewStrBufDupAppendFlush(&ri->author_email, CData, NULL, 0); + StrBufTrim(ri->author_email); + } +} + void RSS_item_creator_end(StrBuf *CData, rss_item *ri, rssnetcfg *Cfg, const char** Attr) { if ((StrLength(CData) > 0) && @@ -1262,9 +1302,11 @@ CTDL_MODULE_INIT(rssclient) AddRSSEndHandler(RSS_item_date_end, RSS_RSS|RSS_REQUIRE_BUF, HKEY("date")); AddRSSEndHandler(RSS_item_author_end, RSS_RSS|RSS_REQUIRE_BUF, HKEY("author")); AddRSSEndHandler(RSS_item_creator_end, RSS_RSS|RSS_REQUIRE_BUF, HKEY("creator")); +/* */ + AddRSSEndHandler(ATOM_item_email_end, RSS_ATOM|RSS_REQUIRE_BUF, HKEY("email")); AddRSSEndHandler(ATOM_item_name_end, RSS_ATOM|RSS_REQUIRE_BUF, HKEY("name")); AddRSSEndHandler(ATOM_item_uri_end, RSS_ATOM|RSS_REQUIRE_BUF, HKEY("uri")); - +/* */ AddRSSEndHandler(RSS_item_item_end, RSS_RSS, HKEY("item")); AddRSSEndHandler(RSS_item_rss_end, RSS_RSS, HKEY("rss")); AddRSSEndHandler(RSS_item_rdf_end, RSS_RSS, HKEY("rdf")); -- 2.39.2