package Plagger::Plugin::Notify::Balloon; use strict; use base qw( Plagger::Plugin ); our $VERSION = '0.01'; use File::Spec; use Encode (); sub register { my($self, $context) = @_; if ($^O eq 'MSWin32') { if ($self->has_balloon_notify) { $context->register_hook( $self, 'publish.entry' => \¬ify, 'plugin.init' => \&initialize, ); } else { $context->log(error => "BalloonNotify is not in your PATH."); } } else { $context->log(error => "This plugin only works on Win32 systems"); } } sub has_balloon_notify { my $self = shift; grep { -e File::Spec->catfile($_, 'BalloonNotify.exe') } File::Spec->path; } sub initialize { my($self, $context) = @_; return if $self->conf->{encoding}; my $cp = eval { require Win32::Console; Win32::Console::OutputCP(); }; $cp ||= 932; # cp932 by default ... for Japanese environment $self->conf->{encoding} = "cp$cp"; } sub notify { my($self, $context, $args) = @_; my $title = $self->scrub($args->{entry}->title); my $message = $self->scrub($args->{entry}->body_text); my @command = ('BalloonNotify', '/o', 5, '/t', $title, '/c', $message); !system(@command) or $context->log(error => $?); } sub scrub { my($self, $string) = @_; $string =~ s/\s+/ /g; Encode::encode($self->conf->{encoding}, $string); } 1; __END__ =head1 NAME Plagger::Plugin::Notify::Balloon - Notify feed updates using Win32 BalloonNotify =head1 SYNOPSIS - module: Notify::Balloon =head1 DESCRIPTION This plugin uses Windows Balloon notification system to notify feed updates to users. You need to install BalloonNotify.exe command line tool from L. =head1 TODO =over 4 =item Rewrite using Win32::GUI =back =head1 AUTHOR Tatsuhiko Miyagawa Original code was taken from http://yaplog.jp/sumikko/archive/34 =head1 SEE ALSO L =cut