]> git.ktnx.net Git - mpd-feeder.git/blobdiff - lib/App/MPD/Feeder.pm
show command line upon re-exec (log_level=trace)
[mpd-feeder.git] / lib / App / MPD / Feeder.pm
index 4285e7077549ce294e26b6c7b6d75babef7f9da3..dfb83c7b200e478dddf4405894d4c2f0477b4299 100644 (file)
@@ -58,6 +58,26 @@ use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf';
 
         $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',
@@ -248,7 +268,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 +277,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 +307,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;
         }
@@ -498,7 +515,18 @@ SQL
                 $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;
             }
         }
     }