Skip to content

Commit

Permalink
new feature: run program on first connection / run program on last
Browse files Browse the repository at this point in the history
disconnection

I was looking to trigger an action when I connect to shairport.
Basically, I want to switch on the stereo when I start playing music
over shairport (and I want to switch if off when I stop streaming).

Because my set-up will be different than any other set-up, I thought
about making it generic.

Two new command-line options --play_prog and --stop_prog take one
argument: the command line to start when the first connection is made or
when the last connection quits.

Example:
$ shairport.pl --play_prog="amixer set PCM 100%"
  • Loading branch information
Stef Simoens committed Oct 10, 2011
1 parent 800453f commit 9796ac3
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions shairport.pl
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@
my $mac;
# SB volume
my $volume;
# custom play and stop program
my $play_prog;
my $stop_prog;
# output debugging information
my $verbose;
# where to write PID
Expand All @@ -97,6 +100,8 @@
"s|squeezebox" => \$squeeze,
"c|cliport=s" => \$cliport,
"m|mac=s" => \$mac,
"play_prog=s" => \$play_prog,
"stop_prog=s" => \$stop_prog,
"l|volume=s" => \$volume,
"h|help" => \$help);

Expand All @@ -117,6 +122,8 @@ sub usage {
" -c --cliport=port Sets the SBS CLI port\n",
" -m --mac=address Sets the SB target device\n",
" -l --volume=level Sets the SB volume level (in %)\n",
" --play_prog=cmdline Program to start on 1st connection\n",
" --stop_prog=cmdline Program to start on last disconnection\n",
" -d Daemon mode\n",
" -w --writepid=path Write PID to this location\n",
" -v --verbose Print debugging messages\n",
Expand Down Expand Up @@ -491,6 +498,11 @@ sub performSqueezeboxSetup {
if (defined($squeeze) && $squeeze) {
&performSqueezeboxSetup();
}

# the 2nd connection is a player connection
if (defined($play_prog) && $sel->count() == 2) {
system($play_prog);
}
} else {
if (eof($fh)) {
print "Closed: $fh\n" if $verbose;
Expand All @@ -502,6 +514,11 @@ sub performSqueezeboxSetup {
eval { kill $conns{$fh}{decoder_pid} };
}
delete $conns{$fh};

# 1 connection means no connection
if (defined($stop_prog) && $sel->count() == 1) {
system($stop_prog);
}
next;
}
if (exists $conns{$fh}) {
Expand Down

0 comments on commit 9796ac3

Please sign in to comment.