#!/usr/bin/perl -w
use strict;

use Gtk2::TrayIcon;
use LWP::Simple;
use XML::Parser;
use URI::Escape;
my $parser = new XML::Parser(Style => 'Tree');
my $tooltips = Gtk2::Tooltips->new();

Gtk2->init;

my $icon= Gtk2::TrayIcon->new("kexp");
my $button = KEXP::Button->new();
$button->signal_connect (enter=> \&button_callback);
$button->signal_connect (clicked=> \&button_callback, 1);
$icon->add($button);
$icon->show_all;


Gtk2->init_add(\&button_callback, $button);
Gtk2->main;

sub button_callback{
	my ($self, $force) = @_;
	if ($self->is_ready() || $force) {
		my $playing = get("http://kexp.org/getsong.asp");
		if ($playing) {
			my $text = $parser->parse($playing);
			my $stuff = clean($text->[1][2]);
			$tooltips->set_tip($self, $stuff );
			$self->set_last();
		}
	}
}

sub clean {
	my $text = shift;
	$text =~ s/^.+?\+//;
	$text =~ s/\+/ /g;
	$text =~ s/ %2D /\n/g;
	$text = uri_unescape($text);
	return $text;

}

package KEXP::Button;
use base 'Gtk2::Button';

sub new {
	my $class = shift;
	my %params = (
		icon => '/usr/share/icons/kexp.ico',
		@_,
	);
	my $self = bless Gtk2::Button->new(), $class;
	my $pic = Gtk2::Image->new_from_file($params{icon});
	$self->add($pic);

	return $self;
}

sub set_last {
	my $self = shift;
	$self->{_last} = time();
}

sub get_last {
	my $self = shift;
	return $self->{_last} || 0;
}

sub is_ready {
	my $self = shift;
	return 1 if (time() - $self->get_last() > 30);
	return 0;
}

1
