X-Git-Url: https://git.draconx.ca/gitweb/fvwmconf.git/blobdiff_plain/61a4f45722337bcd4ff40305963a9401b777f10d..74a217f96316193daa602b8a5f4a81cc922a42af:/scripts/mpdmenu.pl diff --git a/scripts/mpdmenu.pl b/scripts/mpdmenu.pl index 7a48c20..ca7d2be 100755 --- a/scripts/mpdmenu.pl +++ b/scripts/mpdmenu.pl @@ -67,27 +67,27 @@ if (defined $album) { my $entry; $menu = "MenuMPDAlbum" unless defined $menu; - + $album =~ s/"/\\"/g; print $sock "playlistfind album \"$album\"\n"; while (<$sock>) { last if (/^OK/); die($_) if (/^ACK/); - + if (/^(\w+): (.*)$/) { if ($1 eq "file") { if (keys(%$entry) > 0) { addalbumentry(\@playlist, $entry) } - + $entry = {}; } - + $entry->{$1} = $2; } } addalbumentry(\@playlist, $entry) if (keys(%$entry) > 0); - + die("No tracks found.\n") if (!@playlist); foreach (sort albumsort @playlist) { my ($t_file, $t_trackno, $t_artist, $t_title, $t_id) = ( @@ -97,16 +97,17 @@ if (defined $album) { $_->{Title}, $_->{Id}, ); - + next if (defined $artist && !$accept{albumdir($t_file)}); - - $t_artist = sanitise($t_artist); - $t_title = sanitise($t_title); - + + $t_artist = sanitise($t_artist, 0); + $t_title = sanitise($t_title, 0); + my $cmd = sprintf "AddToMenu $menu \"%d\t%s - %s\"" - ." Exec mpc playid %d", + ." Exec exec $FVWM/scripts/mpdexec.pl" + ." playid %d", $t_trackno, $t_artist, $t_title, $t_id; - + cmd($cmd); } } elsif (defined $artist) { @@ -122,7 +123,7 @@ if (defined $album) { while (<$sock>) { last if (/^OK/); die($_) if (/^ACK/); - + if (/^(\w+): (.*)$/) { $file = $2 if ($1 eq "file"); $albums{$2} = $file if ($1 eq "Album"); @@ -136,13 +137,13 @@ if (defined $album) { use locale; foreach (sort keys(%albums)) { my $key = $_; - my $a_album = sanitise($key); + my $a_album = sanitise($key, 1); - open THUMB, "-|", "$FVWM/scripts/thumbnail.sh", + open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh", "--small", "--music", $albums{$key}; my $thumb = ; close THUMB; - die("Incompetent use of thumbnail.sh") if ($?); + die("Incompetent use of thumbnail.zsh") if ($?); $thumb =~ s/\n//sg; $thumb = "%$thumb%" if (-f $thumb); @@ -173,7 +174,7 @@ if (defined $album) { $menu = "MenuMPDTitle" unless defined $menu; # Open and close brackets. - my ($ob, $cb) = ("[\[~〜<(ー−-]", "[\]~〜>)ー−-]"); + my ($ob, $cb) = ("[\[~〜<〈(ー−-]", "[\]~〜>〉)ー−-]"); $_ = $title; @@ -186,19 +187,23 @@ if (defined $album) { s/ -Practice Track-//; # Fair Heaven s/〜世界で一番アナタが好き〜//; # Pure Heart s/〜彼方への哀歌//; # 十二幻夢 + s/ sora no uta ver.//; # 美しい星 s/\s*-remix-$//; # Otherwise "D-THREAD -remix-" doesn't work right. # Deal with titles like "blah (ABC version)". - s/\s*$ob.*(style|mix|edit|edition|ver\.?|version|カラオケ)$cb?$//i; + s/\s*$ob.*(style|mix|edit|edition|ver\.?|version|melody|カラオケ)$cb?$//i; # Deal with titles like "blah (without XYZ)". - s/\s*$ob((e\.)?piano|english|japanese|inst|tv|without|w\/o|off|back|short|karaoke|game).*//i; + s/\s*$ob\s*((e\.)?piano|english|japanese|inst|tv|without|w\/o|off|back|short|karaoke|game).*//i; # Deal with titles like "blah instrumental". - s/\s+(instrumental|off vocal|short)(\s+(size|version|s))?$//i; + s/\s+(instrumental|off vocal|short|tv)([\s-]+(mix|size|version))?$//i; s/\s+without\s+\w+$//i; + # Deal with separate movements in classical pieces. + s/: [IVX]+\..*//; + my $basetitle = $_; my $_basetitle = $basetitle; @@ -207,13 +212,13 @@ if (defined $album) { while (<$sock>) { last if (/^OK/); die($_) if (/^ACK/); - + if (/^(\w+): (.*)$/) { if ($1 eq "file") { push @titles, $entry if (keys(%$entry) > 0); $entry = {}; } - + $entry->{$1} = $2; } } @@ -230,20 +235,23 @@ if (defined $album) { ); # MPD searches are case-insensitive. - next if (!($t_title =~ m/(\P{Latin}|^)\Q$basetitle\E(\P{Latin}|$)/)); - $t_artist = sanitise($t_artist); - $t_title = sanitise($t_title); + next if (!($t_title =~ m/(\P{Latin}|^)\Q$basetitle\E(\P{Latin}|$)/ || $t_title =~ m/\Q$basetitle\E/i)); + + $t_artist = sanitise($t_artist, 1); + $t_title = sanitise($t_title, 1); - open THUMB, "-|", "$FVWM/scripts/thumbnail.sh", + open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh", "--small", "--music", $t_file; my $thumb = ; close(THUMB); - die("Incompetent use of thumbnail.sh") if ($?); + die("Incompetent use of thumbnail.zsh") if ($?); $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 $FVWM/scripts/mpdexec.pl" + ." playid $t_id"); } } # end use locale workaround } else { @@ -263,43 +271,49 @@ if (defined $album) { $songid = $2 if ($1 eq "songid"); } } - die("Failed status query\n") unless (defined $state && defined $songid); + die("Failed status query\n") unless (defined $state); - print $sock "playlistid $songid\n"; - while (<$sock>) { - last if (/^OK/); - die($_) if (/^ACK/); + 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 (/^(\w+): (.*)$/) { - $entry{$1} = $2; + 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); + die("Failed data query\n") unless (keys(%entry) > 0); - open THUMB, "-|", "$FVWM/scripts/thumbnail.sh", - "--image", "--music", $entry{file}; - my $thumb = ; - my $scan = ; - close(THUMB); - die("Incompetent use of thumbnail.sh") if ($?); + open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh", + "--image", "--music", $entry{file}; + my $thumb = ; + my $scan = ; + close(THUMB); + die("Incompetent use of thumbnail.sh") if ($?); - $thumb =~ s/\n//sg; - $scan =~ s/\n//sg; + $thumb =~ s/\n//sg; + $scan =~ s/\n//sg; - 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 (-f $thumb) { - cmd("AddToMenu $menu \"*$thumb*\" " - ."Exec exec gqview ".shellify($scan, 0)); + if (-f $thumb) { + cmd("AddToMenu $menu \"*$thumb*\" " + ."Exec exec geeqie ".shellify($scan, 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 \"\""); + cmd("AddToMenu $menu \"\" Nop"); } - cmd("AddToMenu $menu \"Title: ".sanitise($entry{Title})."\" " - ."Popup MenuMPDTitle"); - cmd("AddToMenu $menu \"Artist: ".sanitise($entry{Artist})."\" " - ."Popup MenuMPDArtist"); - cmd("AddToMenu $menu \"Album: ".sanitise($entry{Album})."\" " - ."Popup MenuMPDAlbum"); - cmd("AddToMenu $menu \"\" Nop"); if ($state eq "play" || $state eq "pause") { cmd("AddToMenu $menu \"\t\tNext%$icons/next.svg:16x16%\" " @@ -344,7 +358,7 @@ if (defined $album) { ."--menu MenuMPDAlbum " ."--album ".shellify($entry{Album}, 1)." " ."--artist ".shellify($entry{Artist}, 1)."\""); - + cmd("DestroyFunc MakeMenuMPDArtist"); cmd("AddToFunc MakeMenuMPDArtist + I DestroyMenu MenuMPDArtist @@ -362,7 +376,8 @@ print $sock "close\n"; sub sanitise { $_ = $_[0]; - s/([\$&@%^*])/\1\1/g; + s/&/&&/g if ($_[1]); + s/([\$@%^*])/\1\1/g; s/"/\\"/g; return $_; }