patch set part 1 attached
Quoting Pete Beardmore <[email protected]>:
Quoting [email protected]:
Your mail to 'get_iplayer' with the subject
Re: web-settings-and-get_iplayer-defaults-harmonisation
Is being held until the list moderator can review it for approval.
The reason it is being held:
Message body is too big: 87651 bytes with a limit of 40 KB
hello,
my post has been in limbo a few days now. could a list moderator
please push it through? or would it be better to split the mail?
thanks,
Pete.
_______________________________________________
get_iplayer mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/get_iplayer
>From 4b0c96cc5922514eb63f4b34b497b113e970f224 Mon Sep 17 00:00:00 2001
From: Pete Beardmore <[email protected]>
Date: Sat, 13 Apr 2013 16:11:18 +0100
Subject: [PATCH] fix checkboxes. deselect selected instead of disabling
---
get_iplayer.cgi | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/get_iplayer.cgi b/get_iplayer.cgi
index 6bbad3d..ce9d980 100755
--- a/get_iplayer.cgi
+++ b/get_iplayer.cgi
@@ -3101,7 +3101,7 @@ sub search_progs {
{
-class => 'action',
-title => 'Queue selected programmes (or Quick URL) for one-off recording',
- -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='pvr_queue'; form.submit(); RestoreFormVars(form); form.URL.value=''; disable_selected_checkboxes(document.form, 'PROGSELECT');",
+ -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='pvr_queue'; form.submit(); RestoreFormVars(form); form.URL.value=''; checkbox_toggle(document.form, 'PROGSELECT');",
},
'Queue'
);
@@ -3109,7 +3109,7 @@ sub search_progs {
{
-class => 'action',
-title => 'Immediately Record selected programmes (or Quick URL) in a new tab',
- -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='record_now'; var random=Math.floor(Math.random()*99999); form.target='_newtab_'+random; form.submit(); RestoreFormVars(form); form.target=''; form.URL.value=''; disable_selected_checkboxes(document.form, 'PROGSELECT');",
+ -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='record_now'; var random=Math.floor(Math.random()*99999); form.target='_newtab_'+random; form.submit(); RestoreFormVars(form); form.target=''; form.URL.value=''; checkbox_toggle(document.form, 'PROGSELECT');",
},
'Record'
);
--
1.7.4.4
>From 4756b32b57ac9d994b5155e1c1caeff67998d23e Mon Sep 17 00:00:00 2001
From: Pete Beardmore <[email protected]>
Date: Sat, 13 Apr 2013 16:16:09 +0100
Subject: [PATCH] fix javascript for hidden elements created by perl < 5.8.5
---
get_iplayer.cgi | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/get_iplayer.cgi b/get_iplayer.cgi
index ce9d980..f7de953 100755
--- a/get_iplayer.cgi
+++ b/get_iplayer.cgi
@@ -4088,7 +4088,9 @@ sub insert_javascript {
for(var i = 0; i < tabs.length; i++) {
var li = document.getElementById( 'li_' + tabs[i] );
var tab = document.getElementById( 'tab_' + tabs[i] );
- var option = document.getElementById( 'option_' + tabs[i] );
+EOF
+ print $fh " var option = document.". ( $] < 5.008005 ? "getElementsByName( tabs[i] )[0];" : "getElementById( 'option_' + tabs[i] );") . "\n";
+ print $fh <<EOF;
var button = document.getElementById( 'button_' + tabs[i] );
if ( tab == selected_tab ) {
tab.style.display = 'table-cell';
--
1.7.4.4
>From edca55a694bc6b7cf1be93a6422ad252be8aedeb Mon Sep 17 00:00:00 2001
From: Pete Beardmore <[email protected]>
Date: Sat, 13 Apr 2013 16:41:43 +0100
Subject: [PATCH] web pvr don't process return status from non-existant
zombies
---
get_iplayer.cgi | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/get_iplayer.cgi b/get_iplayer.cgi
index f7de953..e41cb54 100755
--- a/get_iplayer.cgi
+++ b/get_iplayer.cgi
@@ -1685,7 +1685,8 @@ sub get_cmd_output {
#my $to = new IO::Handle;
my $from = new IO::Handle;
my $error = new IO::Handle;
- my $rtn;
+ my $rtn_val;
+ my $rtn_code;
my @out_from;
my @out_error;
@@ -1746,18 +1747,24 @@ sub get_cmd_output {
print $se "ERROR: Could not fork STDERR reader process\n";
exit 1;
}
- waitpid( $childpid, 0 );
- waitpid( $procid, 0 );
- $rtn = $?;
+ $rtn_val = waitpid( $childpid, 0 );
+ $rtn_code = $?;
+ #print "\nDEBUG: childpid rtn_val: '" . $rtn_val . "', rtn_code: '" . $rtn_val . "'\n";
+ $rtn_val = waitpid( $procid, 0 );
+ $rtn_code = $?;
+ #print "\nDEBUG: procid rtn_val: '" . $rtn_val . "', rtn_code: '" . $rtn_val . "'\n";
+ #print "\nDEBUG: out_from#: '" . scalar(@out_from) . "'\n";
+ #don't process return status when the zombie process has disappeared
+ $rtn_code = 0 if ( $rtn_val == -1 && scalar(@out_from) > 0 );
# Restore sigpipe handler for reader and writer processes
$SIG{PIPE} = 'DEFAULT';
}
- # Interpret return code
- interpret_return_code( $rtn );
-
+ # Interpret return status code
+ interpret_return_code( $rtn_code );
+
return @out_from;
}
--
1.7.4.4
>From 9595e5be38d025abd6c5307a4388e58908b4986d Mon Sep 17 00:00:00 2001
From: Pete Beardmore <[email protected]>
Date: Sun, 14 Apr 2013 15:13:13 +0100
Subject: [PATCH] web settings and get_iplayer defaults harmonisation
---
get_iplayer | 1 +
get_iplayer.cgi | 247 ++++++++++++++++++++++++++++++++++---------------------
2 files changed, 153 insertions(+), 95 deletions(-)
diff --git a/get_iplayer b/get_iplayer
index 5451ac9..4210e7c 100755
--- a/get_iplayer
+++ b/get_iplayer
@@ -142,6 +142,7 @@ my $opt_format = {
thumbonly => [ 1, "thumbonly|thumbnailonly|thumbnail-only|thumb-only!", 'Recording', '--thumbnail-only', "Only Download Thumbnail image if available, not the programme"],
aactomp3 => [ 1, "aactomp3", 'Recording', '--aactomp3', "Transcode AAC audio to MP3 with ffmpeg (CBR 128k unless --mp3vbr is specified)"],
mp3vbr => [ 1, "mp3vbr=n", 'Recording', '--mp3vbr', "Set LAME VBR mode to N (0 to 9) for AAC transcoding. 0 = target bitrate 245 Kbit/s, 9 = target bitrate 65 Kbit/s (requires --aactomp3)"],
+ holdoff => [ 1, "holdoff=n", 'Recording', '--before', "Wait this number of hours before allowing the PVR to record a programme [webpvr only]"],
# Search
before => [ 1, "before=n", 'Search', '--before', "Limit search to programmes added to the cache before N hours ago"],
diff --git a/get_iplayer.cgi b/get_iplayer.cgi
index e41cb54..1b335dc 100755
--- a/get_iplayer.cgi
+++ b/get_iplayer.cgi
@@ -85,11 +85,7 @@ EOF
exit 1;
}
-
-# Some defaults
-my $default_modes = 'flashaachigh,flashaacstd,flash,realaudio,flashaaclow';
-$opt_cmdline->{listen} = '0.0.0.0' if ! $opt_cmdline->{listen};
-# Search for get_iplayer
+# ensure get_iplayer
if ( ! $opt_cmdline->{getiplayer} ) {
for ( './get_iplayer', './get_iplayer.cmd', './get_iplayer.pl', '/usr/bin/get_iplayer' ) {
$opt_cmdline->{getiplayer} = $_ if -x $_;
@@ -99,18 +95,6 @@ if ( ( ! $opt_cmdline->{getiplayer} ) || ! -f $opt_cmdline->{getiplayer} ) {
print "ERROR: Cannot find get_iplayer, please specify its location using the --getiplayer option.\n";
exit 2;
}
-if ( ! $opt_cmdline->{ffmpeg} ) {
- chomp(my @ffmpegs = map { s/^\s*ffmpeg\s*=\s*// ? $_ : () }
- get_cmd_output(
- $opt_cmdline->{getiplayer},
- '--nopurge',
- '--nocopyright',
- '--show-options'
- )
- );
- $opt_cmdline->{ffmpeg} = pop @ffmpegs;
-}
-$opt_cmdline->{ffmpeg} = 'ffmpeg' if ! $opt_cmdline->{ffmpeg};
# Path to get_iplayer (+ set HOME env var cos apache seems to not set it)
my $home = $ENV{HOME};
@@ -142,9 +126,6 @@ my @headings = qw(
mode
);
-# Default Displayed headings
-my @headings_default = qw( thumbnail type name episode desc channel categories timeadded );
-
# Lookup table for nice field name headings
my %fieldname = (
index => 'Index',
@@ -236,9 +217,10 @@ my %nextpages = (
'update_script' => \&update_script,
);
-
-
-##### Options #####
+# default options
+my %opt_default;
+set_default_options();
+# state options
my $opt;
# Options Layout on page tabs
@@ -269,20 +251,17 @@ $layout->{STREAMINGTAB}->{order} = [ qw/ BITRATE VSIZE VFR STREAMTYPE / ];
$layout->{HIDDENTAB}->{title} = '';
$layout->{HIDDENTAB}->{heading} = '';
-$layout->{HIDDENTAB}->{order} = [ qw/ SAVE SEARCHTAB COLUMNSTAB DISPLAYTAB RECORDINGTAB STREAMINGTAB PAGENO INFO NEXTPAGE ACTION / ];
+$layout->{HIDDENTAB}->{order} = [ qw/ RESET SAVE SEARCHTAB COLUMNSTAB DISPLAYTAB RECORDINGTAB STREAMINGTAB PAGENO INFO NEXTPAGE ACTION / ];
# Order of displayed tab buttoms (BASICTAB and HIDDEN are always displayed regardless of order)
$layout->{taborder} = [ qw/ BASICTAB SEARCHTAB DISPLAYTAB COLUMNSTAB RECORDINGTAB STREAMINGTAB HIDDENTAB / ];
-# Any params that should never get into the get_iplayer pvr-add search
-my @nosearch_params = qw/ /;
-
### Perl CGI Web Server ###
use Socket;
use IO::Socket;
my $IGNOREEXIT = 0;
# If the port number is specified then run embedded web server
-if ( $opt_cmdline->{port} > 0 ) {
+if ( $opt_default{port} > 0 ) {
# Autoreap zombies
$SIG{CHLD} = 'IGNORE';
# Need this because with $SIG{CHLD} = 'IGNORE', backticks and systems calls always return -1
@@ -291,14 +270,14 @@ if ( $opt_cmdline->{port} > 0 ) {
# Setup and create socket
my $server = new IO::Socket::INET(
Proto => 'tcp',
- LocalAddr => $opt_cmdline->{listen},
- LocalPort => $opt_cmdline->{port},
+ LocalAddr => $opt_default{listen},
+ LocalPort => $opt_default{port},
Listen => SOMAXCONN,
Reuse => 1,
);
$server or die "Unable to create server socket: $!";
- print $se "INFO: Listening on $opt_cmdline->{listen}:$opt_cmdline->{port}\n";
- print $se "WARNING: Insecure Remote access is allowed, use --listen=127.0.0.1 to limit to this host only\n" if $opt_cmdline->{listen} ne '127.0.0.1';
+ print $se "INFO: Listening on $opt_default{listen}:$opt_default{port}\n";
+ print $se "WARNING: Insecure Remote access is allowed, use --listen=127.0.0.1 to limit to this host only\n" if $opt_default{listen} ne '127.0.0.1';
# Await requests and handle them as they arrive
while (my $client = $server->accept()) {
my $procid = fork();
@@ -366,12 +345,14 @@ if ( $opt_cmdline->{port} > 0 ) {
# remove any vars that might affect the CGI
#%ENV = ();
@ARGV = ();
+ # ensure default options in forks
+ set_default_options() if defined $query_string;
# Setup CGI http vars
print $se "QUERY_STRING = $query_string\n" if defined $query_string;
$ENV{'QUERY_STRING'} = $query_string;
$ENV{'REQUEST_URI'} = $request{URL};
$ENV{'COOKIE'} = $request{cookie};
- $ENV{'SERVER_PORT'} = $opt_cmdline->{port};
+ $ENV{'SERVER_PORT'} = $opt_default{port};
# respond OK to browser
print $client "HTTP/1.1 200 OK", Socket::CRLF;
# Invoke CGI
@@ -430,7 +411,35 @@ sub cleanup {
exit 0;
}
-
+sub set_default_options {
+ # source get_iplayer file options
+ %opt_default = ( %opt_default, map { m/.*=+.*/ ? s/^\s*(.*?)\s*=\s*(.*?)\s*\n/\1=\2/ && split "=" : () }
+ get_cmd_output($opt_cmdline->{getiplayer}, '--nopurge', '--nocopyright', '--show-options'));
+ # ensure defaults
+ $opt_default{listen} = '0.0.0.0';
+ $opt_default{port} = 0;
+ $opt_default{nosearch} = ''; # params that should never get into the get_iplayer pvr-add search
+ $opt_default{ffmpeg} = 'ffmpeg' if not defined $opt_default{ffmpeg};
+ $opt_default{versionlist} = 'default' if not defined $opt_default{versionlist};
+ $opt_default{search} = '.*' if not defined $opt_default{search};
+ $opt_default{fields} = 'name' if not defined $opt_default{fields};
+ $opt_default{type} = 'tv' if not defined $opt_default{type};
+ $opt_default{history} = 0 if not defined $opt_default{history};
+ $opt_default{hide} = 0 if not defined $opt_default{hide};
+ $opt_default{pagesize} = 25 if not defined $opt_default{pagesize};
+ $opt_default{cols} = 'thumbnail,type,name,episode,desc,channel,categories,timeadded';
+ $opt_default{modes} = 'flashaachigh,flashaacstd,flashaudio,flashhigh,flashstd,flashnormal,realaudio,flashaaclow' if not defined $opt_default{modes};
+ $opt_default{subtitles} = 0 if not defined $opt_default{subtitles};
+ $opt_default{thumb} = 0 if not defined $opt_default{thumb};
+ $opt_default{force} = 0 if not defined $opt_default{force};
+ $opt_default{autowebrefresh} = 1 if not defined $opt_default{autowebrefresh};
+ $opt_default{autopvrrun} = 4 if not defined $opt_default{autopvrrun};
+ $opt_default{refreshfuture} = 0 if not defined $opt_default{refreshfuture};
+ # ensure command line overrides
+ $opt_default{listen} = $opt_cmdline->{listen} if defined $opt_cmdline->{listen};
+ $opt_default{port} = $opt_cmdline->{port} if defined $opt_cmdline->{port};
+ $opt_default{ffmpeg} = $opt_cmdline->{ffmpeg} if defined $opt_cmdline->{ffmpeg};
+}
sub parse_post_form_string {
my $form = $_[0];
@@ -822,7 +831,7 @@ sub record_now {
sub stream_prog {
my ( $mimetype, $pid , $type, $modes, $ext, $notranscode, $abitrate, $vsize, $vfr ) = ( @_ );
# Default modes to try
- $modes = $default_modes if ! $modes;
+ $modes = $opt_default{modes} if ! $modes;
print $se "INFO: Start Streaming $pid to browser using modes '$modes', output ext '$ext', audio bitrate '$abitrate', video size '$vsize', video frame rate '$vfr'\n";
@@ -966,7 +975,7 @@ sub build_ffmpeg_args {
}
@cmd = (
- $opt_cmdline->{ffmpeg},
+ $opt_default{ffmpeg},
#'-f', $src_ext, # not required?
'-i', $filename,
@cmd_aopts,
@@ -977,7 +986,7 @@ sub build_ffmpeg_args {
# Audio
} else {
@cmd = (
- $opt_cmdline->{ffmpeg},
+ $opt_default{ffmpeg},
#'-f', $src_ext, # not required?
'-i', $filename,
'-vn',
@@ -2194,7 +2203,7 @@ sub show_info {
{
-class => 'action',
-title => "Play '$prog{$pid}->{name} - $prog{$pid}->{episode}' Now",
- -href => build_url_playlist( '', 'playlist', 'pid', $pid, $prog{$pid}->{mode} || $default_modes, $prog{$pid}->{type}, $cgi->param( 'OUTTYPE' ) || 'out.flv', $cgi->param( 'STREAMTYPE' ), $cgi->param( 'BITRATE' ), $cgi->param( 'VSIZE' ), $cgi->param( 'VFR' ) ),
+ -href => build_url_playlist( '', 'playlist', 'pid', $pid, $prog{$pid}->{mode} || $opt_default{modes}, $prog{$pid}->{type}, $cgi->param( 'OUTTYPE' ) || 'out.flv', $cgi->param( 'STREAMTYPE' ), $cgi->param( 'BITRATE' ), $cgi->param( 'VSIZE' ), $cgi->param( 'VFR' ) ),
},
'Play'
),
@@ -2452,8 +2461,11 @@ sub build_cmd_options {
for ( @_ ) {
# skip non-options
next if $opt->{$_}->{optkey} eq '' || not defined $opt->{$_}->{optkey} || not $opt->{$_}->{optkey};
- my $value = $opt->{$_}->{current};
- push @options, "$opt->{$_}->{optkey}=$value" if $value ne '';
+ my $option = "$opt->{$_}->{optkey}=$opt->{$_}->{current}" if $opt->{$_}->{current} ne '';
+ # overrides
+ $option =~ s/^holdoff/before/;
+ # add option
+ push @options, $option if $option ne '';
}
return @options;
}
@@ -2465,7 +2477,7 @@ sub get_search_params {
for ( keys %{ $opt } ) {
# skip non-options
next if $opt->{$_}->{optkey} eq '' || not defined $opt->{$_}->{optkey} || not $opt->{$_}->{optkey};
- next if grep /^$_$/, @nosearch_params;
+ next if grep /^$_$/, split(/,/, $opt_default{nosearch});
push @params, $_;
}
return @params;
@@ -2886,7 +2898,7 @@ sub search_progs {
if ( $pid =~ m{^/} ) {
if ( -f $pid ) {
# Play
- $links .= a( { -class=>$search_class, -title=>"Play from file on web server", -href=>build_url_playlist( '', 'playlist', 'pid', $pid, $opt->{MODES}->{current} || $default_modes, $prog{$pid}->{type}, basename( $pid ) , $opt->{STREAMTYPE}->{current}, $opt->{BITRATE}->{current}, $opt->{VSIZE}->{current}, $opt->{VFR}->{current} ) }, 'Play' ).'<br />';
+ $links .= a( { -class=>$search_class, -title=>"Play from file on web server", -href=>build_url_playlist( '', 'playlist', 'pid', $pid, $opt->{MODES}->{current} || $opt_default{modes}, $prog{$pid}->{type}, basename( $pid ) , $opt->{STREAMTYPE}->{current}, $opt->{BITRATE}->{current}, $opt->{VSIZE}->{current}, $opt->{VFR}->{current} ) }, 'Play' ).'<br />';
# PlayFile
$links .= a( { -id=>'nowrap', -class=>$search_class, -title=>"Play from local file", -href=>build_url_playlist( '', 'playlistfiles', 'pid', $pid, $prog{$pid}->{mode}, $prog{$pid}->{type}, undef, undef ) }, 'PlayFile' ).'<br />';
# PlayDirect
@@ -2905,7 +2917,7 @@ sub search_progs {
# Search mode
} else {
# Play
- $links .= a( { -class=>$search_class, -title=>"Play from Internet", -href=>build_url_playlist( '', 'playlist', 'pid', $pid, $opt->{MODES}->{current} || $default_modes, $prog{$pid}->{type}, 'out.flv', $opt->{STREAMTYPE}->{current}, $opt->{BITRATE}->{current}, $opt->{VSIZE}->{current}, $opt->{VFR}->{current} ) }, 'Play' ).'<br />';
+ $links .= a( { -class=>$search_class, -title=>"Play from Internet", -href=>build_url_playlist( '', 'playlist', 'pid', $pid, $opt->{MODES}->{current} || $opt_default{modes}, $prog{$pid}->{type}, 'out.flv', $opt->{STREAMTYPE}->{current}, $opt->{BITRATE}->{current}, $opt->{VSIZE}->{current}, $opt->{VFR}->{current} ) }, 'Play' ).'<br />';
# Record
$links .= label( { -id=>'nowrap', -class=>$search_class, -title=>"Record '$prog{$pid}->{name} - $prog{$pid}->{episode}' Now", -onClick => "BackupFormVars(form); form.NEXTPAGE.value='record_now'; form.SEARCH.value='".encode_entities("$prog{$pid}->{type}|$pid|$prog{$pid}->{name}|$prog{$pid}->{episode}|$prog{$pid}->{mode}")."'; form.target='_newtab_$pid'; form.submit(); RestoreFormVars(form); form.target='';" }, 'Record' ).'<br />';
# Queue
@@ -3034,7 +3046,7 @@ sub search_progs {
)
}
- # add a save button on to end of list
+ # add apply/store/reset buttons to end of list
my $options_buttons = ul( { -class=>'options_tab' },
li( { -class=>'options_button' }, [
# Apply button (same as 'Search')
@@ -3043,15 +3055,23 @@ sub search_progs {
-title => 'Apply Current Options',
-onClick => "BackupFormVars(form); form.NEXTPAGE.value='search_progs'; form.PAGENO.value=1; form.submit(); RestoreFormVars(form);",
},
- 'Apply Settings',
+ 'Apply Changes',
),
- # Save as Default button
+ # Update Cookies button
label( {
-class => 'options_outer pointer_noul',
- -title => 'Remember Current Options as Default',
+ -title => 'Save Current Non-Default Options as Cookies',
-onClick => "BackupFormVars(form); form.SAVE.value=1; form.submit(); RestoreFormVars(form);",
},
- 'Save As Default',
+ 'Update Cookies',
+ ),
+ # Reset to Defaults button
+ label( {
+ -class => 'options_outer pointer_noul',
+ -title => 'Clear Cookies and Reset Current Options to Defaults',
+ -onClick => "form.NEXTPAGE.value='search_progs'; form.PAGENO.value=1; form.RESET.value=1; form.submit(); BackupFormVars(form);",
+ },
+ 'Reset to Defaults',
),
] )
);
@@ -3108,7 +3128,7 @@ sub search_progs {
{
-class => 'action',
-title => 'Queue selected programmes (or Quick URL) for one-off recording',
- -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='pvr_queue'; form.submit(); RestoreFormVars(form); form.URL.value=''; checkbox_toggle(document.form, 'PROGSELECT');",
+ -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='pvr_queue'; form.submit(); RestoreFormVars(form); form.URL.value=''; check_toggle(document.form, 'PROGSELECT');",
},
'Queue'
);
@@ -3116,7 +3136,7 @@ sub search_progs {
{
-class => 'action',
-title => 'Immediately Record selected programmes (or Quick URL) in a new tab',
- -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='record_now'; var random=Math.floor(Math.random()*99999); form.target='_newtab_'+random; form.submit(); RestoreFormVars(form); form.target=''; form.URL.value=''; checkbox_toggle(document.form, 'PROGSELECT');",
+ -onClick => "if(! ( check_if_selected(document.form, 'PROGSELECT') || form.URL.value ) ) { alert('No Quick URL or programmes were selected'); return false; } BackupFormVars(form); form.SEARCH.value=''; form.NEXTPAGE.value='record_now'; var random=Math.floor(Math.random()*99999); form.target='_newtab_'+random; form.submit(); RestoreFormVars(form); form.target=''; form.URL.value=''; check_toggle(document.form, 'PROGSELECT');",
},
'Record'
);
@@ -3368,14 +3388,12 @@ sub get_display_cols {
# Set default status for columns options tab checkboxes
my %cols_status;
- # Add some default headings for history mode
- push @headings_default, 'mode' if $opt->{HISTORY}->{current};
-
- # Determine which columns to display (all if $cols not defined)
- my $cols = join(",", $opt->{COLS}->{current} ) || join ',', @headings_default;
- my @columns = split /,/, $cols;
+ # set columns to display, add to default headings for history mode
+ my $cols = join(",", $opt->{COLS}->{current} ) ||
+ join(",", $opt_default{cols}, $opt->{HISTORY}->{current} ? 'mode' : '');
# Re-sort selected display columns into original header order
+ my @columns = split /,/, $cols;
for my $heading (@headings) {
if ( grep /^$heading$/, @columns ) {
# Remove display of mode and filename if not history mode
@@ -3389,7 +3407,7 @@ sub get_display_cols {
}
# Make sure we select all if no cols are specified
- @displaycols = @headings_default if $#displaycols < 0;
+ @displaycols = split(/,/, $opt_default{cols}) if $#displaycols < 0;
# Set defaults for checkboxes
$opt->{COLS}->{status} = \%cols_status;
@@ -3503,7 +3521,7 @@ sub process_params {
webvar => 'SEARCH', # webvar
optkey => 'search', # option key
type => 'text', # type
- default => '.*', # default
+ default => $opt_default{search}, # default
value => 20, # width values
save => 0,
};
@@ -3512,8 +3530,9 @@ sub process_params {
title => 'Quick URL', # Title
tooltip => "Enter your URL for Recording (then click 'Record' or 'Play')", # Tooltip
webvar => 'URL', # webvar
+ optkey => 'url', # option key
type => 'text', # type
- default => '', # default
+ default => $opt_default{url}, # default
value => 36, # width values
save => 0,
};
@@ -3525,7 +3544,7 @@ sub process_params {
optkey => 'fields', # option
type => 'popup', # type
label => \%fieldname, # labels
- default => 'name', # default
+ default => $opt_default{fields}, # default
value => [ (@headings,'name,episode','name,episode,desc') ], # values
save => 1,
};
@@ -3534,8 +3553,9 @@ sub process_params {
title => 'Programmes per Page', # Title
tooltip => 'Select the number of search results displayed on each page', # Tooltip
webvar => 'PAGESIZE', # webvar
+ optkey => 'pagesize', # option
type => 'popup', # type
- default => 20, # default
+ default => $opt_default{pagesize}, # default
value => ['10','25','50','100','200','400'], # values
onChange=> "BackupFormVars(form); form.NEXTPAGE.value='search_progs'; form.PAGENO.value=1; form.submit(); RestoreFormVars(form);",
save => 1,
@@ -3570,7 +3590,7 @@ sub process_params {
optkey => 'type', # option
type => 'multiboolean', # type
label => \%prog_types, # labels
- default => 'tv',
+ default => $opt_default{type},
#status => \%type, # default status
value => \%prog_types_order, # order of values
save => 1,
@@ -3582,18 +3602,19 @@ sub process_params {
webvar => 'MODES', # webvar
optkey => 'modes', # option
type => 'text', # type
- default => 'flashaachigh,flashaacstd,flashaudio,flashhigh,flashstd,flashnormal,realaudio,flashaaclow', # default
+ default => $opt_default{modes},
value => 30, # width values
save => 1,
+ empty => 0, # disallow empty string
};
$opt->{OUTPUT} = {
- title => 'Override Recordings Folder', # Title
+ title => 'Output Folder', # Title
tooltip => 'Folder on the server where recordings should be saved', # Tooltip
webvar => 'OUTPUT', # webvar
optkey => 'output', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{output}, # default
value => 30, # width values
save => 1,
};
@@ -3604,7 +3625,7 @@ sub process_params {
webvar => 'PROXY', # webvar
optkey => 'proxy', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{proxy}, # default
value => 30, # width values
save => 1,
};
@@ -3615,7 +3636,7 @@ sub process_params {
webvar => 'VERSIONLIST', # webvar
optkey => 'versionlist', # option
type => 'text', # type
- default => 'default', # default
+ default => $opt_default{versionlist}, # default
value => 30, # width values
save => 1,
};
@@ -3626,7 +3647,7 @@ sub process_params {
webvar => 'EXCLUDE', # webvar
optkey => 'exclude', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{exclude}, # default
value => 30, # width values
save => 1,
};
@@ -3637,7 +3658,7 @@ sub process_params {
webvar => 'CATEGORY', # webvar
optkey => 'category', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{category}, # default
value => 30, # width values
save => 1,
};
@@ -3648,7 +3669,7 @@ sub process_params {
webvar => 'EXCLUDECATEGORY', # webvar
optkey => 'excludecategory', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{excludecategory}, # default
value => 30, # width values
save => 1,
};
@@ -3659,7 +3680,7 @@ sub process_params {
webvar => 'CHANNEL', # webvar
optkey => 'channel', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{channel}, # default
value => 30, # width values
save => 1,
};
@@ -3670,7 +3691,7 @@ sub process_params {
webvar => 'EXCLUDECHANNEL', # webvar
optkey => 'excludechannel', # option
type => 'text', # type
- default => '', # default
+ default => $opt_default{excludechannel}, # default
value => 30, # width values
save => 1,
};
@@ -3681,7 +3702,7 @@ sub process_params {
webvar => 'HIDE', # webvar
optkey => 'hide', # option
type => 'radioboolean', # type
- default => '0', # value
+ default => $opt_default{hide}, # value
save => 1,
};
@@ -3691,7 +3712,7 @@ sub process_params {
webvar => 'FORCE', # webvar
optkey => 'force', # option
type => 'radioboolean', # type
- default => '0', # value
+ default => $opt_default{force}, # value
save => 1,
};
@@ -3701,7 +3722,7 @@ sub process_params {
webvar => 'REFRESHFUTURE', # webvar
optkey => 'refreshfuture', # option
type => 'radioboolean', # type
- default => '0', # value
+ default => $opt_default{refreshfuture}, # value
save => 1,
};
@@ -3714,7 +3735,7 @@ sub process_params {
type => 'popup', # type
#label => \%fieldname, # labels
label => \%metadata_labels, # labels
- default => '', # default
+ default => $opt_default{metadata}, # default
value => [ ( '', 'xbmc', 'xbmc_movie', 'generic', 'freevo' ) ], # values
save => 1,
};
@@ -3725,7 +3746,7 @@ sub process_params {
webvar => 'SUBTITLES', # webvar
optkey => 'subtitles', # option
type => 'radioboolean', # type
- default => '0', # value
+ default => $opt_default{subtitles}, # value
save => 1,
};
@@ -3735,7 +3756,7 @@ sub process_params {
webvar => 'THUMB', # webvar
optkey => 'thumb', # option
type => 'radioboolean', # type
- default => '0', # value
+ default => $opt_default{thumb}, # value
save => 1,
};
@@ -3743,8 +3764,9 @@ sub process_params {
title => 'Auto-Refresh Cache Interval', # Title
tooltip => 'Automatically refresh the default caches in another browser tab (hours)', # Tooltip
webvar => 'AUTOWEBREFRESH', # webvar
+ optkey => 'autowebrefresh', # option
type => 'text', # type
- default => 1, # default
+ default => $opt_default{autowebrefresh}, # default
value => 3, # width values
save => 1,
};
@@ -3753,8 +3775,9 @@ sub process_params {
title => 'Auto-Run PVR Interval', # Title
tooltip => 'Automatically run the PVR in another browser tab (hours)', # Tooltip
webvar => 'AUTOPVRRUN', # webvar
+ optkey => 'autopvrrun', # option
type => 'text', # type
- default => 4, # default
+ default => $opt_default{autopvrrun}, # default
value => 3, # width values
save => 1,
};
@@ -3765,7 +3788,7 @@ sub process_params {
webvar => 'HISTORY', # webvar
optkey => 'history', # option
type => 'boolean', # type
- default => '0', # value
+ default => $opt_default{history}, # value
save => 0,
};
@@ -3786,7 +3809,7 @@ sub process_params {
optkey => 'since', # option
type => 'text', # type
value => 3, # width values
- default => '',
+ default => $opt_default{since},
save => 1,
};
@@ -3797,7 +3820,7 @@ sub process_params {
optkey => 'before', # option
type => 'text', # type
value => 3, # width values
- default => '',
+ default => $opt_default{before},
save => 1,
};
@@ -3805,10 +3828,10 @@ sub process_params {
title => 'PVR Hold off period (hours)', # Title
tooltip => 'Wait this number of hours before allowing the PVR to record a programme. This sometimes helps when the flashhd version is delayed in being made available.', # Tooltip
webvar => 'PVRHOLDOFF', # webvar
- optkey => 'before', # option
+ optkey => 'holdoff', # option
type => 'text', # type
value => 3, # width values
- default => '',
+ default => $opt_default{holdoff},
save => 1,
};
@@ -3878,6 +3901,7 @@ sub process_params {
label => \%cols_names, # labels
#status => \%cols_status, # default status
value => \%cols_order, # order of values
+ default => $opt_default{cols},
save => 1,
};
@@ -3905,7 +3929,7 @@ sub process_params {
save => 0,
};
- # Remeber the status of the tab options display
+ # Remember the status of the tab options display
for my $tabname ( grep !/BASICTAB/, @{ $layout->{taborder} } ) {
my $default = 'no';
# By default only show advanced search tab
@@ -3926,6 +3950,14 @@ sub process_params {
save => 0,
};
+ # Reset the Advanced Search options and preferences settings to defaults / remove cookies
+ $opt->{RESET} = {
+ webvar => 'RESET', # webvar
+ type => 'hidden', # type
+ default => '0', # value
+ save => 0,
+ };
+
# INFO for page info if clicked
$opt->{INFO} = {
webvar => 'INFO',
@@ -3937,8 +3969,22 @@ sub process_params {
# Go through each of the options defined above
for ( keys %{ $opt } ) {
- # Ignore cookies if we are saving new ones
- if ( not $cgi->param('SAVE') ) {
+ if ( defined $cgi->param($_) && $cgi->param($_) eq '' &&
+ defined $opt->{$_}->{empty} && $opt->{$_}->{empty} == 0 ) {
+ $cgi->param($_, $opt->{$_}->{default}); # no empty string allowed for this option
+ }
+ if ( $cgi->param('SAVE') ) {
+ # Ignore cookies if we are saving new ones
+ $opt->{$_}->{current} = join(",", $cgi->param($_) ) || $opt->{$_}->{default} if not defined $opt->{$_}->{current};
+ } elsif ( $cgi->param('RESET') ) {
+ # Set current back to default
+ if ( $_ =~ m/ACTION|PAGENO|NEXTPAGE|TAB|RESET|SAVE$/ ) {
+ $opt->{$_}->{current} = $cgi->param($_) if defined $cgi->param($_);
+ } else {
+ $cgi->param($_, $opt->{$_}->{default});
+ $opt->{$_}->{current} = $opt->{$_}->{default};
+ }
+ } else {
if ( defined $cgi->param($_) ) {
print $se "DEBUG: GOT Param $_ = ".$cgi->param($_)."\n" if $opt_cmdline->{debug};
$opt->{$_}->{current} = join ",", $cgi->param($_);
@@ -3949,9 +3995,6 @@ sub process_params {
$opt->{$_}->{current} = join ",", $opt->{$_}->{default};
}
print $se "DEBUG: Using $_ = $opt->{$_}->{current}\n--\n" if $opt_cmdline->{debug};
-
- } else {
- $opt->{$_}->{current} = join(",", $cgi->param($_) ) || $opt->{$_}->{default} if not defined $opt->{$_}->{current};
}
}
}
@@ -3969,20 +4012,34 @@ sub process_params {
sub begin_html {
my $request_host = shift;
my $mimetype = 'text/html';
-
- # Save settings if selected
+
+ # save or reset settings
my @cookies;
if ( $cgi->param('SAVE') ) {
print $se "DEBUG: Sending cookies\n";
for ( %{ $opt } ) {
# skip if opt not allowed to be saved
next if not $opt->{$_}->{save};
- my $cookie = $cgi->cookie( -name=>$_, -value=>$opt->{$_}->{current}, -expires=>'+1y' );
+ # ensure cookie for none default settings only
+ my $cookie;
+ if ( $opt->{$_}->{current} ne $opt->{$_}->{default} ) {
+ $cookie = $cgi->cookie( -name=>$_, -value=>$opt->{$_}->{current}, -expires=>'+1y' );
+ print $se "DEBUG: Sending cookie: $cookie\n" if $opt_cmdline->{debug};
+ } else {
+ $cookie = $cgi->cookie( -name=>$_, -value=>'', -expires=>'-1s' );
+ }
push @cookies, $cookie;
- print $se "DEBUG: Sending cookie: $cookie\n" if $opt_cmdline->{debug};
}
# Ensure SAVE state is reset to off
$opt->{SAVE}->{current} = 0;
+ } elsif ( $cgi->param('RESET') ) {
+ print $se "DEBUG: Deleting cookies\n";
+ for ( %{ $opt } ) {
+ my $cookie = $cgi->cookie( -name=>$_, -value=>'', -expires=>'-1s' );
+ push @cookies, $cookie;
+ }
+ # Ensure RESET state is reset to off
+ $opt->{RESET}->{current} = 0;
}
# Send the headers to the browser
--
1.7.4.4
_______________________________________________
get_iplayer mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/get_iplayer