Revert the parts of 03cd7985fad9d51530f613304869f3b7960b9f81 that remove the configur...
[citadel.git] / citadel / modules / rssclient / serv_rssclient.c
index 697b63b47b986111ca86f2e88609010b90e09f9b..7e5d03c40b2544fd0770c08bcff9446e4564c585 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Bring external RSS feeds into rooms.
  *
- * Copyright (c) 2007-2015 by the citadel.org team
+ * Copyright (c) 2007-2016 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 version 3.
@@ -139,13 +139,16 @@ static size_t GetLocationString( void *ptr, size_t size, size_t nmemb, void *use
        return size * nmemb;
 }
 
+
 static void SetRSSState(AsyncIO *IO, RSSState State)
 {
        CitContext* CCC = IO->CitContext;
-       if (CCC != NULL)
+       if (CCC != NULL) {
                memcpy(CCC->cs_clientname, RSSStates[State].Key, RSSStates[State].len + 1);
+       }
 }
 
+
 void DeleteRoomReference(long QRnumber)
 {
        HashPos *At;
@@ -218,8 +221,9 @@ void DeleteRssCfg(void *vptr)
        rss_aggregator *RSSAggr = (rss_aggregator *)vptr;
        AsyncIO *IO = &RSSAggr->IO;
 
-       if (IO->CitContext != NULL)
-               EVRSSCM_syslog(LOG_DEBUG, "RSS: destroying\n");
+       if (IO->CitContext != NULL) {
+               EVRSSCM_syslog(LOG_DEBUG, "RSS: destroying");
+       }
 
        FreeStrBuf(&RSSAggr->Url);
        FreeStrBuf(&RSSAggr->RedirectUrl);
@@ -250,7 +254,7 @@ eNextState RSSAggregator_Terminate(AsyncIO *IO)
 {
        rss_aggregator *RSSAggr = (rss_aggregator *)IO->Data;
 
-       EVRSSCM_syslog(LOG_DEBUG, "RSS: Terminating.\n");
+       EVRSSCM_syslog(LOG_DEBUG, "RSS: Terminating.");
 
        StopCurlWatchers(IO);
        UnlinkRSSAggregator(RSSAggr);
@@ -261,7 +265,7 @@ eNextState RSSAggregator_TerminateDB(AsyncIO *IO)
 {
        rss_aggregator *RSSAggr = (rss_aggregator *)IO->Data;
 
-       EVRSSCM_syslog(LOG_DEBUG, "RSS: Terminating.\n");
+       EVRSSCM_syslog(LOG_DEBUG, "RSS: Terminating.");
 
 
        StopDBWatchers(&RSSAggr->IO);
@@ -278,7 +282,7 @@ eNextState RSSAggregator_ShutdownAbort(AsyncIO *IO)
        if (pUrl == NULL)
                pUrl = "";
 
-       EVRSSC_syslog(LOG_DEBUG, "RSS: Aborting by shutdown: %s.\n", pUrl);
+       EVRSSC_syslog(LOG_DEBUG, "RSS: Aborting by shutdown: %s.", pUrl);
 
        StopCurlWatchers(IO);
        UnlinkRSSAggregator(RSSAggr);
@@ -375,20 +379,25 @@ int rss_format_item(AsyncIO *IO, networker_save_message *SaveMsg)
                StrBufSpaceToBlank(SaveMsg->title);
                len = StrLength(SaveMsg->title);
                Sbj = html_to_ascii(ChrPtr(SaveMsg->title), len, 512, 0);
-               len = strlen(Sbj);
-               if ((len > 0) && (Sbj[len - 1] == '\n'))
-               {
-                       len --;
-                       Sbj[len] = '\0';
-               }
-               Encoded = NewStrBufPlain(Sbj, len);
-               free(Sbj);
-
-               StrBufTrim(Encoded);
-               StrBufRFC2047encode(&QPEncoded, Encoded);
+               if (!IsEmptyStr(Sbj)) {
+                       len = strlen(Sbj);
+                       if ((Sbj[len - 1] == '\n'))
+                       {
+                               len --;
+                               Sbj[len] = '\0';
+                       }
+                       Encoded = NewStrBufPlain(Sbj, len);
+               
 
-               CM_SetAsFieldSB(&SaveMsg->Msg, eMsgSubject, &QPEncoded);
-               FreeStrBuf(&Encoded);
+                       StrBufTrim(Encoded);
+                       StrBufRFC2047encode(&QPEncoded, Encoded);
+                       
+                       CM_SetAsFieldSB(&SaveMsg->Msg, eMsgSubject, &QPEncoded);
+                       FreeStrBuf(&Encoded);
+               }
+               if (Sbj != NULL) {
+                       free(Sbj);
+               }
        }
        if (SaveMsg->link == NULL)
                SaveMsg->link = NewStrBufPlain(HKEY(""));
@@ -502,9 +511,9 @@ eNextState RSS_FetchNetworkUsetableEntry(AsyncIO *IO)
 
 void UpdateLastKnownGood(pRSSConfig *pCfg, time_t now)
 {
-       OneRoomNetCfgpRNCfg;
+       OneRoomNetCfg *pRNCfg;
        begin_critical_section(S_NETCONFIGS);
-       pRNCfg = CtdlGetNetCfgForRoom (pCfg->QRnumber);
+       pRNCfg = CtdlGetNetCfgForRoom(pCfg->QRnumber);
        if (pRNCfg != NULL)
        {
                RSSCfgLine *RSSCfg = (RSSCfgLine *)pRNCfg->NetConfigs[rssclient];
@@ -518,11 +527,11 @@ void UpdateLastKnownGood(pRSSConfig *pCfg, time_t now)
                }
                if (RSSCfg != NULL)
                {
-                       pRNCfg->changed = 1;
                        RSSCfg->last_known_good = now;
                }
        }
-
+       SaveRoomNetConfigFile(pRNCfg, pCfg->QRnumber);
+       FreeRoomNetworkStruct(&pRNCfg);
        end_critical_section(S_NETCONFIGS);
 }
 
@@ -538,18 +547,18 @@ eNextState RSSAggregator_AnalyseReply(AsyncIO *IO)
        rss_aggregator *Ctx = (rss_aggregator *) IO->Data;
 
 
-       if ((IO->HttpReq.httpcode >= 300) &&
-           (IO->HttpReq.httpcode < 400)  && 
-           (Ctx->RedirectUrl != NULL)) {
-
+       if ((IO->HttpReq.httpcode >= 300) && (IO->HttpReq.httpcode < 400)  && (Ctx->RedirectUrl != NULL))
+       {
                StrBuf *ErrMsg;
                long lens[2];
                const char *strs[2];
 
                SetRSSState(IO, eRSSFailure);
                ErrMsg = NewStrBuf();
-               if (IO) EVRSSC_syslog(LOG_ALERT, "need a 200, got a %ld !\n",
-                             IO->HttpReq.httpcode);
+               if (IO) {
+                       EVRSSC_syslog(LOG_INFO, "need a 200, got a %ld !",
+                                     IO->HttpReq.httpcode);
+               }
                strs[0] = ChrPtr(Ctx->Url);
                lens[0] = StrLength(Ctx->Url);
 
@@ -584,7 +593,7 @@ eNextState RSSAggregator_AnalyseReply(AsyncIO *IO)
                
                FreeStrBuf(&ErrMsg);
                EVRSSC_syslog(LOG_DEBUG,
-                             "RSS feed returned an invalid http status code. <%s><HTTP %ld>\n",
+                             "RSS feed returned an invalid http status code. <%s><HTTP %ld>",
                              ChrPtr(Ctx->Url),
                              IO->HttpReq.httpcode);
                return eAbort;
@@ -597,8 +606,10 @@ eNextState RSSAggregator_AnalyseReply(AsyncIO *IO)
 
                SetRSSState(IO, eRSSFailure);
                ErrMsg = NewStrBuf();
-               if (IO) EVRSSC_syslog(LOG_ALERT, "need a 200, got a %ld !\n",
-                             IO->HttpReq.httpcode);
+               if (IO) {
+                       EVRSSC_syslog(LOG_ALERT, "need a 200, got a %ld !",
+                                     IO->HttpReq.httpcode);
+               }
                strs[0] = ChrPtr(Ctx->Url);
                lens[0] = StrLength(Ctx->Url);
 
@@ -631,7 +642,7 @@ eNextState RSSAggregator_AnalyseReply(AsyncIO *IO)
                
                FreeStrBuf(&ErrMsg);
                EVRSSC_syslog(LOG_DEBUG,
-                             "RSS feed returned an invalid http status code. <%s><HTTP %ld>\n",
+                             "RSS feed returned an invalid http status code. <%s><HTTP %ld>",
                              ChrPtr(Ctx->Url),
                              IO->HttpReq.httpcode);
                return eAbort;
@@ -691,7 +702,7 @@ eNextState RSSAggregator_AnalyseReply(AsyncIO *IO)
        {
                FreeStrBuf(&guid);
 
-               EVRSSC_syslog(LOG_DEBUG, "RSS feed already seen. <%s>\n", ChrPtr(Ctx->Url));
+               EVRSSC_syslog(LOG_DEBUG, "RSS feed already seen. <%s>", ChrPtr(Ctx->Url));
                return eAbort;
        }
        FreeStrBuf(&guid);
@@ -734,7 +745,7 @@ int rss_do_fetching(rss_aggregator *RSSAggr)
                               RSSAggregator_TerminateDB,
                               RSSAggregator_ShutdownAbort))
        {
-               EVRSSCM_syslog(LOG_ALERT, "Unable to initialize libcurl.\n");
+               EVRSSCM_syslog(LOG_ALERT, "Unable to initialize libcurl.");
                return 0;
        }
        chnd = IO->HttpReq.chnd;
@@ -746,7 +757,7 @@ int rss_do_fetching(rss_aggregator *RSSAggr)
                    ChrPtr(RSSAggr->Url),
                    sizeof(((CitContext*)RSSAggr->IO.CitContext)->cs_host));
 
-       EVRSSC_syslog(LOG_DEBUG, "Fetching RSS feed <%s>\n", ChrPtr(RSSAggr->Url));
+       EVRSSC_syslog(LOG_DEBUG, "Fetching RSS feed <%s>", ChrPtr(RSSAggr->Url));
        ParseURL(&RSSAggr->IO.ConnectMe, RSSAggr->Url, 80);
        CurlPrepareURL(RSSAggr->IO.ConnectMe);
 
@@ -765,11 +776,12 @@ void rssclient_scan_room(struct ctdlroom *qrbuf, void *data, OneRoomNetCfg *OneR
        rss_aggregator *use_this_RSSAggr = NULL;
        void *vptr;
 
+       EVRSSQ_syslog(LOG_DEBUG, "rssclient_scan_room(%s)", qrbuf->QRname);
        pthread_mutex_lock(&RSSQueueMutex);
        if (GetHash(RSSQueueRooms, LKEY(qrbuf->QRnumber), &vptr))
        {
                EVRSSQ_syslog(LOG_DEBUG,
-                             "rssclient: [%ld] %s already in progress.\n",
+                             "rssclient: [%ld] %s already in progress.",
                              qrbuf->QRnumber,
                              qrbuf->QRname);
                pthread_mutex_unlock(&RSSQueueMutex);
@@ -909,7 +921,7 @@ void rssclient_scan(void) {
        else
                EVRSSQM_syslog(LOG_DEBUG, "Nothing to do.");
 
-       EVRSSQM_syslog(LOG_DEBUG, "rssclient ended\n");
+       EVRSSQM_syslog(LOG_DEBUG, "rssclient ended");
        return;
 }