X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Frssclient%2Fserv_rssclient.c;h=ca05dd62d5067d619f77e030bf797b11a9b450a4;hb=0387f48886a9395d89eaca01cd40ab751610426f;hp=85d7f0c1b2675c8e068520790e610e13b7fc4d36;hpb=f3d67d7b31c63a0830c714420f6c3af0fdbbb13b;p=citadel.git diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index 85d7f0c1b..ca05dd62d 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -118,6 +118,11 @@ void rss_start_element(void *data, const char *el, const char **attribute) void rss_end_element(void *data, const char *el) { struct rssparser *r = (struct rssparser *)data; + StrBuf *encoded_field; + + if (StrLength(r->CData) > 0) { // strip leading/trailing whitespace from field + StrBufTrim(r->CData); + } if ( // end of a new item(rss) or entry(atom) (!strcasecmp(el, "entry")) @@ -175,7 +180,7 @@ void rss_end_element(void *data, const char *el) long msgnum = (-1); for (rr=r->rooms; rr!=NULL; rr=rr->next) { if (rr == r->rooms) { - msgnum = CtdlSubmitMsg(r->msg, NULL, rr->room, 0); // in first room, save msg + msgnum = CtdlSubmitMsg(r->msg, NULL, rr->room); // in first room, save msg } else { CtdlSaveMsgPointerInRoom(rr->room, msgnum, 0, NULL); // elsewhere, save a pointer @@ -199,22 +204,25 @@ void rss_end_element(void *data, const char *el) else if (!strcasecmp(el, "title")) { // item subject (rss and atom) if ((r->msg != NULL) && (CM_IsEmpty(r->msg, eMsgSubject))) { - CM_SetField(r->msg, eMsgSubject, ChrPtr(r->CData), StrLength(r->CData)); - striplt(r->msg->cm_fields[eMsgSubject]); + encoded_field = NewStrBuf(); + StrBufRFC2047encode(&encoded_field, r->CData); + CM_SetAsFieldSB(r->msg, eMsgSubject, &encoded_field); } } else if (!strcasecmp(el, "creator")) { // can be used if is not present if ((r->msg != NULL) && (CM_IsEmpty(r->msg, eAuthor))) { - CM_SetField(r->msg, eAuthor, ChrPtr(r->CData), StrLength(r->CData)); - striplt(r->msg->cm_fields[eAuthor]); + encoded_field = NewStrBuf(); + StrBufRFC2047encode(&encoded_field, r->CData); + CM_SetAsFieldSB(r->msg, eAuthor, &encoded_field); } } else if (!strcasecmp(el, "author")) { // supercedes if both are present if (r->msg != NULL) { - CM_SetField(r->msg, eAuthor, ChrPtr(r->CData), StrLength(r->CData)); // CM_SetField will free() the previous value - striplt(r->msg->cm_fields[eAuthor]); + encoded_field = NewStrBuf(); + StrBufRFC2047encode(&encoded_field, r->CData); + CM_SetAsFieldSB(r->msg, eAuthor, &encoded_field); } } @@ -242,7 +250,6 @@ void rss_end_element(void *data, const char *el) r->link = NULL; } r->link = strdup(ChrPtr(r->CData)); - striplt(r->link); } else if ( @@ -254,7 +261,6 @@ void rss_end_element(void *data, const char *el) r->item_id = NULL; } r->item_id = strdup(ChrPtr(r->CData)); - striplt(r->item_id); } else if ( @@ -267,7 +273,6 @@ void rss_end_element(void *data, const char *el) r->description = NULL; } r->description = strdup(ChrPtr(r->CData)); - striplt(r->description); } if (r->CData != NULL) {