diff options
Diffstat (limited to 'vdradmind.pl')
-rwxr-xr-x | vdradmind.pl | 66 |
1 files changed, 41 insertions, 25 deletions
diff --git a/vdradmind.pl b/vdradmind.pl index 0ea5177..c56bd95 100755 --- a/vdradmind.pl +++ b/vdradmind.pl @@ -37,6 +37,16 @@ BEGIN { unshift(@INC, $BASENAME . "lib/"); } +my $localemod; +if (eval { require Locale::gettext }) { + $localemod = 'Locale::gettext'; +} elsif (eval { require Locale::Messages }) { + $localemod = 'Locale::Messages'; +} else { + die("Locale::gettext or Locale::Messages is required!\n"); +} +$localemod->import(qw(gettext bindtextdomain textdomain)); + require File::Temp; use CGI qw(:no_debug); @@ -48,7 +58,6 @@ use POSIX ":sys_wait_h", qw(strftime mktime locale_h); use MIME::Base64(); use File::Temp (); use Shell qw(ps); -use Locale::gettext; $SIG{CHLD} = sub { wait }; @@ -139,13 +148,14 @@ $CONFIG{CHANNELS_WANTED_SUMMARY} = ""; # $CONFIG{PROG_SUMMARY_COLS} = 3; -my $VERSION = "0.97-am3.3rc"; +my $VERSION = "0.97-am3.3"; my $SERVERVERSION = "vdradmind/$VERSION"; my $LINVDR = isLinVDR(); my $VDRVERSION = 0; -my($TEMPLATEDIR, $CONFFILE, $LOGFILE, $PIDFILE, $AT_FILENAME, $DONE_FILENAME, $BL_FILENAME); +my($TEMPLATEDIR, $CONFFILE, $LOGFILE, $PIDFILE, $AT_FILENAME, $DONE_FILENAME, $BL_FILENAME, $ETCDIR, $USER_CSS); if(!$SEARCH_FILES_IN_SYSTEM) { + $ETCDIR = "${BASENAME}"; $TEMPLATEDIR = "${BASENAME}template"; $CONFFILE = "${BASENAME}vdradmind.conf"; $LOGFILE = "${BASENAME}$CONFIG{LOGFILE}"; @@ -153,15 +163,18 @@ if(!$SEARCH_FILES_IN_SYSTEM) { $AT_FILENAME = "${BASENAME}vdradmind.at"; $DONE_FILENAME = "${BASENAME}vdradmind.done"; $BL_FILENAME = "${BASENAME}vdradmind.bl"; + $USER_CSS = "${BASENAME}user.css"; bindtextdomain("vdradmin", "${BASENAME}locale"); } else { + $ETCDIR = "/etc/vdradmin"; $TEMPLATEDIR = "/usr/share/vdradmin/template"; - $CONFFILE = "/etc/vdradmin/vdradmind.conf"; $LOGFILE = "/var/log/$CONFIG{LOGFILE}"; $PIDFILE = "/var/run/vdradmind.pid"; - $AT_FILENAME = "/etc/vdradmin/vdradmind.at"; - $DONE_FILENAME = "/etc/vdradmin/vdradmind.done"; - $BL_FILENAME = "/etc/vdradmin/vdradmind.bl"; + $CONFFILE = "${ETCDIR}/vdradmind.conf"; + $AT_FILENAME = "${ETCDIR}/vdradmind.at"; + $DONE_FILENAME = "${ETCDIR}/vdradmind.done"; + $BL_FILENAME = "${ETCDIR}/vdradmind.bl"; + $USER_CSS = "${ETCDIR}/user.css"; bindtextdomain("vdradmin", "/usr/share/locale"); } my $DONE = &DONE_Read || {}; @@ -175,7 +188,7 @@ my $Xconfig = { START_TAG => '\<\?\%', # Tagstyle END_TAG => '\%\?\>', # Tagstyle INCLUDE_PATH => $TEMPLATEDIR, # or list ref - INTERPOLATE => 1, # expand "$var" in plain text + INTERPOLATE => 0, # expand "$var" in plain text PRE_CHOMP => 1, # cleanup whitespace POST_CHOMP => 1, # cleanup whitespace EVAL_PERL => 1, # evaluate Perl code blocks @@ -216,7 +229,7 @@ my(%ERROR_MESSAGE, %MESSAGE, @LOGINPAGES_DESCRIPTION, %HELP); LoadTranslation(); my $UserCSS; -$UserCSS = "user.css" if(-e "/etc/vdradmin/user.css"); +$UserCSS = "user.css" if(-e "$USER_CSS"); # my $DAEMON = 1; @@ -234,6 +247,7 @@ for(my $i = 0; $i < scalar(@ARGV); $i++) { } if(/--nofork|-nf/) { $DAEMON = 0; last; } if(/--config|-c/) { + ReadConfig() if(-e $CONFFILE); $CONFIG{VDR_HOST} = Question(gettext("What's your VDR hostname (e.g video.intra.net)?"), $CONFIG{VDR_HOST}); $CONFIG{VDR_PORT} = Question(gettext("On which port does VDR listen to SVDRP queries?"), $CONFIG{VDR_PORT}); $CONFIG{SERVERHOST} = Question(gettext("On which address should VDRAdmin listen (0.0.0.0 for any)?"), $CONFIG{SERVERHOST}); @@ -268,6 +282,10 @@ for(my $i = 0; $i < scalar(@ARGV); $i++) { CloseSocket(); exit(0); } + if(/-u/) { + # Don't use user.css + $UserCSS = undef; + } } ReadConfig(); @@ -341,8 +359,7 @@ while(true) { my $raw_request = $Request[0]; $ACCEPT_GZIP = 0; - - if($raw_request =~ /^GET (\/[\w\.\/-\:]*)([\?[\w=&\.\+\%-\:\!]*]*)[\#\d ]+HTTP\/1.\d$/) { + if($raw_request =~ /^GET (\/[\w\.\/-\:]*)([\?[\w=&\.\+\%-\:\!\@]*]*)[\#\d ]+HTTP\/1.\d$/) { ($Request, $Query) = ($1, $2 ? substr($2, 1, length($2)) : undef); } else { Error("404", $ERROR_MESSAGE{notfound}, $ERROR_MESSAGE{notfound_long}); @@ -901,19 +918,10 @@ sub SendFile { $File); # Skin css file -# $FileWithPath = sprintf('%s/%s/%s/%s', $TEMPLATEDIR, $CONFIG{TEMPLATE}, $CONFIG{SKIN}, $File) -# if((split('[/\.]',$File))[-1] eq 'css' and -e sprintf('%s/%s/%s/%s', $TEMPLATEDIR, $CONFIG{TEMPLATE}, $CONFIG{SKIN}, $File)); -# if($File eq "style.css") { -# if( -e "/etc/vdradmin/style.css" ) { -# $FileWithPath = "/etc/vdradmin/style.css"; -# } elsif(-e sprintf('%s/%s/%s/%s', $TEMPLATEDIR, $CONFIG{TEMPLATE}, $CONFIG{SKIN}, $File)) { -# $FileWithPath = sprintf('%s/%s/%s/%s', $TEMPLATEDIR, $CONFIG{TEMPLATE}, $CONFIG{SKIN}, $File); -# } -# } if($File eq "style.css" and -e sprintf('%s/%s/%s/%s', $TEMPLATEDIR, $CONFIG{TEMPLATE}, $CONFIG{SKIN}, $File)) { $FileWithPath = sprintf('%s/%s/%s/%s', $TEMPLATEDIR, $CONFIG{TEMPLATE}, $CONFIG{SKIN}, $File); - } elsif($File eq "user.css" and -e "/etc/vdradmin/user.css") { - $FileWithPath = "/etc/vdradmin/user.css"; + } elsif($File eq "user.css" and -e "$USER_CSS") { + $FileWithPath = "$USER_CSS"; } if(-e $FileWithPath) { @@ -3006,6 +3014,7 @@ sub at_timer_list { if($_->{stop}) { $_->{stop} = substr($_->{stop}, 0, 2) . ":" . substr($_->{stop}, 2, 5); } + $_->{pattern} =~ s/"/\"/g; $_->{modurl} = $MyURL . "?aktion=at_timer_edit&id=$id"; $_->{delurl} = $MyURL . "?aktion=at_timer_delete&id=$id"; $_->{prio} = $_->{prio} ? $_->{prio} : $CONFIG{AT_PRIORITY}; @@ -3072,6 +3081,7 @@ sub at_timer_list { sortbystop => ($sortby eq "stop") ? 1 : 0, desc => $desc, at_timer_loop => \@timer, + at_timer_loop2 => \@timer, naturl => $MyURL . "?aktion=at_timer_new", #naturl => $MyURL . "?aktion=at_timer_new&active=1", url => $MyURL, @@ -3118,6 +3128,8 @@ sub at_timer_edit { } } + my $pattern = $at[$id-1]->{pattern}; + $pattern =~ s/"/\"/g, my $template = TemplateNew("at_timer_new.html"); my $vars = { usercss => $UserCSS, @@ -3130,7 +3142,7 @@ sub at_timer_edit { active => $at[$id-1]->{active}, done => $at[$id-1]->{done}, episode => $at[$id-1]->{episode}, - pattern => $at[$id-1]->{pattern}, + pattern => $pattern, starth => (length($at[$id-1]->{start}) >= 4) ? substr($at[$id-1]->{start}, 0, 2) : undef, startm => (length($at[$id-1]->{start}) >= 4) ? substr($at[$id-1]->{start}, 2, 5) : undef, stoph => (length($at[$id-1]->{stop}) >= 4) ? substr($at[$id-1]->{stop}, 0, 2) : undef, @@ -3362,10 +3374,12 @@ sub prog_timeline { foreach my $event (sort {$a->{start} <=> $b->{start} } @{$EPG{$_}}) { # Events durchgehen next if($event->{stop} < $event_time or $event->{start} > $event_time_to ); + my $title = $event->{title}; + $title =~ s/"/\"/g; push(@show, { start => $event->{start}, stop => $event->{stop}, - title => $event->{title}, + title => $title, subtitle => (length($event->{subtitle}) > 30 ? substr($event->{subtitle}, 0, 30) . "..." : $event->{subtitle}), progname => $event->{channel_name}, summary => $event->{summary}, @@ -3388,6 +3402,7 @@ sub prog_timeline { my $vars = { usercss => $UserCSS, shows => $shows, + shows2 => $shows, now_sec => $event_time, now => strftime("%H:%M", localtime($event_time)), datum => my_strftime("%A, %x", time), @@ -3896,7 +3911,7 @@ sub recRunCmd { if( $CONFIG{VDRVFAT} > 0 ) { for ( my $i=0 ;$ i < length($title); $i++) { $c = substr($title,$i,1); - unless ($c =~ /[öäüßÖÄÜA-Za-z0123456789_!@$%&()+,.\-;=~]/) { + unless ($c =~ /[öäüßÖÄÜA-Za-z0123456789_!@\$%&()+,.\-;=~]/) { $newtitle.= sprintf( "#%02X", ord( $c )); } else { $newtitle.= $c; @@ -4116,6 +4131,7 @@ sub tv_show { my $template = TemplateNew("tv.html"); my $vars = { usercss => $UserCSS, + new_win => $q->param("new_win") eq "1" ? "1" : undef, url => sprintf("%s?aktion=grab_picture", $MyURL), host => $CONFIG{VDR_HOST} }; |