+sub newsFlush {
+ if (@_) {
+ &ScheduleThis(1440, "newsFlush");
+ return if ($_[0] eq "2"); # defer.
+ } else {
+ delete $sched{"newsFlush"}{RUNNING};
+ }
+
+ return unless (&IsChanConf("news") > 0);
+
+ my $delete = 0;
+ my $oldest = time();
+ foreach $chan (keys %::news) {
+ foreach $item (keys %{ $::news{$chan} }) {
+ my $t = $::news{$chan}{$item}{Expire};
+
+ my $tadd = $::news{$chan}{$item}{Time};
+ $oldest = $tadd if ($oldest > $tadd);
+
+ next if ($t == 0 or $t == -1);
+ if ($t < 1000) {
+ &status("newsFlush: Fixed Expire time for $chan/$item, should not happen anyway.");
+ $::news{$chan}{$item}{Expire} = time() + $t*60*60*24;
+ next;
+ }
+
+ next unless (time() > $t);
+ # todo: show how old it was.
+ delete $::news{$chan}{$item};
+ &VERB("NEWS: deleted '$item'", 2);
+ $delete++;
+ }
+ }
+
+ # todo: flush users aswell.
+ my $duser = 0;
+ foreach $chan (keys %::newsuser) {
+ foreach (keys %{ $::newsuser{$chan} }) {
+ my $t = $::newsuser{$chan}{$_};
+ if (!defined $t or ($t > 2 and $t < 1000)) {
+ &DEBUG("something wrong with newsuser{$chan}{$_} => $t");
+ next;
+ }
+
+ next unless ($oldest > $t);
+
+ delete $::newsuser{$chan}{$_};
+ $duser++;
+ }
+ }
+
+# &VERB("NEWS deleted $delete seen entries.",2);
+ &status("NEWS deleted: $delete news entries; $duser user cache.");
+
+ &News::writeNews();
+}
+