]> git.ktnx.net Git - mpd-feeder.git/commitdiff
parse wanted playlist length as an integer
authorDamyan Ivanov <dmn@debian.org>
Thu, 11 Nov 2021 14:46:05 +0000 (14:46 +0000)
committerDamyan Ivanov <dmn@debian.org>
Thu, 11 Nov 2021 14:46:05 +0000 (14:46 +0000)
bin/mpd-feeder

index 8ada5ca85160c32c68a58190116b6b7a0227c7de..da60df88a227312970e952c9f4506ecebf33ac2b 100755 (executable)
@@ -9,6 +9,7 @@ use Object::Pad;
 use Syntax::Keyword::Try;
 
 class Options {
+    use Log::Any qw($log);
     use Time::Duration qw(duration_exact);
     use Time::Duration::Parse qw(parse_duration);
     has $log_level           :reader = 'warn';
@@ -27,12 +28,14 @@ class Options {
         Getopt::Long::GetOptions(
             'log-level=s'               => \$log_level,
             'skip-db-update!'           => \$skip_db_update,
-            'tql|target-queue-length=n' => \$target_queue_length,
-            'mpd-host=s'                => \$mpd_host,
-            'mpd-port=s'                => \$mpd_port,
-            'db-path=s'                 => \$db_path,
-            'db-user=s'                 => \$db_user,
-            'min-album-interval=s'      => sub {
+            'tql|target-queue-length=n' => sub {
+                $target_queue_length = parse_integer(pop);
+            },
+            'mpd-host=s'           => \$mpd_host,
+            'mpd-port=s'           => \$mpd_port,
+            'db-path=s'            => \$db_path,
+            'db-user=s'            => \$db_user,
+            'min-album-interval=s' => sub {
                 $min_album_interval = parse_duration(pop);
             },
             'min-sing-interval=s' => sub {
@@ -54,6 +57,8 @@ class Options {
         $value = $converter->($value) if $converter;
 
         $$target_ref = $value;
+
+        $log->trace("Option $section.$option = $value");
     }
 
     method dump {
@@ -63,7 +68,6 @@ class Options {
         say "[mpd]";
         say "host = " . ( $mpd_host // '' );
         say "port = " . ( $mpd_port // '' );
-        say "target-queue-length = $target_queue_length";
         say "";
         say "[queue]";
         say "target-length = $target_queue_length";
@@ -77,7 +81,14 @@ class Options {
         say "password = " . ( $db_password // '' );
     }
 
+    sub parse_integer($input) {
+        die "Invalid integer value '$input'" unless $input =~ /^\+?\d{1,18}$/;
+        return $input + 0;
+    }
+
     method parse_config_file($path) {
+        $log->trace("Parsing configuration file $path");
+
         use Config::INI::Reader;
         my $ini = Config::INI::Reader->read_file($path);
 
@@ -87,7 +98,9 @@ class Options {
         handle_config_option( $ini => 'mpd-feeder' => log_level => \$log_level );
 
         handle_config_option(
-            $ini => queue => 'target-length' => \$target_queue_length );
+            $ini => queue => 'target-length' => \$target_queue_length,
+            \&parse_integer
+        );
         handle_config_option(
             $ini => queue => 'min-song-interval' => \$min_song_interval,
             \&parse_duration