X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy%2FTask.pm;h=0cbce823e7075e45f7c52cba4cc4fab8703f33c8;hp=1bdd8e43ca8cff14e007a5cc0ce7fb9ed116ea20;hb=ff1581c8d5c72238903702464704d9ba8584bab7;hpb=7ab42fd97d4e0726e483f3685e77ad5f6db9f743 diff --git a/lib/ZOOM/IRSpy/Task.pm b/lib/ZOOM/IRSpy/Task.pm index 1bdd8e4..0cbce82 100644 --- a/lib/ZOOM/IRSpy/Task.pm +++ b/lib/ZOOM/IRSpy/Task.pm @@ -1,4 +1,4 @@ -# $Id: Task.pm,v 1.4 2006-10-25 13:34:56 mike Exp $ +# $Id: Task.pm,v 1.6 2007-05-09 11:30:53 mike Exp $ package ZOOM::IRSpy::Task; @@ -65,16 +65,35 @@ sub run { die "can't run base-class task $this"; } +# In general, this sets the Connection's options to what is in the +# task's option hash and sets the option-hash entry to the +# Connection's old value of the option: this means that calling this +# twice restores the state to how it was before. (That's not quite +# true as its impossible to unset an option that was previously set: +# such options are instead set to the empty string.) +# +# As a special case, options in the task's option-hash whose names +# begin with an asterisk are taken to be persistent: they are set into +# the Connection (with the leading hash removed) and deleted from the +# task's option-hash so that they will NOT be reset the next time this +# function is called. +# sub set_options { my $this = shift(); foreach my $key (sort keys %{ $this->{options} }) { my $value = $this->{options}->{$key}; + my $persistent = ($key =~ s/^\*//); $value = "" if !defined $value; $this->conn()->log("irspy_debug", "$this setting option '$key' -> ", defined $value ? "'$value'" : "undefined"); - $this->{options}->{$key} = $this->conn()->option($key, $value); - #Net::Z3950::ZOOM::connection_option_set($this->conn()->_conn(), $key, $value); + my $old = $this->conn()->option($key, $value); + if ($persistent) { + print "deleting '*$key'
\n"; + delete $this->{options}->{"*$key"} + } else { + $this->{options}->{$key} = $old; + } } }