]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/rssclient/serv_rssclient.c
finalize RSS/curlev implementation
[citadel.git] / citadel / modules / rssclient / serv_rssclient.c
index 561da6d96f9fc2b7bcc06bc7d38273983d499cf4..c125f61748aa956a38d48a3915135e1e737db01e 100644 (file)
@@ -62,6 +62,8 @@
 #define TMP_SHORTER_URL_OFFSET 0xFE
 #define TMP_SHORTER_URLS 0xFD
 
+time_t last_run = 0L;
+
 pthread_mutex_t RSSQueueMutex; /* locks the access to the following vars: */
 HashList *RSSQueueRooms = NULL; /* rss_room_counter */
 HashList *RSSFetchUrls = NULL; /* -> rss_aggregator; ->RefCount access to be locked too. */
@@ -140,7 +142,7 @@ void UnlinkRooms(rss_aggregator *Cfg)
                }
 /*
                if (server_shutting_down)
-                       break; /* TODO */
+                       break; / * TODO */
 
                DeleteHashPos(&At);
        }
@@ -158,6 +160,7 @@ void UnlinkRSSAggregator(rss_aggregator *Cfg)
                DeleteEntryFromHash(RSSFetchUrls, At);
        }
        DeleteHashPos(&At);
+       last_run = time(NULL);
 }
 
 eNextState FreeNetworkSaveMessage (AsyncIO *IO)
@@ -178,7 +181,10 @@ eNextState FreeNetworkSaveMessage (AsyncIO *IO)
        free_recipients(Ctx->recp);
        FreeStrBuf(&Ctx->Message);
        FreeStrBuf(&Ctx->MsgGUID);
+       ((struct CitContext*)IO->CitContext)->state = CON_IDLE;
+       ((struct CitContext*)IO->CitContext)->kill_me = 1;
        free(Ctx);
+       last_run = time(NULL);
        return eAbort;
 }
 
@@ -234,6 +240,11 @@ void RSSQueueSaveMessage(struct CtdlMessage *Msg, struct recptypes *recp, StrBuf
 {
        networker_save_message *Ctx;
 
+       pthread_mutex_lock(&RSSQueueMutex);
+       Cfg->RefCount ++;
+       pthread_mutex_unlock(&RSSQueueMutex);
+
+
        Ctx = (networker_save_message *) malloc(sizeof(networker_save_message));
        memset(Ctx, 0, sizeof(networker_save_message));
        
@@ -428,7 +439,7 @@ int rss_do_fetching(rss_aggregator *Cfg)
 
        if ((Cfg->next_poll != 0) && (now < Cfg->next_poll))
                return 0;
-       Cfg->RefCount = 1;
+       Cfg->RefCount++;
 
        ri = (rss_item*) malloc(sizeof(rss_item));
        memset(ri, 0, sizeof(rss_item));
@@ -453,7 +464,7 @@ int rss_do_fetching(rss_aggregator *Cfg)
                return 0;
        }
 
-       evcurl_handle_start(IO);
+       QueueCurlContext(IO);
        return 1;
 }
 
@@ -492,12 +503,12 @@ void DeleteRssCfg(void *vptr)
 eNextState RSSAggregatorTerminate(AsyncIO *IO)
 {
        rss_aggregator *rncptr = (rss_aggregator *)IO->Data;
-       /*
-         HashPos *At;
-         long HKLen;
-         const char *HK;
-         void *vData;
-       */
+       
+       HashPos *At;
+       long HKLen;
+       const char *HK;
+       void *vData;
+
        pthread_mutex_lock(&RSSQueueMutex);
        rncptr->RefCount --;
        if (rncptr->RefCount == 0)
@@ -506,7 +517,7 @@ eNextState RSSAggregatorTerminate(AsyncIO *IO)
 
        }
        pthread_mutex_unlock(&RSSQueueMutex);
-/*
+
        At = GetNewHashPos(RSSFetchUrls, 0);
 
        pthread_mutex_lock(&RSSQueueMutex);
@@ -516,7 +527,6 @@ eNextState RSSAggregatorTerminate(AsyncIO *IO)
        pthread_mutex_unlock(&RSSQueueMutex);
 
        DeleteHashPos(&At);
-*/
        return eAbort;
 }
 
@@ -642,7 +652,7 @@ void rssclient_scan_room(struct ctdlroom *qrbuf, void *data)
                            pthread_mutex_unlock(&RSSQueueMutex);
 
 
-                           FreeStrBuf(&rncptr->Url);       
+                           FreeStrBuf(&rncptr->Url);
                            free(rncptr);
                            rncptr = NULL;
                            continue;