-} else {
- # Make MPD base menu
- my ($state, $songid) = (undef, undef);
- my %entry = ();
-
- $menu = "MenuMPD" unless defined $menu;
-
- print $sock "status\n";
- while (<$sock>) {
- last if (/^OK/);
- die($_) if (/^ACK/);
-
- if (/^(\w+): (.*)$/) {
- $state = $2 if ($1 eq "state");
- $songid = $2 if ($1 eq "songid");
- }
- }
- die("Failed status query\n") unless (defined $state);
-
- cmd("AddToMenu $menu Playing Title") if ($state eq "play");
- cmd("AddToMenu $menu Paused Title") if ($state eq "pause");
- cmd("AddToMenu $menu Stopped Title") if ($state eq "stop");
-
- if (defined $songid) {
- print $sock "playlistid $songid\n";
- while (<$sock>) {
- last if (/^OK/);
- die($_) if (/^ACK/);
-
- if (/^(\w+): (.*)$/) {
- $entry{$1} = $2;
- }
- }
- die("Failed data query\n") unless (keys(%entry) > 0);
-
- my ($thumb) = get_item_thumbnails($entry{file});
- if ($thumb) {
- my $cover = mpd_cover_filename("$MUSIC/$entry{file}");
-
- cmd("AddToMenu $menu \"$thumb\" "
- ."Exec exec geeqie ".shellify($cover, 0));
- }
-
- cmd("AddToMenu $menu \"Title: ".sanitise($entry{Title}, 0)
- ."\" Popup MenuMPDTitle");
- cmd("AddToMenu $menu \"Artist: ".sanitise($entry{Artist}, 0)
- ."\" Popup MenuMPDArtist");
- cmd("AddToMenu $menu \"Album: ".sanitise($entry{Album}, 0)
- ."\" Popup MenuMPDAlbum");
- cmd("AddToMenu $menu \"\" Nop");
- } else {
- cmd("AddToMenu $menu \"<Song info unavailable>\"");
- cmd("AddToMenu $menu \"\" Nop");
- }
-
- if ($state eq "play" || $state eq "pause") {
- cmd("AddToMenu $menu \"\t\tNext%$icons/next.svg:16x16%\" "
- ."Exec exec $FindBin::Bin/mpdexec.pl next");
- cmd("AddToMenu $menu \"\t\tPause%$icons/pause.svg:16x16%\" "
- ."Exec exec $FindBin::Bin/mpdexec.pl pause");
- cmd("AddToMenu $menu \"\t\tPlay%$icons/play.svg:16x16%\" "
- ."Exec exec $FindBin::Bin/mpdexec.pl play");
- cmd("AddToMenu $menu \"\t\tStop%$icons/stop.svg:16x16%\" "
- ."Exec exec $FindBin::Bin/mpdexec.pl stop");
- cmd("AddToMenu $menu \"\t\tPrev%$icons/prev.svg:16x16%\" "
- ."Exec exec $FindBin::Bin/mpdexec.pl previous");
- } elsif ($state eq "stop") {
- cmd("AddToMenu $menu \"\t\tPlay%$icons/play.svg:16x16%\" "
- ."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 $FindBin::Bin/mpdexec.pl shuffle");
-
- cmd("DestroyMenu MenuMPDTitle");
- cmd("AddToMenu MenuMPDTitle DynamicPopUpAction MakeMenuMPDTitle");
- cmd("DestroyMenu MenuMPDArtist");
- cmd("AddToMenu MenuMPDArtist DynamicPopUpAction MakeMenuMPDArtist");
- cmd("DestroyMenu MenuMPDAlbum");
- cmd("AddToMenu MenuMPDAlbum DynamicPopUpAction MakeMenuMPDAlbum");
-
- cmd("DestroyFunc MakeMenuMPDTitle");
- cmd("AddToFunc MakeMenuMPDTitle
- + I DestroyMenu MenuMPDTitle
- + I -PipeRead \"exec $SELF "
- ."--menu MenuMPDTitle "
- ."--title ".shellify($entry{Title}, 1)."\"");
-
- cmd("DestroyFunc MakeMenuMPDAlbum");
- cmd("AddToFunc MakeMenuMPDAlbum
- + I DestroyMenu MenuMPDAlbum
- + 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 $SELF "
- ."--menu MenuMPDArtist "
- ."--artist ".shellify($entry{Artist}, 1)."\"");
-
- cmd("DestroyFunc KillMenuMPD");
- cmd("AddToFunc KillMenuMPD I Nop");