I've posted before about the possibility of having command-line options merge with, rather than overwrite, the same options from the preferences file, called 'options' that lives in a user's GiP profile directory, the most obvious need being to be able to provide *additional* exclude options via the command-line to supplement those already in the 'options' file.

For anyone interested, the following changes to a subroutine allow this to happen, and, in fact, because the same subroutine is used throughout the options hierarchy, it will apply where any option of higher precedence would otherwise overwrite an option of lower precedence. The way it works is, if the option's value begins with '+', then the plus-sign is discarded and the remainder of the option's value is merged with any pre-existing value rather than overwriting it.

It should be noted that it's only meaningful to use it where options consist of comma-separated values. I don't understand the wider options programming well enough to feel confident about suggesting how within GiP to vet against use of a plus-sign on an unsuitable option, but in another program which I use everyday and which calls GiP to download four daily programme lists - HDTV, SDTV, HD Radio, LD Radio (though this latter is rather redundant now) - I simply check whether the option name is contained in a list of options where merging would be valid.

For those who are interested, the changes required to GiP v3.29 to have this happen are as follows:

Line 64, add the following line (you may need to use 'cpan' to install the module beforehand, but I had it already):

use Uniq;

Lines 2674 onwards, alter the subroutine 'sub copy_set_options_from'
to read as follows (beware possible unwanted line wrap):

# Copies values in one instance to another only if they are set with a value/defined
# Usage: $opt->copy_set_options_from( $opt_cmdline );
sub copy_set_options_from {
        my $this_to = shift;
        my $this_from = shift;
        #
        # CEM Change - Merge rather than overwrite
        # higher priority options whose value begins with a '+'
        #
        # Original code:
        # Merge cmdline options into $opt instance (only those options defined)
        # for ( keys %{$this_from} ) {
        #       $this_to->{$_} = $this_from->{$_} if defined $this_from->{$_};
        # }
        #
        # Replacement code:
        for ( keys %{$this_from} ) {
                if( defined($this_from->{$_}) ) {
                        # If 'from' value begins with a plus sign ...
                        if( $this_from->{$_} =~ m/^\+/ ) {
                                # ... its value merges with existing value
$this_to->{$_} = join( ',', Uniq::uniq( sort(split(',',$this_to->{$_}),split(',',substr($this_from->{$_}, 1)) ) ) );
                        } else {
                                # ... else it overwrites existing value
                                $this_to->{$_} = $this_from->{$_};
                        }
                }
        }
}

If anyone's interested, I have a number of other patches to GiP which I regularly apply, some being additions to existing coding, some modifications or replacements of it:

3 different ones in different places which attempt try to fix the BBC's haphazard application of single-quotes and apostrophes by converting them all to the simple ASCII equivalent. I can't help feeling that it shouldn't be necessary to apply the same patch in three different places, but GiP is so convoluted that at the time I was doing this work I was unable to find a single 'pressure point' at which to apply the fix and have it work unfailingly in all circumstances.

1 to leave genuine single quotes and apostrophes, once converted as above, within file names, and to replace colons with ' - '

1 to remove 'Series' and 'Episode' from programme names, leaving just the numbers.

1 to proper (aka camel) case file names

1 to always display the file name that will be used, aka the file-prefix

_______________________________________________
get_iplayer mailing list
get_iplayer@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/get_iplayer

Reply via email to