Parse date format correctly in Atom feeds
[citadel.git] / citadel / modules / rssclient / serv_rssclient.c
index 2b1baa5d9b14f014a6677f3d8e355729bcea1fe0..686dd7268cedffe0b25578ee304ea3403262d08b 100644 (file)
@@ -213,13 +213,21 @@ void rss_end_element(void *data, const char *el)
        }
 
        else if (!strcasecmp(el, "pubdate")) {                  // date/time stamp (rss) Sat, 25 Feb 2017 14:28:01 EST
-               if (CM_IsEmpty(r->msg, eTimestamp)) {
+               if ((r->msg)&&(r->msg->cm_fields[eTimestamp]==NULL)) {
                        CM_SetFieldLONG(r->msg, eTimestamp, parsedate(ChrPtr(r->CData)));
                }
        }
 
        else if (!strcasecmp(el, "updated")) {                  // date/time stamp (atom) 2003-12-13T18:30:02Z
-               // FIXME parse it
+               if ((r->msg)&&(r->msg->cm_fields[eTimestamp]==NULL)) {
+                       struct tm t;
+                       char zulu;
+                       memset(&t, 0, sizeof t);
+                       sscanf(ChrPtr(r->CData), "%d-%d-%dT%d:%d:%d%c", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec, &zulu);
+                       t.tm_year -= 1900;
+                       t.tm_mon -= 1;
+                       CM_SetFieldLONG(r->msg, eTimestamp, mktime(&t));
+               }
        }
 
        else if (!strcasecmp(el, "link")) {                     // link to story (rss)
@@ -284,7 +292,7 @@ void rss_parse_feed(StrBuf *Feed, struct rssroom *rooms)
 
        memset(&r, 0, sizeof r);
        r.rooms = rooms;
-       XML_Parser p = XML_ParserCreateNS("UTF-8", ':');
+       XML_Parser p = XML_ParserCreate("UTF-8");
        XML_SetElementHandler(p, rss_start_element, rss_end_element);
        XML_SetCharacterDataHandler(p, rss_handle_data);
        XML_SetUserData(p, (void *)&r);