]> git.ktnx.net Git - mpd-feeder.git/blobdiff - lib/App/MPD/Feeder.pm
cope with no $idler right after idle is done
[mpd-feeder.git] / lib / App / MPD / Feeder.pm
index c951c70e8dc6134a7cbdda903042445e43f17d9f..36bf29d0fd3c643be97397741ca672e3c6dc3455 100644 (file)
@@ -91,6 +91,8 @@ method init_mpd {
         }
     );
 
+    my $loop = $mpd->loop;
+
     my $int_signal_handler = sub {
         state $signal_count = 0;
         $signal_count++;
@@ -103,12 +105,12 @@ method init_mpd {
 
         $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,
@@ -116,19 +118,19 @@ method init_mpd {
         );
     }
 
-    $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 {
@@ -344,23 +346,25 @@ method pulse {
 
     $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;
@@ -371,12 +375,15 @@ method run_loop {
 
     $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;
                 }