use DisOrder;
use File::FcntlLock;
+use Getopt::Long qw{:config gnu_compat bundling
+ require_order no_getopt_compat};
use POSIX qw{:errno_h :fcntl_h};
###--------------------------------------------------------------------------
lockdir => "$ENV{HOME}/.disorder/",
mixer => "Master,0");
+(my $PROG = $0) =~ s:^.*/::;
my $TITLE = "DisOrder";
my $VARIANT = "default";
if (-l $C{config} && (my $t = readlink $C{config}) =~ /^passwd\.(.*)$/)
return sprintf "%d:%02d", int $n/60, $n%60;
}
-sub format_now_playing (\%) {
- my ($info) = @_;
- exists $info->{track} or return "Nothing.";
- my $r = "$info->{artist}: ‘$info->{title}’";
- $r .= ", from ‘$info->{album}’" if $info->{album};
- exists $info->{sofar} && exists $info->{length} and
- $r .= sprintf " (%s/%s)",
- fmt_duration $info->{sofar}, fmt_duration $info->{length};
- $r .= "\n(chosen by $info->{submitter})" if exists $info->{submitter};
- return $r;
-}
-
sub get_now_playing ($) {
my ($sk) = @_;
my $r = send_command $sk, "playing";
return \%info;
}
+sub format_now_playing (;\%) {
+ my ($info) = @_;
+ unless (defined $info) {
+ my $sk = configured_connection;
+ $info = get_now_playing $sk;
+ close $sk;
+ }
+ exists $info->{track} or return "Nothing.";
+ my $r = "$info->{artist}: ‘$info->{title}’";
+ $r .= ", from ‘$info->{album}’" if $info->{album};
+ exists $info->{sofar} && exists $info->{length} and
+ $r .= sprintf " (%s/%s)",
+ fmt_duration $info->{sofar}, fmt_duration $info->{length};
+ $r .= "\n(chosen by $info->{submitter})" if exists $info->{submitter};
+ return $r;
+}
+
sub watch_and_notify0 ($) {
my ($now_playing) = @_;
my @f = split_fields $line;
if ($f[1] eq "state") {
my $msg = undef;
- if ($f[2] eq "disable_random") { $msg = "Random play disabled"; }
- elsif ($f[2] eq "enable_random") { $msg = "Random play enabled"; }
- elsif ($f[2] eq "disable_play") { $msg = "Playing disabled"; }
- elsif ($f[2] eq "enable_play") { $msg = "Playing enabled"; }
- elsif ($f[2] eq "pause") { $msg = "Paused"; }
- elsif ($f[2] eq "resume") { $msg = "Playing"; }
+ if ($f[2] eq "disable_random")
+ { $st->{random} = 0; $msg = "Random play disabled"; }
+ elsif ($f[2] eq "enable_random")
+ { $st->{random} = 1; $msg = "Random play enabled"; }
+ elsif ($f[2] eq "disable_play")
+ { $st->{play} = 0; $msg = "Playing disabled"; }
+ elsif ($f[2] eq "enable_play")
+ { $st->{play} = 1; $msg = "Playing enabled"; }
+ elsif ($f[2] eq "pause")
+ { $st->{pause} = 1; $msg = "Paused"; }
+ elsif ($f[2] eq "resume")
+ { $st->{pause} = 0; $msg = "Playing"; }
notify "$TITLE state", $msg if defined $msg;
} elsif ($f[1] eq "playing") {
my %info;
$info{track} = $f[2];
decode_track_name $sk, %info;
notify "$TITLE: Scratched by $f[3]", format_now_playing %info;
+ } elsif ($f[1] eq "completed" && !$st->{play}) {
+ notify "$TITLE state", "Stopped";
}
}
$OP{"enable/disable"} = sub {
my $st = get_state;
- my $sk =configured_connection;
+ my $sk = configured_connection;
if ($st->{play}) { send_command $sk, "disable"; }
else { send_command $sk, "enable"; }
close $sk;
###--------------------------------------------------------------------------
### Main program.
-if (@ARGV != 1) { print STDERR "usage: $0 OP\n"; exit 2; }
+sub usage (\*) {
+ my ($fh) = @_;
+ print $fh "usage: $PROG [-u CONFIG] COMMAND\n";
+}
+
+sub help () {
+ usage *STDOUT;
+ print <<EOF;
+
+Command-line options:
+ -h, --help Show this help text
+ -u, --user-config Set user configuration file
+
+Commands:
+ volume-up
+ volume-down
+ scratch
+ enable/disable
+ play/pause
+ watch
+ now-playing
+ notify-now-playing
+ next-config
+EOF
+}
+
+my $bad = 0;
+GetOptions
+ "h|help" => sub { help; exit 0; },
+ "u|user-config=s" => \$C{config}
+ or $bad = 1;
+@ARGV == 1 or $bad = 1;
+if ($bad) { usage *STDERR; exit 2; }
my $op = $ARGV[0];
if (!exists $OP{$op}) { print STDERR "$0: unknown op `$op'\n"; exit 2; }
$OP{$op}();