comparison src/noffle.c @ 192:b9ef99708d1c noffle

[svn] * docs/noffle.conf.5,src/noffle.c: Duh! Do unsubscribing the simple way. Auto-unsubscribe when the last access time is more than the threshold number of days behind the time the last article arrived.
author bears
date Sun, 21 Oct 2001 12:00:12 +0100
parents 28488e0e3630
children 61a0f1e13916
comparison
equal deleted inserted replaced
191:28488e0e3630 192:b9ef99708d1c
8 not as server. If noffle runs as server, locking is performed while 8 not as server. If noffle runs as server, locking is performed while
9 executing NNTP commands, but temporarily released if no new command is 9 executing NNTP commands, but temporarily released if no new command is
10 received for some seconds (to allow multiple clients connect at the same 10 received for some seconds (to allow multiple clients connect at the same
11 time). 11 time).
12 12
13 $Id: noffle.c 310 2001-10-20 13:23:46Z bears $ 13 $Id: noffle.c 311 2001-10-21 11:00:12Z bears $
14 */ 14 */
15 15
16 #if HAVE_CONFIG_H 16 #if HAVE_CONFIG_H
17 #include <config.h> 17 #include <config.h>
18 #endif 18 #endif
235 int i; 235 int i;
236 int cntDel, cntLeft; 236 int cntDel, cntLeft;
237 Str grp; 237 Str grp;
238 Bool autoUnsubscribe; 238 Bool autoUnsubscribe;
239 int autoUnsubscribeDays; 239 int autoUnsubscribeDays;
240 time_t now = time( NULL ), maxAge = 0; 240 time_t maxAge = 0;
241 const char *msgId; 241 const char *msgId;
242 242
243 autoUnsubscribe = Cfg_autoUnsubscribe(); 243 autoUnsubscribe = Cfg_autoUnsubscribe();
244 autoUnsubscribeDays = Cfg_autoUnsubscribeDays(); 244 autoUnsubscribeDays = Cfg_autoUnsubscribeDays();
245 maxAge = Cfg_autoUnsubscribeDays() * 24 * 3600; 245 maxAge = Cfg_autoUnsubscribeDays() * 24 * 3600;
265 ++cntDel; 265 ++cntDel;
266 } 266 }
267 else 267 else
268 ++cntLeft; 268 ++cntLeft;
269 } 269 }
270
271 /*
272 * Auto unsubscribe where applicable if last article arrival
273 * time is maxAge newer than the last access time. This ensures
274 * the low traffic groups don't get expired simply because
275 * there's been nothing to read.
276 */
270 if ( ! Grp_local( grp ) 277 if ( ! Grp_local( grp )
271 && Fetchlist_contains( grp ) 278 && Fetchlist_contains( grp )
272 && autoUnsubscribe 279 && autoUnsubscribe
273 && difftime( now, Grp_lastAccess( grp ) ) > maxAge ) 280 && difftime( Grp_lastPostTime(grp),
281 Grp_lastAccess( grp ) ) > maxAge )
274 { 282 {
275 /* If there have been recent posts, unsubscribe. */ 283 Log_ntc( "Auto-unsubscribing from %s after %d "
276 if ( difftime( now, Grp_lastPostTime( grp ) ) <= maxAge ) 284 "days without access",
277 { 285 grp, autoUnsubscribeDays );
278 Log_ntc( "Auto-unsubscribing from %s after %d " 286 Pseudo_autoUnsubscribed( grp, autoUnsubscribeDays );
279 "days without access", 287 Fetchlist_remove( grp );
280 grp, autoUnsubscribeDays ); 288 Grp_setRmtNext( grp, GRP_RMT_NEXT_NOT_SUBSCRIBED );
281 Pseudo_autoUnsubscribed( grp, autoUnsubscribeDays );
282 Fetchlist_remove( grp );
283 Grp_setRmtNext( grp, GRP_RMT_NEXT_NOT_SUBSCRIBED );
284 }
285 else
286 {
287 /*
288 * Otherwise if no recent posts touch the access.
289 * This way we don't unsubscribe to low volume groups
290 * unread only because there are no recent posts.
291 */
292 Grp_setLastAccess( grp );
293 }
294 } 289 }
295 Cont_write(); 290 Cont_write();
296 Grp_setFirstLast( grp, Cont_first(), Cont_last() ); 291 Grp_setFirstLast( grp, Cont_first(), Cont_last() );
297 Log_inf( "%ld overviews deleted from group %s, %ld left (%ld-%ld)", 292 Log_inf( "%ld overviews deleted from group %s, %ld left (%ld-%ld)",
298 cntDel, grp, cntLeft, Grp_first( grp ), Grp_last( grp ) ); 293 cntDel, grp, cntLeft, Grp_first( grp ), Grp_last( grp ) );