--- newsline-orig.pl	Sat Sep 21 17:45:36 2002
+++ newsline.pl	Sat Sep 21 19:48:11 2002
@@ -29,12 +29,12 @@
 use Unicode::String qw(utf8 latin1);
 use Text::Wrap;
 
-use vars qw(@ticker $timestamp $slide $index $timer_cycle $timer_update %sites $forked);
+use vars qw(@ticker $timestamp $slide $index $timer_cycle $timer_update %sites $forked $last_checkout_time);
 
 $index = 0;
 # Just to have some data for the first startup
-%sites = ( Heise=>{page => 'http://www.heise.de/newsticker/heise.rdf', enable => 1, title=>'', description=>'', maxnews=>0},
-           'Freshmeat'=>{'page' => 'http://freshmeat.net/backend/fm.rdf', 'enable' => 1, title=>'', description=>'', maxnews=>0}
+%sites = ( Heise=>{page => 'http://www.heise.de/newsticker/heise.rdf', enable => 1, title=>'', description=>'', maxnews=>0, messages=>1},
+           'Freshmeat'=>{'page' => 'http://freshmeat.net/backend/fm.rdf', 'enable' => 1, title=>'', description=>'', maxnews=>0, messages=>1}
 );
 
 sub show_help() {
@@ -59,6 +59,10 @@
     List all available sources
 /newsline toggle <Source>
     Enable or disable the source
+/newsline messages <Source>
+    Enable or disable showing of new stories announcements
+/newsline limit <Source>
+    Limit number of stories shown from the source
 /newsline add <name> <url-to-rdf>
     Add a new source
 "; 
@@ -110,7 +114,16 @@
 			    next unless defined($item->{title}) && defined($item->{'link'});
 			    my $title = de_umlaut($item->{title});
 			    $title =~ s/\n/ /g;
-			    my %story = ('title' => $title, 'link' => $item->{link}, 'source' => $_);
+
+			    my $chktime = time;
+			    foreach my $olditem (@ticker) {
+				if ($title eq $olditem->{'title'}) {
+				    $chktime = $olditem->{'checkout_time'};
+				    last;
+				}
+			    }
+
+			    my %story = ('title' => $title, 'link' => $item->{link}, 'source' => $_, 'checkout_time' => $chktime);
 			    $story{description} = de_umlaut($item->{description}) if $item->{description};
 			    push @items, \%story;
 			    $maxnews--;
@@ -138,6 +151,11 @@
     }
 }
 
+sub format_story_announce ($) {
+    my ($story) = @_;
+    return '['.$story->{'source'}.'] "'.$story->{'title'}.'" -> '.$story->{'link'};
+}
+
 sub pipe_input {
     my ($rh, $pipetag) = @{$_[0]};
     my $text;
@@ -156,6 +174,16 @@
 	$sites{$_}->{link} = $siteinfo{$_}->{link};
     }
     $forked = 0;
+
+    if ($last_checkout_time and Irssi::settings_get_bool('newsline_show_message')) {
+	foreach $story (@items) {
+	    Irssi::print format_story_announce($story)
+		if ($story->{'checkout_time'} > $last_checkout_time
+		    and (not defined $sites{$story->{'source'}}->{'messages'}
+			 or $sites{$story->{'source'}}->{'messages'}));
+	}
+    }
+    $last_checkout_time = time;
 }
 
 sub draw_box ($$$$) {
@@ -186,11 +214,10 @@
 	}
 	foreach (@arg) {
 	    if (defined $ticker[$_-1]) {
-		my $message = $ticker[$_-1]->{'title'};
-		my $text = '['.$ticker[$_-1]->{'source'}.'] "'.$message.'" -> '.$ticker[$_-1]->{'link'};
+		my $text = format_story_announce($ticker[$_-1]);
 		$Text::Wrap::columns = 50;
 		my $article = wrap("","",$ticker[$_-1]->{description}) if ($desc && defined $ticker[$_-1]->{description});
-		my $text2 = draw_box($message, $article, $ticker[$_-1]->{source}, 0) if (defined $article);
+		my $text2 = draw_box($ticker[$_-1]->{'title'}, $article, $ticker[$_-1]->{source}, 0) if (defined $article);
 		if (($witem) and (($witem->{type} eq "CHANNEL") or ($witem->{type} eq "QUERY"))) {
 		    $witem->command("MSG ".$witem->{name}." ".$text);
 		    if (defined $text2) {
@@ -222,7 +249,7 @@
 	if (defined($arg[1]) && defined($arg[2])) {
 	    my $source = $arg[1];
 	    my $page = $arg[2];
-	    $sites{$source} = {page => $page, enable => 1, maxnews=>0};
+	    $sites{$source} = {page => $page, enable => 1, maxnews=>0, messages=>1};
 	    print CLIENTCRAP '%R>>%n Added new source "'.$arg[1].'"';
 	    $timestamp = undef;
 	}
@@ -242,6 +269,17 @@
 		print CLIENTCRAP "%R>>%n ".$arg[1]." disabled";
 	    }
 	}
+    } elsif ($arg[0] eq 'messages') {
+	# Toggle site announcements by messages
+	if (defined $arg[1] && defined $sites{$arg[1]}) {
+	    if ($sites{$arg[1]}{'messages'} == 0) {
+		$sites{$arg[1]}{'messages'} = 1;
+		print CLIENTCRAP "%R>>%n ".$arg[1]." messages enabled";
+	    } else {
+		$sites{$arg[1]}{'messages'} = 0;
+		print CLIENTCRAP "%R>>%n ".$arg[1]." messages disabled";
+	    }
+	}
     } elsif ($arg[0] eq 'limit') {
         if (defined $arg[1] && defined $sites{$arg[1]}) {
 	    if (defined $arg[2] && $arg[2] =~ /\d+/) {
@@ -263,6 +301,7 @@
 	    $desc =~ s/<tab>/            /g;
 	    $text .= $desc."\n" if $site{'description'};
 	    $text .= " %9|-[limit ]->%9 ".$site{'maxnews'}."\n";
+	    $text .= " %9|-[msgs  ]->%9 ".$site{'messages'}."\n";
 	    $text .= " %9`-[enable]->%9 ".$site{'enable'}."\n";
 	}
 	print CLIENTCRAP draw_box("Newsline", $text, "newsline sources", 1);
@@ -454,6 +493,7 @@
 Irssi::settings_add_int($IRSSI{'name'}, 'newsline_ticker_cycle_delay', 3000);
 Irssi::settings_add_str($IRSSI{'name'}, 'newsline_sites_file', Irssi::get_irssi_dir()."/newsline_sites");
 Irssi::settings_add_bool($IRSSI{'name'}, 'newsline_show_url', 1);
+Irssi::settings_add_bool($IRSSI{'name'}, 'newsline_show_message', 1);
 Irssi::settings_add_bool($IRSSI{'name'}, 'newsline_ticker_scroll', 0);
 
 Irssi::statusbar_item_register('newsline_ticker', 0, 'newsline_ticker');
