4 my ($head, $body) = @_;
7 defined $kid or return;
9 open STDOUT, ">", "/dev/null";
10 exec "gdbus", "call", "-e",
11 "-d", "org.freedesktop.Notifications",
12 "-o", "/org/freedesktop/Notifications",
13 "-m", "org.freedesktop.Notifications.Notify", "--",
14 "DisOrder", "0", "audio-volume-high",
15 $head, $body, "[]", "{}", "5000";
22 open my $f, "-|", "disorder", @args;
25 if (wantarray) { return @r; }
26 elsif (@r == 1) { return $r[0]; }
27 else { return "??? multiple lines"; }
30 sub now_playing (;$) {
32 if (!defined $track) {
33 my @r = cmd "playing";
34 if ($r[0] =~ /^track\s+(.*)$/) { $track = $1; }
38 for my $p ("artist", "album", "title")
39 { $p{$p} = cmd "part", $track, "display", $p; }
40 if ($p{artist} =~ /^[A-Z]$/)
41 { $p{artist} = $p{album}; $p{album} = undef; }
42 elsif ($p{artist} eq "share" && $p{album} eq "disorder")
44 my $r = "$p{artist}: ‘$p{title}’";
45 if (defined $p{album}) { $r .= ", from ‘$p{album}’"; }
46 notify "DisOrder: now playing", $r;
50 open my $log, "-|", "disorder", "log";
51 LINE: while (<$log>) {
54 my $q = my $t = undef;
57 for (my $i = 0; $i < length $_; $i++) {
58 my $ch = substr($_, $i, 1);
60 if ($ch eq "n") { $ch = "\n"; }
63 push @f, $t; $q = $t = undef;
64 } elsif (defined $q) {
65 if ($ch eq "\\") { $e = 1; }
67 } elsif ($ch eq " ") {
68 push @f, $t if defined $t; $t = undef;
69 } elsif (!defined $t && ($ch eq '"' || $ch eq "'")) {
70 $t //= ""; $q = $ch; $j = $i;
75 defined $q and die "unmatched $q (pos $j) in: $_";
76 push @f, $t if defined $t;
79 if ($what eq "state") {
83 if ($st eq "disable_random") { $msg = "random play disabled"; }
84 elsif ($st eq "enable_random") { $msg = "random play enabled"; }
85 elsif ($st eq "disable_play") { $msg = "playing disabled"; }
86 elsif ($st eq "enable_play") { $msg = "playing enabled"; }
87 elsif ($st eq "pause") { $msg = "paused"; }
88 elsif ($st eq "resume") { $msg = "playing"; $np = 1; }
90 notify "DisOrder state", ucfirst $msg;
93 } elsif ($what eq "playing") {