sub notify ($$) {
my ($head, $body) = @_;
+ $body =~ s:\&:&:g;
+ $body =~ s:\<:<:g;
+ $body =~ s:\>:>:g;
my $kid = fork;
defined $kid or return;
if (!$kid) {
else { return "??? multiple lines"; }
}
-sub now_playing ($) {
+sub now_playing (;$) {
my ($track) = @_;
+ if (!defined $track) {
+ my @r = cmd "playing";
+ if ($r[0] =~ /^track\s+(.*)$/) { $track = $1; }
+ else { return; }
+ }
my %p;
for my $p ("artist", "album", "title")
{ $p{$p} = cmd "part", $track, "display", $p; }
for (;;) {
open my $log, "-|", "disorder", "log";
+ my $startp = 1;
+ my $stateinfo = undef;
LINE: while (<$log>) {
chomp;
my @f = ();
push @f, $t if defined $t;
my $what = $f[1];
- if ($what eq "state") {
+ if ($what eq "volume" && $startp) {
+ $startp = 0;
+ notify "DisOrder state", "Connected: $startinfo";
+ now_playing;
+ } elsif ($what eq "state") {
my $st = $f[2];
- if ($st eq "disable_random") {
- notify "DisOrder state", "Random play disabled";
- } elsif ($st eq "enable_random") {
- notify "DisOrder state", "Random play enabled";
- } elsif ($st eq "disable_play") {
- notify "DisOrder state", "Playing disabled";
- } elsif ($st eq "enable_play") {
- notify "DisOrder state", "Playing enabled";
- } elsif ($st eq "pause") {
- notify "DisOrder state", "Paused";
- } elsif ($st eq "resume") {
- notify "DisOrder state", "Resuming";
+ my $msg;
+ my $np = 0;
+ if ($st eq "disable_random") { $msg = "random play disabled"; }
+ elsif ($st eq "enable_random") { $msg = "random play enabled"; }
+ elsif ($st eq "disable_play") { $msg = "playing disabled"; }
+ elsif ($st eq "enable_play") { $msg = "playing enabled"; }
+ elsif ($st eq "pause") { $msg = "paused"; }
+ elsif ($st eq "resume") { $msg = "playing"; $np = 1; }
+ else { next LINE; }
+ if (!$startp) {
+ notify "DisOrder state", ucfirst $msg;
+ now_playing if $np;
+ } else {
+ if (defined $startinfo) { $startinfo .= "; " . $msg; }
+ else { $startinfo = $msg; }
}
+ } elsif ($what eq "scratched") {
+ notify "DisOrder state", "Scratched playing track";
} elsif ($what eq "playing") {
now_playing $f[2];
}