]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
Check default data levels for validity
authormartin f. krafft <redacted>
Fri, 17 Sep 2021 21:31:42 +0000 (23:31 +0200)
committermartin f. krafft <redacted>
Fri, 17 Sep 2021 23:45:06 +0000 (01:45 +0200)
Previously, one would have been able to `/set` any of the
`ctrlact_fallback_*_threshold` settings to an invalid value, which is
now prevented.

Signed-off-by: martin f. krafft <redacted>
scripts/ctrlact.pl

index 5c49ab8d3e7ad857d7540bf0e32c780c97b9f0a2..5386d9299eebcbc9c11f21f315ffa1b324cca6b6 100644 (file)
@@ -180,6 +180,8 @@ our %IRSSI = (
 
 ### DEFAULTS AND SETTINGS ######################################################
 
+my @DATALEVEL_KEYWORDS = ('all', 'messages', 'hilights', 'none');
+
 my $debug = 0;
 my $map_file = Irssi::get_irssi_dir()."/ctrlact";
 my $fallback_channel_threshold = 1;
@@ -190,18 +192,33 @@ my $autosave = 1;
 
 Irssi::settings_add_str('ctrlact', 'ctrlact_map_file', $map_file);
 Irssi::settings_add_bool('ctrlact', 'ctrlact_debug', $debug);
-Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_channel_threshold', $fallback_channel_threshold);
-Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_query_threshold', $fallback_query_threshold);
-Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_window_threshold', $fallback_window_threshold);
+Irssi::settings_add_str('ctrlact', 'ctrlact_fallback_channel_threshold', $fallback_channel_threshold);
+Irssi::settings_add_str('ctrlact', 'ctrlact_fallback_query_threshold', $fallback_query_threshold);
+Irssi::settings_add_str('ctrlact', 'ctrlact_fallback_window_threshold', $fallback_window_threshold);
 Irssi::settings_add_bool('ctrlact', 'ctrlact_inhibit_beep', $inhibit_beep);
 Irssi::settings_add_bool('ctrlact', 'ctrlact_autosave', $autosave);
 
+sub init_threshold_setting {
+       my ($type, $ref) = @_;
+       my $setting = 'ctrlact_fallback_'.$type.'_threshold';
+       my $th = Irssi::settings_get_str($setting);
+       my $dl = get_data_level($th);
+       if ($dl) {
+               ${$ref} = $dl;
+       }
+       else {
+               Irssi::settings_set_str($setting, ${$ref});
+       }
+}
+
 sub sig_setup_changed {
        $debug = Irssi::settings_get_bool('ctrlact_debug');
        $map_file = Irssi::settings_get_str('ctrlact_map_file');
-       $fallback_channel_threshold = Irssi::settings_get_int('ctrlact_fallback_channel_threshold');
-       $fallback_query_threshold = Irssi::settings_get_int('ctrlact_fallback_query_threshold');
-       $fallback_window_threshold = Irssi::settings_get_int('ctrlact_fallback_window_threshold');
+
+       init_threshold_setting('channel', \$fallback_channel_threshold);
+       init_threshold_setting('query', \$fallback_query_threshold);
+       init_threshold_setting('window', \$fallback_window_threshold);
+
        $inhibit_beep = Irssi::settings_get_bool('ctrlact_inhibit_beep');
        $autosave = Irssi::settings_get_bool('ctrlact_autosave');
 }
@@ -219,8 +236,6 @@ my %THRESHOLDARRAYS = ('window'  => \@window_thresholds,
                 'query'   => \@query_thresholds
                );
 
-my @DATALEVEL_KEYWORDS = ('all', 'messages', 'hilights', 'none');
-
 my %OWN_ACTIVITY = ();
 
 ### HELPERS ####################################################################
@@ -295,13 +310,31 @@ sub to_data_level {
        return $ret
 }
 
+sub is_data_level {
+       my ($dl) = @_;
+       return $dl =~ /^[1-4]$/;
+}
+
 sub from_data_level {
        my ($dl) = @_;
-       if ($dl =~ /^[1-4]$/) {
+       if (is_data_level($dl)) {
                return $DATALEVEL_KEYWORDS[$dl-1];
        }
 }
 
+sub get_data_level {
+       my ($data) = @_;
+       if (is_data_level($data)) {
+               return $data;
+       }
+       elsif((my $dl = to_data_level($data)) > 0) {
+               return $dl;
+       }
+       else {
+               error("Invalid data level: $data");
+       }
+}
+
 sub walk_match_array {
        my ($name, $net, $type, $arr) = @_;
        foreach my $rule (@{$arr}) {
git clone https://git.99rst.org/PROJECT