--- trunk/bin/irc-logger.pl 2008/03/07 09:50:53 90 +++ trunk/bin/irc-logger.pl 2008/03/07 10:50:16 94 @@ -628,29 +628,44 @@ _log("can't fetch RSS ", $args->{url}); return; } + my ( $total, $updates ) = ( 0, 0 ); for my $entry ($feed->entries) { $total++; # seen allready? - return if $_rss->{$feed->link}->{seen}->{$entry->id}++ > 0; + next if $_rss->{$feed->link}->{seen}->{$entry->id}++ > 0; sub prefix { my ($txt,$var) = @_; + $var =~ s/\s+/ /gs; $var =~ s/^\s+//g; + $var =~ s/\s+$//g; return $txt . $var if $var; } + # fix absolute and relative links to feed entries + my $link = $entry->link; + if ( $link =~ m!^/! ) { + my $host = $args->{url}; + $host =~ s!^(http://[^/]+).*$!$1!; #!vim + $link = "$host/$link"; + } elsif ( $link !~ m!^http! ) { + $link = $args->{url} . $link; + } + $link =~ s!//+!/!g; + my $msg; $msg .= prefix( 'From: ' , $args->{name} || $feed->title ); $msg .= prefix( ' by ' , $entry->author ); - $msg .= prefix( ' -- ' , $entry->link ); + $msg .= prefix( ' | ' , $entry->title ); + $msg .= prefix( ' | ' , $link ); # $msg .= prefix( ' id ' , $entry->id ); if ( $args->{kernel} && $send_rss_msgs ) { $send_rss_msgs--; - _log('RSS', $msg); - $sth_insert_log->execute( $CHANNEL, 1, $NICK, $msg, undef ); + _log('>>', $msg); + $sth_insert_log->execute( $CHANNEL, 1, $NICK, $msg, 'now()' ); $args->{kernel}->post( $IRC_ALIAS => notice => $CHANNEL, $msg ); $updates++; } @@ -897,18 +912,26 @@ $_rss = undef; $dbh->do( qq{ update feeds set last_update = now() - delay } ); $res = "OK, cleaned RSS cache"; + } elsif ($msg =~ m/^rss-list/) { + my $sth = $dbh->prepare(qq{ select url,name,last_update,active from feeds }); + $sth->execute; + while (my @row = $sth->fetchrow_array) { + $_[KERNEL]->post( $IRC_ALIAS => privmsg => $nick, join(' | ',@row) ); + } + $res = ''; } elsif ($msg =~ m!^rss-(add|remove|stop|start)\s+(http://\S+)\s*(.*)!) { my $sql = { add => qq{ insert into feeds (url,name) values (?,?) }, # remove => qq{ delete from feeds where url = ? and name = ? }, - start => qq{ update feeds set active = true where url = ? -- ? }, - stop => qq{ update feeds set active = false where url = ? -- ? }, - + start => qq{ update feeds set active = true where url = ? }, + stop => qq{ update feeds set active = false where url = ? }, }; if (my $q = $sql->{$1} ) { my $sth = $dbh->prepare( $q ); - warn "## SQL $q ( $2 | $3 )\n"; - eval { $sth->execute( $2, $3 ) }; + my @data = ( $2 ); + push @data, $3 if ( $q =~ s/\?//g == 2 ); + warn "## $1 SQL $q with ",dump( @data ),"\n"; + eval { $sth->execute( @data ) }; } $res = "OK, RSS $1 : $2 - $3";