has $cfg_file :reader;
has $opt :reader;
has $db :reader;
- has $db_needs_update = 1;
+ has $db_needs_update :writer = 1;
has $mpd :reader;
use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf';
$mpd = Net::Async::MPD->new(%conn);
+ $mpd->on(
+ close => sub {
+ die "Connection to MPD lost";
+ }
+ );
+
my $int_signal_handler = sub {
state $signal_count = 0;
$signal_count++;
my $rows = $mpd->send('listallinfo')->get;
+ $log->trace('got all songs from MPD');
+
$db->start_update;
try {
my $song_count;
$self->db->store_song( $entry->{file},
$entry->{AlbumArtist} // $entry->{Artist},
$entry->{Album} );
+
$song_count++;
}
- $log->info("Updated data about $song_count songs");
+ my ($total_songs, $total_artists, $total_albums,
+ $new_songs, $new_artists, $new_albums
+ ) = $self->db->finish_update;
- $self->db->remove_stale_entries;
+ $log->info(
+ "Updated data about $song_count songs (including $new_songs new), "
+ . "$total_artists artists (including $new_artists new) "
- $self->db->finish_update;
+ . "and $total_albums albums (including $new_albums new)"
+ );
$db_needs_update = 0;
}
);
}
- method run {
- $mpd->on(
- close => sub {
- die "Connection to MPD lost";
- }
- );
-
- $self->prepare_to_wait_idle;
- }
-
method stop {
undef $mpd;
}
method run_loop {
+ $self->connect_mpd;
$self->connect_db;
for ( ;; ) {
- $self->queue_songs( undef, sub { $self->run } );
+ $self->queue_songs( undef, sub { $self->prepare_to_wait_idle } );
$log->debug("Entering event loop. PID=$$");