package App::XMMS2::Notifier;
-use v5.14;
+use 5.014000;
use strict;
use warnings;
our $VERSION = 0.001001;
use Audio::XMMSClient 0.03;
use Gtk2::Notify 0.05 -init,'xmms2-notifyd';
-use Getopt::Long;
-
use constant CONVERSION_SPECIFIERS => qw/bitrate date sample_format url id channels samplerate tracknr genre artist album title/;
##################################################
-my $use_libnotify = 1;
-my $use_libpurple;
-my $format = '$artist - $title';
-
-GetOptions (
- "libnotify!" => \$use_libnotify,
- "libpurple!" => \$use_libpurple,
- "format=s" => \$format,
-);
-
+my $format;
my $xmms = Audio::XMMSClient->new('xmms2-notifyd');
my $notify = Gtk2::Notify->new('');
##################################################
sub notify_libnotify{
- $notify->update($_[0]);
- $notify->show;
+ $notify->update($_[0]);
+ $notify->show;
}
sub notify{
- my $id=$xmms->playback_current_id->wait->value or return;
- my $minfo=$xmms->medialib_get_info($id)->wait->value;
+ my ($id, $minfo);
+ eval {
+ $id=$xmms->playback_current_id->wait->value or return;
+ $minfo=$xmms->medialib_get_info($id)->wait->value;
+ } or return;
- my %metadata = map { $_ => exists $minfo->{$_} ? (values $minfo->{$_})[0] : undef } CONVERSION_SPECIFIERS;
- my $str=$format;
- $str =~ s/\$$_/$metadata{$_}/g for keys %metadata;
+ my %metadata = map { $_ => exists $minfo->{$_} ? (values %{$minfo->{$_}})[0] : undef } CONVERSION_SPECIFIERS;
+ my $str=$format;
+ $str =~ s/\$$_/$metadata{$_}/gs for keys %metadata;
- notify_libnotify $str if $use_libnotify;
-# notify_libpurple $str if $use_libpurple;
+ notify_libnotify $str
}
sub on_playback_current_id {
- notify;
- $xmms->broadcast_playback_current_id->notifier_set(\&on_playback_current_id);
+ notify;
+ $xmms->broadcast_playback_current_id->notifier_set(\&on_playback_current_id);
}
sub on_playback_status {
- notify if $xmms->playback_status->wait->value == 1; # 1 means playing, 2 means paused
- $xmms->broadcast_playback_status->notifier_set(\&on_playback_status);
+ notify if $xmms->playback_status->wait->value == 1; # 1 means playing, 2 means paused
+ $xmms->broadcast_playback_status->notifier_set(\&on_playback_status);
}
sub run {
- while(1){
- last if ($xmms->connect);
- sleep 1
- }
-
- $xmms->broadcast_playback_current_id->notifier_set(\&on_playback_current_id);
- $xmms->broadcast_playback_status->notifier_set(\&on_playback_status);
- $xmms->loop
+ $format = $_[0];
+ while (1) {
+ last if ($xmms->connect);
+ sleep 1
+ }
+
+ $xmms->broadcast_playback_current_id->notifier_set(\&on_playback_current_id);
+ $xmms->broadcast_playback_status->notifier_set(\&on_playback_status);
+ $xmms->loop
}
-1
-
+1;
__END__
=head1 NAME