has $opt :reader;
has $db;
has $db_generation;
- 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';
return @result;
}
+ method db_add_unwanted_artist($artist) {
+ $self->connect_db;
+
+ try {
+ $db->do(
+ <<'SQL',
+INSERT INTO unwanted_artists(artist, generation)
+VALUES($1, $2)
+SQL
+ undef, $artist, $db_generation
+ );
+ return 1;
+ }
+ catch {
+ my $err = $@;
+
+ $log->debug("PostgreSQL error: $err");
+ $log->debug( "SQLSTATE = " . $db->state );
+ return 0 if $db->state eq '23505';
+
+ die $err;
+ }
+ }
+
+ method db_del_unwanted_artist($artist) {
+ $self->connect_db;
+
+ return 1 == $db->do(
+ <<'SQL',
+DELETE FROM unwanted_artists
+WHERE artist = $1
+SQL
+ undef, $artist
+ );
+ }
+
method queue_songs($num = undef, $callback = undef) {
if (!defined $num) {
$self->connect_mpd;
my $feeder = Feeder->new();
-sub usage {
- die "Usage: mpd-feeder [option...] [command]\n";
-}
-
if (@ARGV) {
- usage if @ARGV > 1;
-
my $cmd = shift @ARGV;
if ($cmd eq 'dump-config') {
+ die "dump-config command accepts no arguments\n" if @ARGV;
+
$feeder->opt->dump;
exit;
}
-# FIXME: handle blacklist manipulation
+
+ if ( $cmd eq 'add-unwanted-artist' ) {
+ die "Missing command arguments\n" unless @ARGV;
+ $feeder->set_db_needs_update(0);
+ for my $artist (@ARGV) {
+ if ( $feeder->db_add_unwanted_artist($artist) ) {
+ $log->info("Artist '$artist' added to the unwanted list\n");
+ }
+ else {
+ $log->warn("Artist '$artist' already in the unwanted list\n");
+ }
+ }
+ exit;
+ }
+
+ if ( $cmd eq 'del-unwanted-artist' ) {
+ die "Missing command arguments\n" unless @ARGV;
+ $feeder->set_db_needs_update(0);
+ for my $artist (@ARGV) {
+ if ( $feeder->db_del_unwanted_artist($artist) ) {
+ $log->info("Artist '$artist' deleted from the unwanted list\n");
+ }
+ else {
+ $log->warn("Artist '$artist' is not in the unwanted list\n");
+ }
+ }
+ exit;
+ }
+
+ if ( $cmd eq 'add-unwanted-album' ) {
+ die "NOT IMPLEMENTED\n";
+ }
if ( $cmd eq 'one-shot' ) {
+ die "one-shot command accepts no arguments\n" if @ARGV;
+
$feeder->queue_songs(undef, sub { exit });
$feeder->mpd->loop->run;
}
elsif ( $cmd eq 'single' ) {
+ die "single command accepts no arguments\n" if @ARGV;
+
$feeder->queue_songs(1, sub { exit });
$feeder->mpd->loop->run;
}