]> git.ktnx.net Git - mpd-feeder.git/blobdiff - lib/App/MPD/Feeder.pm
fix DB stats retrieval when no songs were queued recently
[mpd-feeder.git] / lib / App / MPD / Feeder.pm
index dbdcafb39494df4a0f2ae796faa57415b3c0d764..c23b4b465bf6c3c4590b96a549a14000d004d9cc 100644 (file)
@@ -248,7 +248,6 @@ SQL
             $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);
@@ -258,26 +257,22 @@ SQL
             $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(
@@ -292,41 +287,43 @@ SQL
 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;
         }
@@ -482,5 +479,25 @@ SQL
             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' );
+            }
+        }
+    }
 }