$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;
}
undef $db;
}
}
+
+ method run_loop {
+ $self->connect_db;
+
+ for ( ;; ) {
+ $self->queue_songs( undef, sub { $self->run } );
+
+ $log->debug("Entering event loop. PID=$$");
+
+ my $result = $mpd->loop->run;
+ $log->trace( "Got loop result of " . ( $result // 'undef' ) );
+
+ if ( 'reload' eq $result ) {
+ $log->notice("disconnecting");
+ $self->stop;
+
+ exec( "$0", '--config', $self->cfg_file, '--skip-db-update' );
+ }
+ }
+ }
}