| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/usr/bin/perl
- use strict;
- use warnings;
- use LWP::Simple;
- use File::Basename;
- use Time::HiRes qw( sleep );
- use File::Temp qw( tempfile );
- # Prototypes
- sub xbmcHTTP($);
- # App config
- my $TEMP_DIR = `getconf DARWIN_USER_TEMP_DIR`;
- chomp($TEMP_DIR);
- my $DATA_DIR = $TEMP_DIR . '/plexMonitor';
- # xbmcHTTP commands
- my %CMDS = (
- 'PLAYING' => 'GetCurrentlyPlaying',
- 'GUI' => 'GetGuiStatus'
- );
- # Debug
- my $DEBUG = 0;
- if ($ENV{'DEBUG'}) {
- $DEBUG = 1;
- }
- # Command-line arguments
- my ($DELAY) = @ARGV;
- if (!$DELAY) {
- $DELAY = 0;
- }
- # Sanity check
- if (!-d $TEMP_DIR) {
- die("Bad config\n");
- }
- # Mode
- my $MODE = 'PLAYING';
- if (basename($0) =~ /GUI/i) {
- $MODE = 'GUI';
- }
- # Add the data directory as needed
- if (!-d $DATA_DIR) {
- mkdir($DATA_DIR);
- }
- # Loop forever (unless no delay is set)
- my $data = '';
- my $dataLast = '';
- do {
- # Run the monitor command
- my $changed = 0;
- $dataLast = $data;
- $data = xbmcHTTP($CMDS{$MODE});
- # Compare this data set to the last
- if ($data ne $dataLast) {
- $changed = 1;
- if ($DEBUG) {
- print STDERR "Change detected in data:\n" . $data . "\n";
- }
- }
- # If anything changed, save the data to disk
- if ($changed) {
- my ($fh, $tmp) = tempfile($DATA_DIR . '/' . $MODE . '.XXXXXXXX', 'UNLINK' => 0);
- print $fh $data;
- close($fh);
- rename($tmp, $DATA_DIR . '/' . $MODE);
- }
- # Delay and loop
- sleep($DELAY);
- } until ($DELAY == 0);
- # Exit cleanly
- exit(0);
- sub xbmcHTTP($) {
- my ($cmd) = @_;
- my $data = get('http://localhost:3000/xbmcCmds/xbmcHttp?command=' . $cmd);
- if (!defined($data)) {
- $data = '';
- }
- return $data;
- }
|