use App::MPD::Feeder::DB;
use App::MPD::Feeder::Options;
-use App::MPD::Feeder::WorkQueue;
use DBD::Pg;
use DBI;
use Getopt::Long;
}
);
+ my $loop = $mpd->loop;
+
my $int_signal_handler = sub {
state $signal_count = 0;
$signal_count++;
$log->debug("Signal received. Stopping loop");
$quit_requested = 1;
- $mpd->loop->stop('quit');
+ $loop->stop('quit');
$self->break_idle;
};
for (qw(TERM INT)) {
- $mpd->loop->add(
+ $loop->add(
IO::Async::Signal->new(
name => $_,
on_receipt => $int_signal_handler,
);
}
- $mpd->loop->add(
+ $loop->add(
IO::Async::Signal->new(
name => 'HUP',
on_receipt => sub {
$log->debug("SIGHUP received. Scheduling reload");
$reload_requested = 1;
- $mpd->loop->stop('reload');
+ $loop->stop('reload');
$self->break_idle;
},
)
);
- $mpd->loop->add(
+ $loop->add(
IO::Async::Signal->new(
name => 'USR1',
on_receipt => sub {
my $present = $mpd->send('playlist')->get // [];
$present = scalar(@$present);
- $log->notice( "Playlist contains $present songs. Wanted: "
- . $opt->target_queue_length );
if ( $present < $opt->target_queue_length ) {
+ $log->info( "Playlist contains $present songs. Wanted: "
+ . $opt->target_queue_length );
$self->queue_songs( $opt->target_queue_length - $present );
}
else {
+ $log->notice("Playlist contains $present songs");
$playlist_needs_filling = 0;
}
);
}
- $log->info("About to add $num songs to the playlist");
+ $log->debug("About to add $num songs to the playlist");
my @paths;
for my $song (@list) {
push @paths, $path;
}
- $log->debug( "Adding " . join( ', ', map {"«$_»"} @paths ) );
+ $log->info( "Adding " . join( ', ', map {"«$_»"} @paths ) );
# MPD needs raw bytes
utf8::encode($_) for @paths;
}
method reexec {
- $log->notice("disconnecting and re-starting");
+ $log->info("disconnecting and re-starting");
$db->disconnect;
undef $mpd;
$log->trace('got out of idle');
- if ( $idler->is_done ) {
- my $result = $idler->get;
- undef $idler;
- if ( ref $result and $result->{changed} ) {
- my $changed = $result->{changed};
- $changed = [$changed] unless ref $changed;
+ if ($idler) {
+ if ( $idler->is_done ) {
+ my $result = $idler->get;
+ undef $idler;
+ if ( ref $result and $result->{changed} ) {
+ my $changed = $result->{changed};
+ $changed = [$changed] unless ref $changed;
- $mpd->emit($_) for @$changed;
+ $mpd->emit($_) for @$changed;
+ }
+ }
+ elsif ( $idler->is_cancelled ) {
+ $log->trace("idle was cancelled");
+ undef $idler;
+ }
+ elsif ( $idler->is_failed ) {
+ $log->warn("idle failed: ".$idler->failure);
+ undef $idler;
}
- }
- elsif ( $idler->is_cancelled ) {
- $log->trace("idle was cancelled");
- undef $idler;
- }
- elsif ( $idler->is_failed ) {
- $log->warn("idle failed: ".$idler->failure);
- undef $idler;
}
$mpd->loop->stop;
$self->init_mpd;
- $mpd->loop->add(
+ my $loop = $mpd->loop;
+
+ $loop->add(
IO::Async::Timer::Periodic->new(
interval => 60,
on_tick => sub {
if (!$mpd_connected) {
$log->trace("Not connected to MPD. Skipping alive check.");
+ $loop->stop('disconnected');
return;
}