=== Commands.pm ================================================================== --- Commands.pm (revision 24983) +++ Commands.pm (local) @@ -81,19 +81,35 @@ # but for some commands, the parameters name start with _ and are defined # in the big dispatch table (see Request.pm). my $client = $request->client(); - my $id = $request->getParam('id'); - my $cmd = $request->getParam('cmd'); - my $dow = $request->getParam('dow'); - my $enable = $request->getParam('enabled'); - my $repeat = $request->getParam('repeat'); - my $time = $request->getParam('time'); - my $volume = $request->getParam('volume'); - my $playlisturl = $request->getParam('url'); - + my $cmd = $request->getParam('_cmd'); + + my @tags = qw( id dow enable repeat time volume playlisturl cmd ); + + # legacy support for "bare" alarm cli command (i.e., sending all tagged params) + my $params; + my $skip; + if ($cmd =~ /:/) { + my ( $tag, $val ) = split /:/, $cmd; + $params->{$tag} = $val; + $skip = $tag; + } else { + $params->{cmd} = $cmd; + $skip = 'cmd'; + } + + for my $tag (@tags) { + # skip this if we already got it from the _cmd param in the first slot of the command + next if $tag eq $skip; + $params->{$tag} = $request->getParam($tag); + } + # validate the parameters using request's convenient functions - if ($request->paramUndefinedOrNotOneOf($cmd, ['add', 'delete']) || - (defined $dow && $dow !~ /^[0-6](?:,[0-6])*$/) || - (! defined $id && $cmd ne 'add') || ! defined $client || ! $time || $time =~ /\D/) { + if ( $params->{cmd} ne 'disableall' && $params->{cmd} ne 'enableall' && + ( + $request->paramUndefinedOrNotOneOf($params->{cmd}, ['add', 'delete', 'enableall', 'disableall']) || + (defined $params->{dow} && $params->{dow} !~ /^[0-6](?:,[0-6])*$/) || + (! defined $params->{id} && $params->{cmd} ne 'add') || ! defined $client || ! $params->{time} || $params->{time} =~ /\D/ + ) ) { # set an appropriate error state if something is wrong $request->setStatusBadParams(); @@ -102,30 +118,49 @@ my $alarm; - if ($cmd eq 'add') { + if ($params->{cmd} eq 'add') { $alarm = Slim::Utils::Alarm->new($client); } + elsif ($params->{cmd} eq 'enableall') { + $prefs->client($client)->alarmsEnabled(1); + $client->showBriefly({ + 'jive' => { + 'type' => 'popupplay', + 'text' => [ $client->string('ALARM_ALL_ALARMS_ENABLED') ], + } + }); + + } + elsif ($params->{cmd} eq 'disableall') { + $prefs->client($client)->alarmsEnabled(0); + $client->showBriefly({ + 'jive' => { + 'type' => 'popupplay', + 'text' => [ $client->string('ALARM_ALL_ALARMS_DISABLED') ], + } + }); + } else { - $alarm = Slim::Utils::Alarm->getAlarm($client, $id); + $alarm = Slim::Utils::Alarm->getAlarm($client, $params->{id}); } if (defined $alarm) { - if ($cmd eq 'delete') { + if ($params->{cmd} eq 'delete') { $alarm->delete($client); } else { - $alarm->time($time) if defined $time; - $alarm->playlist($playlisturl) if defined $playlisturl; - $alarm->volume($volume) if defined $volume; - $alarm->enabled($enable) if defined $enable; - $alarm->repeat($repeat) if defined $repeat; + $alarm->time($params->{time}) if defined $params->{time}; + $alarm->playlist($params->{playlisturl}) if defined $params->{playlisturl}; + $alarm->volume($params->{volume}) if defined $params->{volume}; + $alarm->enabled($params->{enable}) if defined $params->{enable}; + $alarm->repeat($params->{repeat}) if defined $params->{repeat}; foreach (0..6) { - my $set = !defined $dow || $dow =~ /$_/; + my $set = !defined $params->{dow} || $params->{dow} =~ /$_/; $alarm->day($_, $set); } }