diff options
Diffstat (limited to 'vdradmind.pl')
-rwxr-xr-x | vdradmind.pl | 148 |
1 files changed, 101 insertions, 47 deletions
diff --git a/vdradmind.pl b/vdradmind.pl index 65dc789..96457e5 100755 --- a/vdradmind.pl +++ b/vdradmind.pl @@ -170,7 +170,7 @@ $CONFIG{CHANNELS_WANTED_WATCHTV} = ""; # $CONFIG{PROG_SUMMARY_COLS} = 3; -my $VERSION = "0.97-am3.4.2rc3"; +my $VERSION = "0.97-am3.4.2rc4"; my $SERVERVERSION = "vdradmind/$VERSION"; my $LINVDR = isLinVDR(); my $VDRVERSION = 0; @@ -447,10 +447,13 @@ while(true) { my $aktion; my $real_aktion = $q->param("aktion"); if ($real_aktion eq "at_timer_aktion") { - $aktion = "at_timer_save"; - $aktion = "at_timer_delete" if ($q->param("at_delete")); - $aktion = "force_update" if ($q->param("at_force")); - $aktion = "at_timer_test" if ($q->param("test")); + $real_aktion = "at_timer_save"; + $real_aktion = "at_timer_delete" if ($q->param("at_delete")); + $real_aktion = "force_update" if ($q->param("at_force")); + $real_aktion = "at_timer_test" if ($q->param("test")); + } elsif ($real_aktion eq "timer_aktion") { + $real_aktion = "timer_delete" if ($q->param("timer_delete")); + $real_aktion = "timer_toggle" if ($q->param("timer_active") || $q->param("timer_inactive")); } my @ALLOWED_FUNCTIONS; @@ -811,7 +814,7 @@ sub OpenSocket { sub SendCMD { my $cmd = join("", @_); - if (length($cmd) > $VDR_MAX_SVDRP_LENGTH ) { + if (($VDRVERSION < 10336) && (length($cmd) > $VDR_MAX_SVDRP_LENGTH)) { Log(LOG_FATALERROR, "SendCMD(): command is too long(" . length($cmd) . "): " . substr($cmd, 0, 10)); return; } @@ -1140,10 +1143,13 @@ sub AutoTimer { ); $timer->{$key} = $t; } - + my $date_now = localtime(); for my $sender (keys(%EPG)) { for my $event (@{$EPG{$sender}}) { + # Timer in the past? + next if(localtime($event->{stop}) < $date_now); + # Ein Timer der schon programmmiert wurde kann # ignoriert werden next if($event->{event_id} == $timer->{event_id}); @@ -1377,7 +1383,7 @@ sub AutoTimer { if ($dry_run) { # printf("AT found: (%s) (%s) (%s) (%s) (%s) (%s)\n", $event->{title}, $title, $event->{subtitle}, $directory, $event->{start}, $event->{stop}); - push(@at_matches, { otitle => $event->{title}, title => $title, subtitle => $event->{subtitle}, directory => $directory, start => $event_start, stop => $event_stop, date => my_strftime("%A, %x",$event->{start}), channel => GetChannelDescByNumber($event->{vdr_id})}); + push(@at_matches, { otitle => $event->{title}, title => $title, subtitle => $event->{subtitle}, directory => $directory, start => my_strftime("%H:%M", $event->{start}), stop => my_strftime("%H:%M", $event->{stop}), date => my_strftime("%A, %x",$event->{start}), channel => GetChannelDescByNumber($event->{vdr_id})}); } else { Log(LOG_AT, sprintf("AutoTimer: Programming Timer \"%s\" (Event-ID %s, %s - %s)", $title, $event->{event_id}, strftime("%Y%m%d-%H%M", localtime($event->{start})), strftime("%Y%m%d-%H%M", localtime($event->{stop})))); @@ -1667,6 +1673,8 @@ sub ParseTimer { # replace "|" by ":" in timer's title (man vdr.5) $title =~ s/\|/\:/g; + my $title_js = $title; + $title_js =~ s/\'/\\\'/g; if(length($dor) == 7) { # repeating timer $startsse = my_mktime(substr($start, 2, 2), substr($start, 0, 2), my_strftime("%d"), (my_strftime("%m") - 1), my_strftime("%Y")); @@ -1727,7 +1735,7 @@ sub ParseTimer { startsse => $startsse + $off * 86400, stopsse => $stopsse + $off * 86400, active => $active, - recording => $recording, + recording => $first ? $recording : 0, # only the first might record event_id => $event_id, cdesc => get_name_from_vdrid($vdr_id), transponder => get_transponder_from_vdrid($vdr_id), @@ -1736,6 +1744,7 @@ sub ParseTimer { prio => $prio, lft => $lft, title => $title, + title_js => $title_js, summary => $summary, collision => 0, critical => 0, @@ -1762,6 +1771,7 @@ sub ParseTimer { prio => $prio, lft => $lft, title => $title, + title_js => $title_js, summary => $summary, collision => 0, critical => 0, @@ -1837,7 +1847,7 @@ sub ProgTimer { my $send_cmd = $timer_id ? "modt $timer_id" : "newt"; my $send_active = $active & 0x8000 ? PackStatus($active, $event_id) : $active; my $send_dor = $dor ? $dor : RemoveLeadingZero(strftime("%d", localtime($start))); - my $send_summary = substr($summary, 0, $VDR_MAX_SVDRP_LENGTH - 9 - length($send_cmd) - length($send_active) - length($channel) - length($send_dor) - 8 - length($prio) - length($lft) - length($title)); + my $send_summary = ($VDRVERSION >= 10336) ? $summary : substr($summary, 0, $VDR_MAX_SVDRP_LENGTH - 9 - length($send_cmd) - length($send_active) - length($channel) - length($send_dor) - 8 - length($prio) - length($lft) - length($title)); my $return = SendCMD( sprintf("%s %s:%s:%s:%s:%s:%s:%s:%s:%s", $send_cmd, @@ -1882,6 +1892,7 @@ sub salt { } sub Shutdown { + CloseSocket(); unlink($PIDFILE); exit(0) }; @@ -2540,8 +2551,8 @@ sub timer_list { } else { $timer->{active} = 0; } - $timer->{delurl} = $MyURL . "?aktion=timer_delete&timer_id=" . $timer->{id}, - $timer->{modurl} = $MyURL . "?aktion=timer_new_form&timer_id=" . $timer->{id}, + $timer->{delurl} = $MyURL . "?aktion=timer_delete&timer_id=" . $timer->{id} . "&sortby=" . $sortby . "&desc=" . $desc, + $timer->{modurl} = $MyURL . "?aktion=timer_new_form&timer_id=" . $timer->{id} . "&sortby=" . $sortby . "&desc=" . $desc, $timer->{toggleurl} = sprintf("%s?aktion=timer_toggle&active=%s&id=%s&sortby=%s&desc=%s", $MyURL, ($timer->{active} & 1) ? 0 : 1, $timer->{id}, $sortby, $desc), $timer->{dor} = my_strftime("%a %d.%m", $timer->{startsse}); #TODO: localize date @@ -2746,25 +2757,28 @@ sub timer_list { @timer = sort({ $a->{startsse} <=> $b->{startsse} } @timer); } } + my $cur_desc = $desc; $desc ? ($desc = 0) : ($desc = 1); @timer2=@timer; @timer2=sort({ lc($a->{sortfield}) cmp lc($b->{sortfield}) } @timer2); my $template = TemplateNew("timer_list.html"); my $vars = { - sortbydayurl => "$MyURL?aktion=timer_list&sortby=day&desc=$desc", - sortbychannelurl => "$MyURL?aktion=timer_list&sortby=channel&desc=$desc", - sortbynameurl => "$MyURL?aktion=timer_list&sortby=name&desc=$desc", - sortbyactiveurl => "$MyURL?aktion=timer_list&sortby=active&desc=$desc", - sortbystarturl => "$MyURL?aktion=timer_list&sortby=start&desc=$desc", - sortbystopurl => "$MyURL?aktion=timer_list&sortby=stop&desc=$desc", + sortbydayurl => "$MyURL?aktion=timer_list&sortby=day&desc=" . (($sortby eq "day") ? $desc : $cur_desc), + sortbychannelurl => "$MyURL?aktion=timer_list&sortby=channel&desc=" . (($sortby eq "channel") ? $desc : $cur_desc), + sortbynameurl => "$MyURL?aktion=timer_list&sortby=name&desc=" . (($sortby eq "name") ? $desc : $cur_desc), + sortbyactiveurl => "$MyURL?aktion=timer_list&sortby=active&desc=" . (($sortby eq "active") ? $desc : $cur_desc), + sortbystarturl => "$MyURL?aktion=timer_list&sortby=start&desc=" . (($sortby eq "start") ? $desc : $cur_desc), + sortbystopurl => "$MyURL?aktion=timer_list&sortby=stop&desc=" . (($sortby eq "stop") ? $desc : $cur_desc), sortbyday => ($sortby eq "day") ? 1 : 0, sortbychannel => ($sortby eq "channel") ? 1 : 0, sortbyname => ($sortby eq "name") ? 1 : 0, sortbyactive => ($sortby eq "active") ? 1 : 0, sortbystart => ($sortby eq "start") ? 1 : 0, sortbystop => ($sortby eq "stop") ? 1 : 0, + sortby => $sortby, desc => $desc, + cur_desc => $cur_desc, timer_loop => \@timer, timers => \@timer2, timers2 => \@timer2, @@ -2774,6 +2788,8 @@ sub timer_list { current => $current, title => $title, usercss => $UserCSS, + activateurl => sprintf("%s?aktion=timer_toggle&active=1&sortby=%s&desc=%s", $MyURL, ,$sortby, $cur_desc), + inactivateurl => sprintf("%s?aktion=timer_toggle&active=0&sortby=%s&desc=%s", $MyURL, ,$sortby, $cur_desc), config => \%CONFIG }; @@ -2786,12 +2802,32 @@ sub timer_list { sub timer_toggle { UptoDate(); - my $active = $q->param("active"); my $id = $q->param("id"); my $sortby = $q->param("sortby"); my $desc = $q->param("desc"); - # XXX check return - SendCMD(sprintf("modt %s %s", $id, $active ? "on" : "off")); + if($id) { + my $active = $q->param("active"); + SendCMD(sprintf("modt %s %s", $id, $active ? "on" : "off")); + # XXX check return + } else { + my $active; + $active = "on" if($q->param("timer_active")); + $active = "off" if($q->param("timer_inactive")); + if($active) { + my @sorted; + for($q->param) { + if(/xxxx_(.*)/) { + push(@sorted, $1); + } + } + @sorted = sort({ $b <=> $a } @sorted); + for my $t (@sorted) { + SendCMD(sprintf("modt %s %s", $t, $active)); + # XXX check return + } + CloseSocket(); + } + } return(headerForward(RedirectToReferer("$MyURL?aktion=timer_list&sortby=$sortby&desc=$desc"))); } @@ -3126,9 +3162,11 @@ sub at_timer_list { if($_->{stop}) { $_->{stop} = substr($_->{stop}, 0, 2) . ":" . substr($_->{stop}, 2, 5); } + $_->{pattern_js} = $_->{pattern}; $_->{pattern} = CGI::escapeHTML($_->{pattern}); - $_->{modurl} = $MyURL . "?aktion=at_timer_edit&id=$id"; - $_->{delurl} = $MyURL . "?aktion=at_timer_delete&id=$id"; + $_->{pattern_js} =~ s/\'/\\\'/g; + $_->{modurl} = $MyURL . "?aktion=at_timer_edit&id=$id&sortby=$sortby&desc=$desc"; + $_->{delurl} = $MyURL . "?aktion=at_timer_delete&id=$id&sortby=$sortby&desc=$desc"; $_->{prio} = $_->{prio} ? $_->{prio} : $CONFIG{AT_PRIORITY}; $_->{lft} = $_->{lft} ? $_->{lft} : $CONFIG{AT_LIFETIME}; $_->{id} = $id; @@ -3176,16 +3214,17 @@ sub at_timer_list { @timer = sort({ $a->{stop} <=> $b->{stop} } @timer); } } + my $cur_desc = $desc; $desc ? ($desc = 0) : ($desc = 1); my $template = TemplateNew("at_timer_list.html"); my $vars = { usercss => $UserCSS, - sortbychannelurl => "$MyURL?aktion=at_timer_list&sortby=channel&desc=$desc", - sortbypatternurl => "$MyURL?aktion=at_timer_list&sortby=pattern&desc=$desc", - sortbyactiveurl => "$MyURL?aktion=at_timer_list&sortby=active&desc=$desc", - sortbystarturl => "$MyURL?aktion=at_timer_list&sortby=start&desc=$desc", - sortbystopurl => "$MyURL?aktion=at_timer_list&sortby=stop&desc=$desc", + sortbychannelurl => "$MyURL?aktion=at_timer_list&sortby=channel&desc=" . (($sortby eq "channel") ? $desc : $cur_desc), + sortbypatternurl => "$MyURL?aktion=at_timer_list&sortby=pattern&desc=" . (($sortby eq "pattern") ? $desc : $cur_desc), + sortbyactiveurl => "$MyURL?aktion=at_timer_list&sortby=active&desc=" . (($sortby eq "active") ? $desc : $cur_desc), + sortbystarturl => "$MyURL?aktion=at_timer_list&sortby=start&desc=" . (($sortby eq "start") ? $desc : $cur_desc), + sortbystopurl => "$MyURL?aktion=at_timer_list&sortby=stop&desc=" . (($sortby eq "stop") ? $desc : $cur_desc), sortbychannel => ($sortby eq "channel") ? 1 : 0, sortbypattern => ($sortby eq "pattern") ? 1 : 0, sortbyactive => ($sortby eq "active") ? 1 : 0, @@ -3781,7 +3820,7 @@ sub rec_list { $parent = uri_escape($parent); } - ParseRecordings($parent, $sortby); + ParseRecordings($parent, $sortby, $desc); # create path array my @path; my $fuse = 0; @@ -3838,6 +3877,7 @@ sub rec_list { @recordings = sort({ $b->{sse} <=> $a->{sse} } @recordings); } } + my $cur_desc = $desc; $desc ? ($desc = 0) : ($desc = 1); # @@ -3847,13 +3887,14 @@ sub rec_list { my $vars = { usercss => $UserCSS, recloop => \@recordings, - sortbydateurl => "$MyURL?aktion=rec_list&parent=$parent&sortby=date&desc=$desc&parent=$parent", - sortbytimeurl => "$MyURL?aktion=rec_list&parent=$parent&sortby=time&desc=$desc&parent=$parent", - sortbynameurl => "$MyURL?aktion=rec_list&parent=$parent&sortby=name&desc=$desc&parent=$parent", + sortbydateurl => "$MyURL?aktion=rec_list&parent=$parent&sortby=date&parent=$parent&desc=" . (($sortby eq "date") ? $desc : $cur_desc), + sortbytimeurl => "$MyURL?aktion=rec_list&parent=$parent&sortby=time&parent=$parent&desc=" . (($sortby eq "time") ? $desc : $cur_desc), + sortbynameurl => "$MyURL?aktion=rec_list&parent=$parent&sortby=name&parent=$parent&desc=" . (($sortby eq "name") ? $desc : $cur_desc), sortbydate => ($sortby eq "date") ? 1 : 0, sortbytime => ($sortby eq "time") ? 1 : 0, sortbyname => ($sortby eq "name") ? 1 : 0, desc => $desc, + cur_sorting => "&sortby=$sortby&desc=$cur_desc", disk_total => $total, disk_free => $free, disk_percent => $percent, @@ -3875,6 +3916,7 @@ sub rec_list { sub ParseRecordings { my $parent = shift; my $sortby = shift; + my $desc = shift; return if((time() - $CONFIG{CACHE_REC_LASTUPDATE}) < ($CONFIG{CACHE_REC_TIMEOUT} * 60)); @@ -3982,9 +4024,6 @@ sub ParseRecordings { isfolder => 1, date => 0, time => 0, - sortbydate => ($sortby eq "date") ? 1 : 0, - sortbytime => ($sortby eq "time") ? 1 : 0, - sortbyname => ($sortby eq "name") ? 1 : 0, infurl => sprintf("%s?aktion=rec_list&parent=%s", $MyURL, $recording_id) }); } @@ -4002,19 +4041,19 @@ sub ParseRecordings { $yearofrecording = my_strftime("%Y"); } # endif + my $name_js = $name; + $name_js =~ s/\'/\\\'/g; push(@RECORDINGS, { sse => timelocal(undef, substr($time, 3, 2), substr($time, 0, 2), substr($date, 0, 2), (substr($date, 3, 2)- 1), $yearofrecording), date => $date, time => $time, name => CGI::escapeHTML($name), + name_js => $name_js, serie => $serie, episode => $episode, parent => $parent, new => $new, id => $id, - sortbydate => ($sortby eq "date") ? 1 : 0, - sortbytime => ($sortby eq "time") ? 1 : 0, - sortbyname => ($sortby eq "name") ? 1 : 0, delurl => $MyURL . "?aktion=rec_delete&rec_delete=y&id=$id", editurl => $MyURL . "?aktion=rec_edit&id=$id", infurl => $MyURL . "?aktion=rec_detail&id=$id", @@ -4073,6 +4112,7 @@ sub getRecInfo { $imdb_title =~ s/^.*~\([^~]*\)/\1/; $vars = { + url => $MyURL, usercss => $UserCSS, text => $displaytext ? $displaytext : undef, title => $displaytitle ? $displaytitle : undef, @@ -4102,6 +4142,7 @@ sub getRecInfo { $imdb_title =~ s/^.*\~//; $title =~ s/\~/ - /g; $vars = { + url => $MyURL, usercss => $UserCSS, text => $text ? $text : "", imdburl => "http://akas.imdb.com/Tsearch?title=" . $imdb_title, @@ -4138,6 +4179,8 @@ sub rec_delete { } } CloseSocket(); + # Re-read recording's list + $CONFIG{CACHE_REC_LASTUPDATE} = 0; } elsif ($q->param("rec_runcmd")) { if ($id) { recRunCmd($q->param("rec_cmd"), $id); @@ -4148,8 +4191,11 @@ sub rec_delete { } } } + } elsif ($q->param("rec_update")) { + # Re-read recording's list + $CONFIG{CACHE_REC_LASTUPDATE} = 0; } - return(headerForward(RedirectToReferer("$MyURL?aktion=rec_list"))); + return(headerForward(RedirectToReferer("$MyURL?aktion=rec_list&sortby=" . $q->param("sortby") . "&desc=" . $q->param("desc")))); } sub recRunCmd { @@ -4205,8 +4251,20 @@ sub recRunCmd { } sub rec_edit { + my $epg_id = $q->param("epg_id"); + # determine referer (redirect to where we come from) + my $ref; + if(defined($epg_id)) { + if($Referer =~ /(.*)\#\d+$/) { + $ref = sprintf("%s#id%s", $1, $epg_id); + } else { + $ref = sprintf("%s#id%s", $Referer, $epg_id); + } + } + my $template = TemplateNew("rec_edit.html"); my $vars = getRecInfo($q->param("id")); +#TODO $vars += { referer => Encode_Referer($ref) }; $template->param($vars); my $output; my $out = $template->output; @@ -4219,15 +4277,11 @@ sub rec_rename { my($nn) = $q->param('nn'); if($id) { SendCMD("RENR $id $nn"); -# } else { -# for($q->param) { -# if(/xxxx_(.*)/) { -# SendCMD("renr $1 $_[0]"); -# } -# } + CloseSocket(); + # Re-read recording's list + $CONFIG{CACHE_REC_LASTUPDATE} = 0; } - CloseSocket(); - headerForward("$MyURL?aktion=rec_list"); + headerForward("$MyURL?aktion=rec_list&sortby=" . $q->param("sortby") . "&desc=" . $q->param("desc")); } ############################################################################# |