]> git.draconx.ca Git - mpdhacks.git/blobdiff - mpdmenu.pl
mpdmenu: Update title menu cases.
[mpdhacks.git] / mpdmenu.pl
index 94ec8d5088ab1fdc9475b4595dbe4bfc7f34a6cf..65d0c588d0cc5e71ed1b16a7b5c3afac79d9933c 100755 (executable)
@@ -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,16 @@ if (defined $album) {
                        $_->{Title},
                        $_->{Id},
                );
-       
+
                next if (defined $artist && !$accept{albumdir($t_file)});
-       
+
                $t_artist = sanitise($t_artist);
                $t_title  = sanitise($t_title);
-               
+
                my $cmd = sprintf "AddToMenu $menu \"%d\t%s - %s\""
                                  ." Exec mpc playid %d",
                                  $t_trackno, $t_artist, $t_title, $t_id;
-       
+
                cmd($cmd);
        }
 } elsif (defined $artist) {
@@ -122,7 +122,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");
@@ -173,7 +173,7 @@ if (defined $album) {
        $menu = "MenuMPDTitle" unless defined $menu;
 
        # Open and close brackets.
-       my ($ob, $cb) = ("[\[~〜<(ー−-]", "[\]~〜>)ー−-]");
+       my ($ob, $cb) = ("[\[~〜<〈(ー−-]", "[\]~〜>〉)ー−-]");
 
        $_ = $title;
 
@@ -186,17 +186,18 @@ 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;
 
        my $basetitle  = $_;
@@ -207,13 +208,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,7 +231,8 @@ if (defined $album) {
                );
 
                # MPD searches are case-insensitive.
-               next if (!($t_title =~ m/(\P{Latin}|^)\Q$basetitle\E(\P{Latin}|$)/));
+               next if (!($t_title =~ m/(\P{Latin}|^)\Q$basetitle\E(\P{Latin}|$)/ || $t_title =~ m/\Q$basetitle\E/i));
+
                $t_artist = sanitise($t_artist);
                $t_title  = sanitise($t_title);
 
@@ -263,43 +265,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.zsh",
-                                "--image", "--music",  $entry{file};
-       my $thumb = <THUMB>;
-       my $scan  = <THUMB>;
-       close(THUMB);
-       die("Incompetent use of thumbnail.zsh") if ($?);
+               open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh",
+                                        "--image", "--music",  $entry{file};
+               my $thumb = <THUMB>;
+               my $scan  = <THUMB>;
+               close(THUMB);
+               die("Incompetent use of thumbnail.zsh") 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 gqview ".shellify($scan, 0));
+               }
+               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");
+       } else {
+               cmd("AddToMenu $menu \"<Song info unavailable>\"");
+               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 +352,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