Skip to content

Commit 6380bdc

Browse files
committed
Implement "clear my foo.bar" preference
1 parent e3a0815 commit 6380bdc

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

lib/Synergy/Reactor/Preferences.pm

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ sub listener_specs {
2323
return unless $e->text =~ /\Aset\s+(my|\w+'s)/in;
2424
},
2525
},
26+
{
27+
name => 'clear',
28+
method => 'handle_clear',
29+
exclusive => 1,
30+
predicate => sub ($self, $e) {
31+
return unless $e->was_targeted;
32+
return unless $e->text =~ /\Aclear\s+(my|\w+'s)/in;
33+
},
34+
},
2635
{
2736
name => 'list_all_preferences',
2837
method => 'handle_list',
@@ -48,16 +57,38 @@ sub listener_specs {
4857
}
4958

5059
sub handle_set ($self, $event) {
51-
my ($who, $comp_name, $pref_name, $pref_value) =
60+
my ($who, $pref_name, $pref_value) =
5261
$event->text =~ m{\A set \s+ (my|\w+'s) \s+ # set my
53-
([-_a-z0-9]+) \. ([-_a-z0-9]+) # component.pref
62+
([-_a-z0-9]+ \. [-_a-z0-9]+) # component.pref
5463
\s+ to \s+ (.*) # to value
5564
}x;
5665

57-
return unless $who;
66+
return $self->_set_pref($event, $who, $pref_name, $pref_value);
67+
}
68+
69+
sub handle_clear ($self, $event) {
70+
my ($who, $pref_name, $rest) =
71+
$event->text =~ m{\A clear \s+ (my|\w+'s) \s+ # set my
72+
([-_a-z0-9]+ \. [-_a-z0-9]+) # component.pref
73+
\s* (.+)?
74+
}x;
75+
76+
return $event->error_reply("You can't pass a value to 'clear'")
77+
if $rest;
5878

79+
return $self->_set_pref($event, $who, $pref_name, undef);
80+
}
81+
82+
sub _set_pref ($self, $event, $who, $full_name, $pref_value) {
83+
return unless $who;
5984
$who =~ s/'s$//;
6085

86+
my $user = $self->hub->user_directory->resolve_name($who, $event->from_user);
87+
return $event->error_reply("Sorry, I couldn't find a user for <$who>")
88+
unless $user;
89+
90+
my ($comp_name, $pref_name) = split /\./, $full_name, 2;
91+
6192
my $component;
6293
try {
6394
$component = $self->hub->component_named($comp_name);
@@ -68,10 +99,6 @@ sub handle_set ($self, $event) {
6899

69100
return unless $component;
70101

71-
my $user = $self->hub->user_directory->resolve_name($who, $event->from_user);
72-
return $event->error_reply("Sorry, I couldn't find a user for <$who>")
73-
unless $user;
74-
75102
if ($user != $event->from_user && ! $event->from_user->is_master) {
76103
return $event->error_reply(
77104
"Sorry, only master users can set preferences for other people"

lib/Synergy/UserDirectory.pm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ __PACKAGE__->add_preference(
175175
},
176176
describer => sub ($value) {
177177
return '<undef>' unless $value;
178+
return '<undef>' unless @$value;
178179
return join(q{, }, @$value);
179180
},
180181
);

0 commit comments

Comments
 (0)