630 |
# RSS follow |
# RSS follow |
631 |
# |
# |
632 |
|
|
633 |
my $_rss; |
my $_stat; |
634 |
|
|
635 |
|
|
636 |
sub rss_fetch { |
sub rss_fetch { |
652 |
$total++; |
$total++; |
653 |
|
|
654 |
# seen allready? |
# seen allready? |
655 |
next if $_rss->{$args->{channel}}->{$feed->link}->{$entry->id}++ > 0; |
next if $_stat->{rss}->{seen}->{$args->{channel}}->{$feed->link}->{$entry->id}++ > 0; |
656 |
|
|
657 |
sub prefix { |
sub prefix { |
658 |
my ($txt,$var) = @_; |
my ($txt,$var) = @_; |
727 |
|
|
728 |
sub rss_check_updates { |
sub rss_check_updates { |
729 |
my $kernel = shift; |
my $kernel = shift; |
730 |
$_rss->{last_poll} ||= time(); |
$_stat->{rss}->{last_poll} ||= time(); |
731 |
my $dt = time() - $_rss->{last_poll}; |
my $dt = time() - $_stat->{rss}->{last_poll}; |
732 |
warn "## rss_check_updates $dt > $rss_min_delay\n"; |
warn "## rss_check_updates $dt > $rss_min_delay\n"; |
733 |
if ( $dt > $rss_min_delay ) { |
if ( $dt > $rss_min_delay ) { |
734 |
$_rss->{last_poll} = time(); |
$_stat->{rss}->{last_poll} = time(); |
735 |
_log rss_fetch_all( $kernel ); |
_log rss_fetch_all( $kernel ); |
736 |
} |
} |
737 |
} |
} |
934 |
} elsif ($msg =~ m/^rss-update/) { |
} elsif ($msg =~ m/^rss-update/) { |
935 |
$res = rss_fetch_all( $_[KERNEL] ); |
$res = rss_fetch_all( $_[KERNEL] ); |
936 |
} elsif ($msg =~ m/^rss-clean/) { |
} elsif ($msg =~ m/^rss-clean/) { |
937 |
$_rss = undef; |
$_stat->{rss} = undef; |
938 |
$dbh->do( qq{ update feeds set last_update = now() - delay } ); |
$dbh->do( qq{ update feeds set last_update = now() - delay } ); |
939 |
$res = "OK, cleaned RSS cache"; |
$res = "OK, cleaned RSS cache"; |
940 |
} elsif ($msg =~ m/^rss-list/) { |
} elsif ($msg =~ m/^rss-list/) { |
1112 |
} |
} |
1113 |
|
|
1114 |
my $search = $q->param('search') || $q->param('grep') || ''; |
my $search = $q->param('search') || $q->param('grep') || ''; |
1115 |
|
my $r_url = $request->url; |
1116 |
|
|
1117 |
if ($request->url =~ m#/rss(?:/(tags|last-tag|follow.*)\w*(?:=(\d+))?)?#i) { |
my @commands = qw( tags last-tag follow stat ); |
1118 |
|
my $commands_re = join('|',@commands); |
1119 |
|
|
1120 |
|
if ($r_url =~ m#/rss(?:/($commands_re.*)\w*(?:=(\d+))?)?#i) { |
1121 |
my $show = lc($1); |
my $show = lc($1); |
1122 |
my $nr = $2; |
my $nr = $2; |
1123 |
|
|
1131 |
my $feed = XML::Feed->new( $type ); |
my $feed = XML::Feed->new( $type ); |
1132 |
$feed->link( $url ); |
$feed->link( $url ); |
1133 |
|
|
1134 |
|
my $rc = RC_OK; |
1135 |
|
|
1136 |
if ( $show eq 'tags' ) { |
if ( $show eq 'tags' ) { |
1137 |
$nr ||= 50; |
$nr ||= 50; |
1138 |
$feed->title( "tags from $CHANNEL" ); |
$feed->title( "tags from $CHANNEL" ); |
1202 |
$feed->add_entry( $feed_entry ); |
$feed->add_entry( $feed_entry ); |
1203 |
} |
} |
1204 |
|
|
1205 |
|
} elsif ( $show =~ m/^stat/ ) { |
1206 |
|
|
1207 |
my $feed_entry = XML::Feed::Entry->new($type); |
my $feed_entry = XML::Feed::Entry->new($type); |
1208 |
$feed_entry->title( "Internal stats" ); |
$feed_entry->title( "Internal stats" ); |
1209 |
$feed_entry->content( |
$feed_entry->content( |
1210 |
'<![CDATA[<pre>' . dump( $_rss ) . '</pre>]]>' |
'<![CDATA[<pre>' . dump( $_stat ) . '</pre>]]>' |
1211 |
); |
); |
1212 |
$feed->add_entry( $feed_entry ); |
$feed->add_entry( $feed_entry ); |
1213 |
|
|
1214 |
} else { |
} else { |
1215 |
_log "unknown rss request ",$request->url; |
_log "unknown rss request $r_url"; |
1216 |
return RC_DENY; |
$feed->title( "unknown $r_url" ); |
1217 |
|
foreach my $c ( @commands ) { |
1218 |
|
my $feed_entry = XML::Feed::Entry->new($type); |
1219 |
|
$feed_entry->title( "rss/$c" ); |
1220 |
|
$feed_entry->link( "$url/rss/$c" ); |
1221 |
|
$feed->add_entry( $feed_entry ); |
1222 |
|
} |
1223 |
|
$rc = RC_DENY; |
1224 |
} |
} |
1225 |
|
|
1226 |
$response->content( $feed->as_xml ); |
$response->content( $feed->as_xml ); |
1227 |
return RC_OK; |
return $rc; |
1228 |
} |
} |
1229 |
|
|
1230 |
if ( $@ ) { |
if ( $@ ) { |