From 465edd6db828b62c830a505f14bc2f8d622b5fb3 Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Thu, 11 Nov 2021 14:46:05 +0000 Subject: [PATCH] parse wanted playlist length as an integer --- bin/mpd-feeder | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/bin/mpd-feeder b/bin/mpd-feeder index 8ada5ca..da60df8 100755 --- a/bin/mpd-feeder +++ b/bin/mpd-feeder @@ -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 -- 2.39.5