bin/mdw-build: Allow overriding the `make' program.
[profile] / bin / disorder-notify
index d36db9a..84c702f 100755 (executable)
@@ -3,16 +3,16 @@
 sub notify ($$) {
   my ($head, $body) = @_;
 
+  $body =~ s:\&:&:g;
+  $body =~ s:\<:&lt;:g;
+  $body =~ s:\>:&gt;:g;
   my $kid = fork;
   defined $kid or return;
   if (!$kid) {
     open STDOUT, ">", "/dev/null";
-    exec "gdbus", "call", "-e",
-      "-d", "org.freedesktop.Notifications",
-      "-o", "/org/freedesktop/Notifications",
-      "-m", "org.freedesktop.Notifications.Notify", "--",
-      "DisOrder", "0", "audio-volume-high",
-      $head, $body, "[]", "{}", "5000";
+    exec "notify-send",
+      "-c", "DisOrder", "-i", "audio-volume-high", "-t", "5000",
+      $head, $body;
   }
   waitpid $kid, 0;
 }
@@ -27,8 +27,13 @@ sub cmd (@) {
   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; }
@@ -43,6 +48,8 @@ sub now_playing ($) {
 
 for (;;) {
   open my $log, "-|", "disorder", "log";
+  my $startp = 1;
+  my $stateinfo = undef;
   LINE: while (<$log>) {
     chomp;
     my @f = ();
@@ -71,21 +78,30 @@ for (;;) {
     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];
     }