use lib "/home/karen/.irssi/scripts/libwww-perl-5.826/lib/";
use strict;
use vars qw($VERSION %IRSSI);
use POSIX;

use Irssi;
$VERSION = '0.0.3';
%IRSSI = (
    authors        => 'karen chan',
    contact        => 'karen@karen-chan.com',
    name           => 'linktitle',
    description    => 'priv msg the title of the urls',
    url            => '',
    license        => '',
);

my %pipe_tag = ();

sub linktitle {
    my ($server, $msg, $nick, $address, $target) = @_;
    chomp($msg);

    if ($msg !~ /(http[^ ]*)/) {
        return;
    }
    if ($nick eq $server->{'nick'}) {
        return;
    }

    my $url = $1;
    my ($rh, $wh);
    pipe $rh, $wh;
    my $pid = fork();
    unless (defined $pid) {
        close($rh);
        close($wh);
        return;
    } elsif ($pid) {
        close($wh);
        Irssi::pidwait_add($pid);
        $pipe_tag{$rh} = Irssi::input_add(fileno($rh), INPUT_READ, \&respond, [$server, $rh]);
        return;
    }
    close($rh);
    get_title($wh, $url, $server->{'nick'}, $nick, $target);
    POSIX::_exit(1);
}

sub respond {
    my ($server, $readhandle) = @{@_[0]};
    my $line = '';
    $line .= $_ while (<$readhandle>);
    Irssi::print($line);
    Irssi::input_remove($pipe_tag{$readhandle});
    close($readhandle);
}

sub get_title {
    my ($wh, $url, $my_nick, $nick, $target) = @_;
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
    $ua->agent('Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042513 Ubuntu/8.04 (hardy) Firefox/3.0.10');
    my $response = $ua->get($url);
    my $content = $response->content;
    if ($content =~ /<title>([^<]*)<\/title>/i) {;
        my $title = $1;
        print $wh "<$nick> " . $response->title . " $url";
    } else {
        print $wh "<$nick> " . $response->base . " $url";
    }
    close($wh);
}

Irssi::signal_add({
        'message public' => \&linktitle,
        'message private' => \&linktitle,
    });