]> git.ktnx.net Git - mpd-feeder.git/commitdiff
split command execution into App::MPD::Feeder::Command
authorDamyan Ivanov <dmn@debian.org>
Fri, 12 Nov 2021 07:12:23 +0000 (07:12 +0000)
committerDamyan Ivanov <dmn@debian.org>
Fri, 12 Nov 2021 07:12:38 +0000 (07:12 +0000)
avoids having dead code in RAM when the main loop is operating

bin/mpd-feeder
lib/App/MPD/Feeder/Command.pm [new file with mode: 0644]

index bc73a73aa7988ed57df18108c8281dc8d8f4f5df..ffb7994e2db793f5a42a3daae7f4a1714044bbf2 100755 (executable)
@@ -11,62 +11,10 @@ use Log::Any::Adapter Stderr => log_level => 'error';
 my $feeder = App::MPD::Feeder->new();
 
 if (@ARGV) {
-    my $cmd = shift @ARGV;
+    require App::MPD::Feeder::Command;
+    bless $feeder, 'App::MPD::Feeder::Command';
 
-    if ($cmd eq 'dump-config') {
-        die "dump-config command accepts no arguments\n" if @ARGV;
-
-        $feeder->opt->dump;
-        exit;
-    }
-
-    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;
-    }
-    else {
-        die "Unknown command '$cmd'";
-    }
+    exit $feeder->run(@ARGV);
 }
 
 $feeder->run_loop;
diff --git a/lib/App/MPD/Feeder/Command.pm b/lib/App/MPD/Feeder/Command.pm
new file mode 100644 (file)
index 0000000..37b8ee1
--- /dev/null
@@ -0,0 +1,79 @@
+package App::MPD::Feeder::Command;
+
+use strict;
+use warnings;
+use utf8;
+
+use Log::Any qw($log);
+use Object::Pad;
+
+class App::MPD::Feeder::Command
+isa App::MPD::Feeder {
+    method run(@args) {
+        my $cmd = shift @args;
+
+        if ( $cmd eq 'dump-config' ) {
+            die "dump-config command accepts no arguments\n" if @args;
+
+            $self->opt->dump;
+
+            return 0;
+        }
+
+        if ( $cmd eq 'add-unwanted-artist' ) {
+            die "Missing command arguments\n" unless @args;
+            $self->set_db_needs_update(0);
+            for my $artist (@args) {
+                if ( $self->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");
+                }
+            }
+
+            return 0;
+        }
+
+        if ( $cmd eq 'del-unwanted-artist' ) {
+            die "Missing command arguments\n" unless @args;
+            $self->set_db_needs_update(0);
+            for my $artist (@args) {
+                if ( $self->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");
+                }
+            }
+
+            return 0;
+        }
+
+        if ( $cmd eq 'add-unwanted-album' ) {
+            die "NOT IMPLEMENTED\n";
+        }
+
+        if ( $cmd eq 'one-shot' ) {
+            die "one-shot command accepts no arguments\n" if @args;
+
+            $self->queue_songs( undef, sub {$self->mpd->loop->stop} );
+            $self->mpd->loop->run;
+            return 0;
+        }
+        elsif ( $cmd eq 'single' ) {
+            die "single command accepts no arguments\n" if @args;
+
+            $self->queue_songs( 1, sub {$self->mpd->loop->stop} );
+            $self->mpd->loop->run;
+            return 0;
+        }
+        else {
+            die "Unknown command '$cmd'";
+        }
+    }
+}