X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=lib%2FApp%2FMPD%2FFeeder.pm;h=2ce166f6a4b45e1a4a5534534af2a474eafe2bd9;hb=cbce7ac600c7472872a0e4d042f2c8b4fdfefe6c;hp=7da421a6433bbcc0a8f805cc8d103306200c7c0a;hpb=0135556249d5b1a2296dbb3a46eaba31fa9230a0;p=mpd-feeder.git diff --git a/lib/App/MPD/Feeder.pm b/lib/App/MPD/Feeder.pm index 7da421a..2ce166f 100644 --- a/lib/App/MPD/Feeder.pm +++ b/lib/App/MPD/Feeder.pm @@ -11,6 +11,7 @@ use DBD::Pg; use DBI; use Getopt::Long; use IO::Async::Signal; +use IO::Async::Timer::Periodic; use Log::Any qw($log); use Net::Async::MPD; use Object::Pad; @@ -23,6 +24,7 @@ class App::MPD::Feeder { has $db :reader; has $db_needs_update :writer = 1; has $mpd :reader; + has $idler; use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf'; @@ -233,7 +235,7 @@ use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf'; method prepare_to_wait_idle { $log->trace('declaring idle mode'); - $mpd->send('idle database playlist')->on_done( + $idler = $mpd->send('idle database playlist')->on_done( sub { my $result = shift; @@ -273,6 +275,20 @@ use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf'; $self->connect_mpd; $self->connect_db; + $mpd->loop->add( + IO::Async::Timer::Periodic->new( + interval => 300, + on_tick => sub { + if ($idler) { + $log->trace('breaking idle to see if MPD is there'); + undef $idler; + $log->trace("> noidle (direct)"); + $mpd->{mpd_handle}->write("noidle\n"); + } + }, + )->start + ); + for ( ;; ) { $self->queue_songs( undef, sub { $self->prepare_to_wait_idle } );