]> git.ktnx.net Git - mpd-feeder.git/blobdiff - bin/mpd-feeder
connect to the DB early when in feeder mode
[mpd-feeder.git] / bin / mpd-feeder
index 1d0e23337515e2a627ebe1eac663d43d80aa6900..8644dde79e4b6addcbceaf71695e20f204c38f02 100755 (executable)
@@ -215,6 +215,8 @@ use Net::Async::MPD;
         my $sth = $db->prepare_cached("select $name from options");
         $sth->execute;
         my @result = $sth->fetchrow_array;
+        $sth->finish;
+        undef $sth;
 
         return $result[0];
     }
@@ -299,7 +301,8 @@ SQL
             foreach my $entry (@$rows) {
                 next unless exists $entry->{file};
                 $self->db_store_song( $entry->{file},
-                    $entry->{Artist}, $entry->{Album} );
+                    $entry->{AlbumArtist} // $entry->{Artist},
+                    $entry->{Album} );
                 $song_count++;
             }
 
@@ -329,11 +332,11 @@ SQL
         $self->update_db;
 
         my @result;
-        my $sth = $db->prepare_cached(<<SQL);
+        my $sql = <<SQL;
 SELECT s.path, s.artist, s.album
 FROM songs s
 JOIN artists ar ON ar.artist=s.artist
-JOIN albums al ON al.album=s.album
+JOIN albums al ON al.album=s.album AND al.artist=s.artist
 WHERE (s.last_queued IS NULL OR s.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
   AND (ar.last_queued IS NULL OR ar.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
   AND (al.last_queued IS NULL OR al.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
@@ -342,16 +345,17 @@ WHERE (s.last_queued IS NULL OR s.last_queued < CURRENT_TIMESTAMP - (? || ' seco
 ORDER BY random()
 LIMIT ?
 SQL
-        $sth->execute(
-            $opt->min_song_interval,
-            $opt->min_artist_interval,
-            $opt->min_album_interval,
-            $num,
+        my @params = (
+            $opt->min_song_interval,  $opt->min_artist_interval,
+            $opt->min_album_interval, $num,
         );
+        my $sth = $db->prepare_cached($sql);
+        $sth->execute(@params);
         while ( my @row = $sth->fetchrow_array ) {
             push @result,
                 { song => $row[0], artist => $row[1], album => $row[2] };
         }
+        undef $sth;
 
         return @result;
     }
@@ -567,6 +571,8 @@ if (@ARGV) {
     }
 }
 
+$feeder->connect_db;
+
 for ( ;; ) {
     $feeder->queue_songs( undef, sub { $feeder->run } );