#!/usr/bin/perl
use strict;
use Tk;
my $main = MainWindow->new;

$main->Label(-text => 'RDF News Reader v1.0 by <weby>')->pack;
my $box = $main->Listbox(-relief => 'sunken',
			 -width => -1, # Shrink to fit
			 -height => 5,
			 -setgrid => 1,
			 );

for (@{get_text()}) { $box->insert('end', $_) };

my $scroll = $main->Scrollbar(-command => ['yview', $box]);
$box->configure(-yscrollcommand => ['set', $scroll]);
$box->pack(-side => 'left', -fill => 'both', -expand => 1);
$scroll->pack(-side => 'right', -fill => 'y');

MainLoop;


sub parse_item
{
    die "Arguments error at parse_item.\n" unless $_[0];
    $_[0] =~ m|<$_[1]>(.*?)</$_[1]>|i ;
    my $ret = $1;
    $ret =~ s/&amp;/&/ig;
    $ret =~ s/&nbsp;/ /gi;
    $ret =~ s/&lt;/</ig;
    $ret =~ s/&gt;/>/ig;
    $ret =~ s/&quot;/"/ig;
    $ret =~ s/\%40/@/ig;
    $ret =~ s/\+dot\+/./ig;
    $ret =~ s/\+at\+/@/gi;
    return $ret;
}

sub get_text
{
    my %news_servers = ( beyond2000     => "http://beyond2000.com/b2k.rdf",
			 lwn            => "http://lwn.net/headlines/rss",
			 theregister    => "http://www.theregister.co.uk/tonys/slashdot.rdf",
			 bsdtoda        => "http://www.bsdtoday.com/backend/bt.rdf",
			 linuxtoday     => "http://linuxtoday.com/backend/my-netscape.rdf",
			 barrapunto     => "http://barrapunto.com/gnome.rdf",
			 linuxgames     => "http://linuxgames.com/bin/mynetscape.pl",
			 redcarpet      => "http://redcarpet.ximian.com/red-carpet.rdf",
			 barrapunto     => "http://barrapunto.com/barrapunto.rdf",
			 kuro5hin       => "http://www.kuro5hin.org/backend.rdf",
			 quotationspage => "http://www.quotationspage.com/data/mqotd.rss",
			 salon          => "http://www.salon.com/feed/RDF/salon_use.rdf",
			 advogato       => "http://advogato.org/rss/articles.xml",
			 kde            => "http://dot.kde.org/rdf",
			 python         => "http://www.python.org/channews.rdf",
			 hispalinux     => "http://www.hispalinux.es/backend.php",
			 pidog          => "http://www.pigdog.org/pigdog.rdf",
			 internet       => "http://headlines.internet.com/internetnews/prod-news/news.rss",
			 newsforge      => "http://www.newsforge.com/newsforge.rss",
			 gnome          => "http://www.gnomedesktop.org/backend.php",
			 fool           => "http://www.fool.com/about/headlines/rss_headlines.asp",
  			 slashdot       => "http://slashdot.org/slashdot.rdf",
			 freshmeat      => "http://freshmeat.net/backend/fm.rdf",
			 mozillazine    => "http://www.mozillazine.org/contents.rdf",
			 dvdreview      => "http://www.dvdreview.com/rss/newschannel.rss",
			 mozilla        => "http://www.mozilla.org/news.rdf",
			 webreference   => "http://www.webreference.com/webreference.rdf",
			 dictionary     => "http://www.dictionary.com/wordoftheday/wotd.rss",
			 mempool        => "http://memepool.com/memepool.rss",
			 bgphp          => "http://news.php.net/group.php?group=php.general.bg&format=rdf");

    #chomp(my @rdf = `cat php.rdf`);
    $_[0] = 'slashdot';
    die "get_text has no source defined\n" unless exists $news_servers{$_[0]};

    chomp(my @rdf = `lynx --source "$news_servers{$_[0]}"`);

    my $rdf = join '', @rdf;
    my @text;
    while ($rdf=~m|<(.*?)>(.*?)</\1>|ig)
    {
	my $ptag = $1;
	my $item = $2;
	while ($item=~m|<(.*?)>(.*?)</\1>|ig)
	{
	    if (lc($1) eq 'title'){
		print " * $ptag * $2\n";
		push @text, " * $ptag * $2";
	    }
	    else {
		print " * $ptag * \t$1: ".(parse_item($item, $1))."\n";
		push @text, " * $ptag *     $1: ".(parse_item($item, $1));
	    }
	}
	print "\n";
	push @text, "";
	
	#print "$item\n";
	#push @text, 
	#"Title: ".parse_item($1, 'title'),
	#"Link: ".parse_item($1, 'link'), 
	#"Description: ".parse_item($1, 'description'),
	#"Date: ".parse_item($1, 'pubDate'),
	#"";
    }
    return \@text;
}