+++ /dev/null
-########################################################################################################
-##
-## Log URL's and post them to del.icio.us
-##
-########################################################################################################
-
-use strict;
-
-BEGIN { $ENV{HARNESS_ACTIVE} = 1 }
-
-use IO::Handle;
-use Irssi;
-use Irssi::Irc;
-use Net::Delicious;
-use URI::Find::Rule;
-use POSIX;
-use Log::Dispatch;
-use Log::Dispatch::File;
-
-use vars qw($VERSION %IRSSI $FINDER $WARNING_PRINTED);
-
-$VERSION = "0.5";
-%IRSSI = (
- authors => "Benjamin Reed",
- contact => 'ranger@befunk.com',
- name => "deliciousurl",
- description => "Logs URLs and posts them to del.icio.us",
- license => "GPLv2",
- url => "http://ranger.befunk.com/",
-);
-
-# === Version History ===
-# 2007-01-19: version 0.5, minor logging/UI tweaks
-# 2005-10-25: released version 0.4
-# 2005-10-25: fork post_to_delicious so we don't have to wait for a response (holy crap, I
-# can't believe it was broken this long without noticing!)
-# 2005-08-24: added channel ignore, thanks to Rev. Jeffrey Paul
-
-Irssi::settings_add_str('deliciousurl', 'delicious_username', '');
-Irssi::settings_add_str('deliciousurl', 'delicious_password', '');
-Irssi::settings_add_int('deliciousurl', 'delicious_post_privmsg', 0);
-Irssi::settings_add_int('deliciousurl', 'delicious_strip_trailing_slash', 1);
-Irssi::settings_add_str('deliciousurl', 'delicious_blacklist_regexp', '(tubgirl|goatse\.cx)');
-Irssi::settings_add_str('deliciousurl', 'delicious_default_tag', 'irc');
-Irssi::settings_add_str('deliciousurl', 'delicious_ignore_chan', '');
-
-sub post_to_delicious
-{
- my ($channel, $data, $nick) = @_;
-
- my $username = Irssi::settings_get_str('delicious_username');
- my $password = Irssi::settings_get_str('delicious_password');
-
- if (not defined $username or not defined $password and not $WARNING_PRINTED)
- {
- if (not $WARNING_PRINTED)
- {
- Irssi::print("username or password are not set!");
- $WARNING_PRINTED++;
- }
- return;
- }
-
- my $pid = fork();
-
- if ($pid) {
- Irssi::pidwait_add($pid);
- return;
- } else {
- my $blacklist = Irssi::settings_get_str('delicious_blacklist_regexp');
-
- eval {
- $data =~ /$blacklist/ and die "blacklist matched!";
- };
- if ($@)
- {
- #Irssi::print("skipped in $channel (blacklist): $data");
- POSIX::_exit(0);
- }
-
- $channel =~ s/^#//;
-
- my @igc = split(
- /\s+/,
- Irssi::settings_get_str('delicious_ignore_chan')
- );
- for (@igc) {
- s/^#//;
- POSIX::_exit(0) if lc($_) eq lc($channel);
- }
-
- my $del = Net::Delicious->new({
- user => $username,
- pswd => $password,
- });
-
- my @posts = $del->posts({ tag => Irssi::settings_get_str('delicious_default_tag') });
-
- my ($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
- $year += 1900;
- $mon += 1;
-
- my $dt = sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ', $year, $mon, $mday, $hour, $min, $sec);
-
- my @urls = URI::Find::Rule->in($data);
- POSIX::_exit(0) unless (@urls);
-
- for my $url (@urls) {
- $url = $url->[1];
- $url =~ s/\/*$// if (Irssi::settings_get_int('delicious_strip_trailing_slash'));
- my $tags = Irssi::settings_get_str('delicious_default_tag') . ' ' . $channel . ' ' . $nick;
- #my $text = sprintf('%04d-%02d-%02d %02d:%02d:%02d <%s> %s', $year, $mon, $mday, $hour, $min, $sec, $nick, $data);
- my $text = sprintf('<%s> %s', $nick, $data);
-
- if (my ($post) = grep { $_->href eq $url } @posts)
- {
- my @tags = split(/\s+/, $post->tag);
- if (not grep { $_ eq $channel } split(/\s+/, $post->tag))
- {
- $tags = $post->tag . ' ' . $channel;
- }
- #$text = $post->extended . "\n" . $text;
- }
-
- my $return = $del->add_post({
- url => $url,
- description => $url,
- extended => $text,
- tags => $tags,
- dt => $dt,
- });
- }
- POSIX::_exit(0);
- }
-}
-
-sub del_public
-{
- my ($server, $data, $nick, $mask, $target) = @_;
- post_to_delicious($target, $data, $nick);
-}
-
-sub del_private
-{
- my ($server, $data, $nick, $address) = @_;
- if (Irssi::settings_get_int('delicious_post_privmsg') > 0)
- {
- post_to_delicious($server->{'nick'}, $data, $nick);
- }
-}
-
-sub del_own
-{
- my ($server, $data, $target) = @_;
- post_to_delicious($target, $data, $server->{'nick'});
-}
-
-sub del_topic
-{
- my ($server, $target, $data, $nick, $mask) = @_;
- post_to_delicious($target, $data, $nick);
-}
-
-
-Irssi::signal_add_last('message public', 'del_public');
-Irssi::signal_add_last('message private', 'del_private');
-Irssi::signal_add_last('message own_public', 'del_own');
-Irssi::signal_add_last('message topic', 'del_topic');
-
-Irssi::print("deliciousurl $VERSION ready");