]> git.draconx.ca Git - mpdhacks.git/blobdiff - mpdmenu.pl
Factor out MPD connection code.
[mpdhacks.git] / mpdmenu.pl
index 3a84f7855bcda3ddfb60c92d41f06657b2bb45f6..4916d2a4ac09f0d25c8184226a5e7e30a50cd0b1 100755 (executable)
@@ -18,7 +18,6 @@ use Encode::Locale qw(decode_argv);
 decode_argv(Encode::FB_CROAK);
 binmode(STDOUT, ":utf8");
 
-use IO::Socket::INET6;
 use Getopt::Long qw(:config gnu_getopt);
 use Scalar::Util qw(reftype);
 use List::Util qw(any max);
@@ -36,8 +35,6 @@ use constant {
 my $SELF = "$FindBin::Bin/$FindBin::Script";
 
 my $MUSIC = $ENV{MUSIC}    // "/srv/music";
-my $host  = $ENV{MPD_HOST} // "localhost";
-my $port  = $ENV{MPD_PORT} // "6600";
 my $sock;
 
 my ($albumid, $trackid);
@@ -488,8 +485,8 @@ EOF
 }
 
 GetOptions(
-       'host|h=s'    => \$host,
-       'port|p=s'    => \$port,
+       'host|h=s'    => \$MPD::host,
+       'port|p=s'    => \$MPD::port,
        'menu|m=s'    => \$menu,
 
        'artist-id=s' => sub { $artistids{$_[1]} = 1; $mode = "artist"; },
@@ -509,21 +506,9 @@ unless (defined $menu) {
 $topmenu //= $menu;
 
 # Connect to MPD.
-$sock = new IO::Socket::INET6(
-       PeerAddr => $host,
-       PeerPort => $port,
-       Proto => 'tcp',
-       Timeout => 2
-) or die("could not open socket: $!.\n");
-binmode($sock, ":utf8");
-
-die("could not connect to MPD: $!.\n")
-       if (!(<$sock> =~ /^OK MPD ([0-9]+)\.([0-9]+)\.([0-9]+)$/));
-
-die("MPD version $1.$2.$3 insufficient.\n")
-       if (  ($1 <  MPD_MJR_MIN)
-          || ($1 == MPD_MJR_MIN && $2 <  MPD_MNR_MIN)
-          || ($1 == MPD_MJR_MIN && $2 == MPD_MNR_MIN && $3 < MPD_REV_MIN));
+$sock = MPD::connect();
+die("MPD version $MPD::major.$MPD::minor.$MPD::revision insufficient.")
+       unless MPD::min_version(MPD_MJR_MIN, MPD_MNR_MIN, MPD_REV_MIN);
 
 if ($mode eq "top") {
        my %current;