#!/usr/bin/perl
+#
+# Copyright © 2008,2010,2012,2019 Nick Bowler
+#
+# Silly little script to generate an FVWM menu with various bits of MPD
+# status information and controls.
+#
+# License GPLv3+: GNU General Public License version 3 or any later version.
+# This is free software: you are free to change and redistribute it.
+# There is NO WARRANTY, to the extent permitted by law.
use strict;
use Getopt::Long;
use IO::Socket::INET6;
+use FindBin;
use constant {
MPD_MJR_MIN => 0,
};
use utf8;
-use encoding 'utf8';
+use open qw(:std :utf8);
+binmode(STDOUT, ":utf8");
use Encode;
+my $SELF = "$FindBin::Bin/$FindBin::Script";
+
sub cmd
{
print "$_[0]\n";
my $sock = new IO::Socket::INET6(
PeerAddr => $host,
PeerPort => $port,
- Proto => 'tcp'
+ Proto => 'tcp',
+ Timeout => 2
) or die("could not open socket: $!.\n");
binmode($sock, ":utf8");
$t_title = sanitise($t_title, 0);
my $cmd = sprintf "AddToMenu $menu \"%d\t%s - %s\""
- ." Exec mpc playid %d",
+ ." Exec exec $FindBin::Bin/mpdexec.pl"
+ ." playid %d",
$t_trackno, $t_artist, $t_title, $t_id;
cmd($cmd);
my $key = $_;
my $a_album = sanitise($key, 1);
- open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh",
+ open THUMB, "-|", "$FindBin::Bin/thumbnail.zsh",
"--small", "--music", $albums{$key};
my $thumb = <THUMB>;
close THUMB;
cmd("DestroyFunc MakeMenuMPDArt_$i");
cmd("AddToFunc MakeMenuMPDArt_$i
+ I DestroyMenu MenuMPDArt_$i
- + I -PipeRead \"exec $FVWM/scripts/mpdmenu.pl "
+ + I -PipeRead \"exec $SELF "
."--menu MenuMPDArt_$i "
."--album ".shellify($key, 1)." "
."--artist ".shellify($artist, 1)."\"");
$t_artist = sanitise($t_artist, 1);
$t_title = sanitise($t_title, 1);
- open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh",
+ open THUMB, "-|", "$FindBin::Bin/thumbnail.zsh",
"--small", "--music", $t_file;
my $thumb = <THUMB>;
close(THUMB);
$thumb =~ s/\n//sg;
$thumb = "%$thumb%" if (-f $thumb);
- cmd("AddToMenu $menu \"$thumb$t_artist - $t_title\" Exec mpc playid $t_id");
+ cmd("AddToMenu $menu \"$thumb$t_artist - $t_title\""
+ ." Exec exec $FindBin::Bin/mpdexec.pl"
+ ." playid $t_id");
}
} # end use locale workaround
} else {
}
die("Failed data query\n") unless (keys(%entry) > 0);
- open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh",
+ open THUMB, "-|", "$FindBin::Bin/thumbnail.zsh",
"--image", "--music", $entry{file};
my $thumb = <THUMB>;
my $scan = <THUMB>;
if ($state eq "play" || $state eq "pause") {
cmd("AddToMenu $menu \"\t\tNext%$icons/next.svg:16x16%\" "
- ."Exec exec mpc next");
+ ."Exec exec $FindBin::Bin/mpdexec.pl next");
cmd("AddToMenu $menu \"\t\tPause%$icons/pause.svg:16x16%\" "
- ."Exec exec mpc pause") if ($state eq "play");
+ ."Exec exec $FindBin::Bin/mpdexec.pl pause");
cmd("AddToMenu $menu \"\t\tPlay%$icons/play.svg:16x16%\" "
- ."Exec exec mpc play") if ($state eq "pause");
+ ."Exec exec $FindBin::Bin/mpdexec.pl play");
cmd("AddToMenu $menu \"\t\tStop%$icons/stop.svg:16x16%\" "
- ."Exec exec mpc stop");
+ ."Exec exec $FindBin::Bin/mpdexec.pl stop");
cmd("AddToMenu $menu \"\t\tPrev%$icons/prev.svg:16x16%\" "
- ."Exec exec mpc prev");
+ ."Exec exec $FindBin::Bin/mpdexec.pl previous");
} elsif ($state eq "stop") {
cmd("AddToMenu $menu \"\t\tPlay%$icons/play.svg:16x16%\" "
- ."Exec exec mpc play");
+ ."Exec exec $FindBin::Bin/mpdexec.pl play");
} else {
die("Unknown MPD state!\n");
}
cmd("AddToMenu $menu \"\" Nop");
cmd("AddToMenu $menu \"\t\tShuffle%$icons/shuffle.svg:16x16%\" "
- ."Exec exec mpc shuffle");
+ ."Exec exec $FindBin::Bin/mpdexec.pl shuffle");
cmd("DestroyMenu MenuMPDTitle");
cmd("AddToMenu MenuMPDTitle DynamicPopUpAction MakeMenuMPDTitle");
cmd("DestroyFunc MakeMenuMPDTitle");
cmd("AddToFunc MakeMenuMPDTitle
+ I DestroyMenu MenuMPDTitle
- + I -PipeRead \"exec $FVWM/scripts/mpdmenu.pl "
+ + I -PipeRead \"exec $SELF "
."--menu MenuMPDTitle "
."--title ".shellify($entry{Title}, 1)."\"");
cmd("DestroyFunc MakeMenuMPDAlbum");
cmd("AddToFunc MakeMenuMPDAlbum
+ I DestroyMenu MenuMPDAlbum
- + I -PipeRead \"exec $FVWM/scripts/mpdmenu.pl "
+ + I -PipeRead \"exec $SELF "
."--menu MenuMPDAlbum "
."--album ".shellify($entry{Album}, 1)." "
."--artist ".shellify($entry{Artist}, 1)."\"");
cmd("DestroyFunc MakeMenuMPDArtist");
cmd("AddToFunc MakeMenuMPDArtist
+ I DestroyMenu MenuMPDArtist
- + I -PipeRead \"exec $FVWM/scripts/mpdmenu.pl "
+ + I -PipeRead \"exec $SELF "
."--menu MenuMPDArtist "
."--artist ".shellify($entry{Artist}, 1)."\"");