$mpd = Net::Async::MPD->new(%conn);
+ $mpd->loop->add(
+ IO::Async::Signal->new(
+ name => 'TERM',
+ on_receipt => sub {
+ $log->debug("SIGTERM received. Stopping loop");
+ $mpd->loop->stop('quit');
+ },
+ )
+ );
+
+ $mpd->loop->add(
+ IO::Async::Signal->new(
+ name => 'INT',
+ on_receipt => sub {
+ $log->debug("SIGINT received. Stopping loop");
+ $mpd->loop->stop('quit');
+ },
+ )
+ );
+
$mpd->loop->add(
IO::Async::Signal->new(
name => 'HUP',
$sql =~ s/^SELECT .+$/SELECT COUNT(DISTINCT s.path)/m;
$sql =~ s/^ORDER BY .+$//m;
$sql =~ s/^LIMIT .+$//m;
- $log->debug($sql);
my $sth = $db->prepare_cached($sql);
pop @params;
$sth->execute(@params);
$sth = $db->prepare_cached('SELECT COUNT(*) FROM songs');
$sth->execute;
my $total = ($sth->fetchrow_array)[0];
+ $sth->finish;
$log->debug(
sprintf(
"Number of songs meeting the criteria: %d out of total %d (%5.2f%%)",
$count, $total, 100.0 * $count / $total
)
);
- $sth->finish;
$sql = <<SQL;
SELECT COUNT(*)
FROM songs s
WHERE (s.last_queued IS NULL OR s.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
-UNION
-SELECT COUNT(*)
-FROM songs
SQL
$sth = $db->prepare_cached($sql);
$sth->execute($opt->min_song_interval);
$count = ($sth->fetchrow_array)[0];
- $total = ($sth->fetchrow_array)[0];
$sth->finish;
$log->debug(
SELECT COUNT(*)
FROM artists ar
WHERE (ar.last_queued IS NULL OR ar.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
-UNION
-SELECT COUNT(*)
-FROM artists
SQL
$sth = $db->prepare_cached($sql);
$sth->execute($opt->min_artist_interval);
$count = ($sth->fetchrow_array)[0];
+ $sth->finish;
+
+ $sth = $db->prepare_cached('SELECT COUNT(*) FROM artists');
+ $sth->execute;
$total = ($sth->fetchrow_array)[0];
+ $sth->finish;
$log->debug(
sprintf(
"Number of artists not queued soon: %d out of total %d (%5.2f%%)",
$count, $total, 100.0 * $count / $total
)
);
- $sth->finish;
$sql = <<SQL;
SELECT COUNT(*)
FROM albums al
WHERE (al.last_queued IS NULL OR al.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
-UNION
-SELECT COUNT(*)
-FROM albums
SQL
$sth = $db->prepare_cached($sql);
$sth->execute($opt->min_album_interval);
$count = ($sth->fetchrow_array)[0];
+ $sth->finish;
+
+ $sth = $db->prepare_cached('SELECT COUNT(*) FROM albums');
+ $sth->execute;
$total = ($sth->fetchrow_array)[0];
+ $sth->finish;
$log->debug(
sprintf(
"Number of albums not queued soon: %d out of total %d (%5.2f%%)",
$count, $total, 100.0 * $count / $total
)
);
- $sth->finish;
undef $sth;
}
$log->notice("disconnecting");
$self->stop;
- exec( "$0", '--config', $self->cfg_file, '--skip-db-update' );
+ my @exec = ( $0, '--config', $self->cfg_file, '--skip-db-update' );
+ if ( $log->is_trace ) {
+ $log->trace( 'exec '
+ . join( ' ', map { /\s/ ? "'$_'" : $_ } @exec ) );
+ }
+ exec(@exec);
+ }
+
+ if ( 'quit' eq $result ) {
+ $log->trace("quitting because of 'quit' loop result");
+ $self->stop;
+ exit 0;
}
}
}