summaryrefslogtreecommitdiff
path: root/vdradmind.pl
diff options
context:
space:
mode:
authorAndreas Mair <amair.sob@googlemail.com>2006-03-08 11:34:02 +0100
committerAndreas Mair <amair.sob@googlemail.com>2006-03-08 11:34:02 +0100
commit2723bd07c1a821c2198f43a313570c600907c327 (patch)
treefeece2d6565c4f8508dfd2cf8aedc2e07959d25c /vdradmind.pl
parentfd84627622f927bb6bf6f5c5d9e02295355a22c3 (diff)
downloadvdradmin-am-3.4.4beta.tar.gz
vdradmin-am-3.4.4beta.tar.bz2
2006-03-08: 3.4.4betav3.4.4beta
- Added script "convert.sh" to convert the AutoTimer information in VDR's timers.conf to the new format (see "convert.sh" for usage). - Use the summary/aux timer field to store AutoTimer information to be compatible to VDR v1.3.44 and later. - Removed "Add summary to new timers" option. The EPG summary is no longer copied to the timer's summary/aux field (for VDR 1.3.44+) or always copied (VDR 1.3.43-). - Made summary textfield readonly while adding/editing a timer. - Unless NO_EVENTID or NO_EVENTID_ON is used the EPG-ID is stored in every (auto)timer set using VDRAdmin-AM. - For every timer the current start/stop margins are saved in its summary/aux field. These are used for checking AutoTimers by time. - Fixed bug while checking for already programmed (auto)timers if not using EPG-ID.
Diffstat (limited to 'vdradmind.pl')
-rwxr-xr-xvdradmind.pl366
1 files changed, 188 insertions, 178 deletions
diff --git a/vdradmind.pl b/vdradmind.pl
index 3dbff1a..4042366 100755
--- a/vdradmind.pl
+++ b/vdradmind.pl
@@ -34,7 +34,6 @@ BEGIN {
$0 =~ /(^.*\/)/;
$EXENAME = $0;
$BASENAME = $1;
- #TODO: $0 = "vdradmind"; # does this harm any external script that depends on vdradmind.pl?
unshift(@INC, "/usr/share/vdradmin/lib");
unshift(@INC, $BASENAME . "lib/");
}
@@ -80,6 +79,10 @@ my $SEARCH_FILES_IN_SYSTEM = 0;
my $VDR_MAX_SVDRP_LENGTH = 10000; # validate this value
my $SUPPORTED_LOCALE_PREFIXES = "^(de|en|es|fi|fr|nl)_";
+my $AT_BY_EVENT_ID = 2;
+my $AT_BY_TIME = 1;
+my $AT_OFF = 0;
+
sub true () { 1 };
sub false () { 0 };
sub CRLF () { "\r\n" };
@@ -142,7 +145,7 @@ $CONFIG{TM_MARGIN_BEGIN} = 10;
$CONFIG{TM_MARGIN_END} = 10;
$CONFIG{TM_TT_TIMELINE} = 1;
$CONFIG{TM_TT_LIST} = 1;
-$CONFIG{TM_ADD_SUMMARY} = 0;
+#$CONFIG{TM_ADD_SUMMARY} = 0;
#
$CONFIG{ST_FUNC} = 1;
$CONFIG{ST_REC_ON} = 0;
@@ -179,7 +182,7 @@ $CONFIG{TV_EXT} = "m3u";
$CONFIG{REC_MIMETYPE} = "video/x-mpegurl";
$CONFIG{REC_EXT} = "m3u";
-my $VERSION = "3.4.3a";
+my $VERSION = "3.4.4beta";
my $SERVERVERSION = "vdradmind/$VERSION";
my $LINVDR = isLinVDR();
my $VDRVERSION = 0;
@@ -492,7 +495,7 @@ while(true) {
#############################################################################
#############################################################################
-sub GetChannelDesc {
+sub GetChannelDesc { #TODO: unused
my(%hash);
for(@CHAN) {
$hash{$_->{id}} = $_->{name};
@@ -529,7 +532,7 @@ sub ReadFile {
return($buf);
}
-sub GetChannelID {
+sub GetChannelID { #TODO: unused
my($sid) = $_[0];
for(@CHAN) {
if($_->{id} == $sid) {
@@ -538,7 +541,7 @@ sub GetChannelID {
}
}
-sub EURL {
+sub EURL { #TODO: unused
my($text) = @_;
$text =~ s/([^0-9a-zA-Z])/sprintf("%%%2.2x", ord($1))/ge;
return($text);
@@ -555,7 +558,7 @@ sub HTMLError {
}
-sub FillInZero {
+sub FillInZero { #TODO: unused
my($str, $length) = @_;
while(length($str) < $length) {
$str = "0$str";
@@ -701,7 +704,7 @@ sub EPG_getEntry {
}
}
-sub getNumberOfElements {
+sub getNumberOfElements { #TODO: unused
my $ref = shift;
if($ref) {
return(@{$ref});
@@ -836,7 +839,7 @@ sub SendCMD {
return(@output);
}
-sub mygmtime() {
+sub mygmtime() { #TODO: unused
gmtime;
}
@@ -1004,6 +1007,19 @@ sub SendFile {
#############################################################################
# autotimer functions
#############################################################################
+sub can_do_eventid_autotimer {
+ # check if we may use Event-IDs in general or not
+ return 0 if($CONFIG{NO_EVENTID} == 1);
+
+ my $vdr_id = shift;
+ # check if the current channel is on the Event-ID-blacklist
+ for my $n (split(",", $CONFIG{NO_EVENTID_ON})) {
+ return 0 if($n == $vdr_id);
+ }
+
+ return 1;
+}
+
sub AT_Read {
my(@at);
if(-e $AT_FILENAME) {
@@ -1397,7 +1413,7 @@ sub AutoTimer {
} 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}))));
- AT_ProgTimer(0x8001, $event->{event_id}, $event->{vdr_id}, $event->{start}, $event->{stop}, $title, $event->{summary}, $at->{prio}, $at->{lft});
+ AT_ProgTimer(1, $event->{event_id}, $event->{vdr_id}, $event->{start}, $event->{stop}, $title, $event->{summary}, $at);
if ($at->{active} == 2) {
Log(LOG_AT, sprintf("AutoTimer: Disabling one-shot Timer"));
@@ -1428,39 +1444,36 @@ sub AutoTimer {
sub AT_ProgTimer {
- my($active, $event_id, $channel, $start, $stop, $title, $summary, $prio, $lft) = @_;
-
- $title =~ s/\|/\:/g;
+ my($active, $event_id, $channel, $start, $stop, $title, $summary, $at) = @_;
$start -= ($CONFIG{TM_MARGIN_BEGIN} * 60);
$stop += ($CONFIG{TM_MARGIN_END} * 60);
- ($prio = $CONFIG{AT_PRIORITY}) if(!$prio);
- ($lft = $CONFIG{AT_LIFETIME}) if(!$lft);
-
+ my $start_fmt = my_strftime("%H%M", $start);
my $found = 0;
- my $Update = 0;
for(ParseTimer(1)) {
if($_->{vdr_id} == $channel) {
- if($event_id && $_->{event_id}) {
- if($_->{event_id} == $event_id) {
- $found = 1;
+ if($event_id && $_->{event_id}) {
+ if($_->{event_id} == $event_id) {
+ $found = 1;
last;
- }
- } else {
- if($_->{start} eq $start) {
- $found = 1;
+ }
+ } else {
+ if($_->{start} eq $start) {
+ $found = 1;
last;
- }
- if($VDRVERSION < 10323) {
- if ($_->{dor} eq my_strftime("%Y-%m-%d", $start)) {
- $found = 1;
- last;
- }
- } else {
- if($_->{dor} == my_strftime("%d", $start)) {
- $found = 1;
- last;
+ }
+ if($start_fmt eq my_strftime("%H%M", $_->{start})) {
+ if($VDRVERSION < 10323) {
+ if($_->{dor} == my_strftime("%d", $start)) {
+ $found = 1;
+ last;
+ }
+ } else {
+ if($_->{dor} eq my_strftime("%Y-%m-%d", $start)) {
+ $found = 1;
+ last;
+ }
}
}
}
@@ -1470,6 +1483,14 @@ sub AT_ProgTimer {
# we will only programm new timers, CheckTimers is responsible for
# updating existing timers
if (!$found) {
+ $title =~ s/\|/\:/g;
+
+ my $autotimer=2;
+ unless(can_do_eventid_autotimer($channel)) {
+ $event_id = 0;
+ $autotimer = 1;
+ }
+
Log(LOG_AT, sprintf("AT_ProgTimer: Programming Timer \"%s\" (Event-ID %s, %s - %s)", $title, $event_id, strftime("%Y%m%d-%H%M", localtime($start)), strftime("%Y%m%d-%H%M", localtime($stop))));
ProgTimer(
0,
@@ -1478,10 +1499,10 @@ sub AT_ProgTimer {
$channel,
$start,
$stop,
- $prio,
- $lft,
+ $at->{prio} ? $at->{prio} : $CONFIG{AT_PRIORITY},
+ $at->{lft} ? $at->{lft} : $CONFIG{AT_LIFETIME},
$title,
- $CONFIG{TM_ADD_SUMMARY} ? $summary : ""
+ append_timer_metadata($VDRVERSION < 10344 ? $summary : undef, $event_id, $autotimer, $CONFIG{TM_MARGIN_BEGIN}, $CONFIG{TM_MARGIN_END}, $at->{pattern})
);
if ($CONFIG{AT_SENDMAIL} == 1 && $can_use_net_smtp) {
my $sum = $summary;
@@ -1542,7 +1563,7 @@ sub my_encode_qp {
return $title;
}
-sub PackStatus {
+sub PackStatus { #TODO: unused
# make a 32 bit signed int with high 16 Bit as event_id and low 16 Bit as
# active value
my($active, $event_id) = @_;
@@ -1566,13 +1587,13 @@ sub PackStatus {
}
}
-sub UnpackActive {
+sub UnpackActive { #TODO: unused
my($tmstatus) = @_;
# strip the first 16 bit
return ($tmstatus & 0xFFFF);
}
-sub UnpackEvent_id {
+sub UnpackEvent_id { #TODO: unused
my($tmstatus) = @_;
# remove the lower 16 bit by shifting the value 16 bits to the right
return $tmstatus >> 16;
@@ -1582,53 +1603,40 @@ sub CheckTimers {
my $event;
for my $timer (ParseTimer(1)) {
- # only check autotimers (16th bit set) with event_id
- if( ($timer->{active} & 0x8000) && ($timer->{event_id})) {
+ # match by event_id
+ if($timer->{autotimer} == $AT_BY_EVENT_ID) {
for $event (@{$EPG{$timer->{vdr_id}}}) {
# look for matching event_id on the same channel -- it's unique
if($timer->{event_id} == $event->{event_id}) {
Log(LOG_CHECKTIMER, sprintf("CheckTimers: Checking timer \"%s\" (No. %s) for changes by Event-ID", $timer->{title}, $timer->{id}));
- # don't check for title
- #my $ntitle = $timer->{title};
- #if($event->{subtitle}) {
- # if($ntitle =~ /(.*\~|^)$event->{title}\~(.*)$/) {
- # $ntitle=$1 . $event->{title} . "~" . $event->{subtitle};
- # }
- #}
# update timer if the existing one differs from the EPG
- #if(($timer->{title} ne ($event->{subtitle} ? ($event->{title} . "~" . $event->{subtitle}) : $event->{title})) ||
- # (($event->{summary}) && (!$timer->{summary})) ||
- # don't check for changed title, as this will break autotimers' "directory" setting
- if(($CONFIG{TM_ADD_SUMMARY} && ($event->{summary}) && (!$timer->{summary})) ||
- ($timer->{start} ne ($event->{start} - $CONFIG{TM_MARGIN_BEGIN} * 60)) ||
- ($timer->{stop} ne ($event->{stop} + $CONFIG{TM_MARGIN_END} * 60))) {
+ # (don't check for changed title, as this will break autotimers' "directory" setting)
+ if(($timer->{start} ne ($event->{start} - $timer->{bstart} * 60)) ||
+ ($timer->{stop} ne ($event->{stop} + $timer->{bstop} * 60))) {
Log(LOG_CHECKTIMER, sprintf("CheckTimers: Timer \"%s\" (No. %s, Event-ID %s, %s - %s) differs from EPG: \"%s\", Event-ID %s, %s - %s)", $timer->{title}, $timer->{id}, $timer->{event_id}, strftime("%Y%m%d-%H%M", localtime($timer->{start})), strftime("%Y%m%d-%H%M", localtime($timer->{stop})), $event->{title}, $event->{event_id}, strftime("%Y%m%d-%H%M", localtime($event->{start})), strftime("%Y%m%d-%H%M", localtime($event->{stop}))));
ProgTimer(
$timer->{id},
$timer->{active},
$timer->{event_id},
$timer->{vdr_id},
- $event->{start} - $CONFIG{TM_MARGIN_BEGIN} * 60,
- $event->{stop} + $CONFIG{TM_MARGIN_END} * 60,
+ $event->{start} - $timer->{bstart} * 60,
+ $event->{stop} + $timer->{bstop} * 60,
$timer->{prio},
$timer->{lft},
- # always add subtitle if there is one
- #$event->{subtitle} ? ($event->{title} . "~" . $event->{subtitle}) : $event->{title},
# don't update title as this may differ from what has been set by the user
- #$ntitle,
$timer->{title},
- # If there already is a summary, the user might have changed it -- leave it untouched.
- $timer->{summary} ? $timer->{summary} : ( $CONFIG{TM_ADD_SUMMARY} ? $event->{summary} : "" ),
+ # leave summary untouched.
+ $timer->{summary},
);
Log(LOG_CHECKTIMER, sprintf("CheckTimers: Timer %s updated.", $timer->{id}));
}
}
}
}
- # all autotimers without event_id will be updated by channel number and start/stop time
- elsif( ($timer->{active} & 0x8000) && (!$timer->{event_id})) {
- # We're checking only timers which doesn't record
+ # match by channel number and start/stop time
+ elsif($timer->{autotimer} == $AT_BY_TIME) {
+ # We're checking only timers which don't record
if ($timer->{start} > time()) {
Log(LOG_CHECKTIMER, sprintf("CheckTimers: Checking timer \"%s\" (No. %s) for changes by recording time", $timer->{title}, $timer->{id}));
my @eventlist;
@@ -1642,7 +1650,7 @@ sub CheckTimers {
# now we have all events in eventlist that touch the old timer margins
# check for each event how probable it is matching the old timer
if(scalar(@eventlist) > 0) {
- my $origlen = ($timer->{stop} - $CONFIG{TM_MARGIN_END} * 60) - ($timer->{start} + $CONFIG{TM_MARGIN_BEGIN} * 60);
+ my $origlen = ($timer->{stop} - $timer->{bstop} * 60) - ($timer->{start} + $timer->{bstart} * 60);
my $maxwight = 0;
$event = $eventlist[0];
@@ -1668,23 +1676,22 @@ sub CheckTimers {
}
}
# update timer if the existing one differs from the EPG
- if(($CONFIG{TM_ADD_SUMMARY} && ($event->{summary}) && (!$timer->{summary})) ||
- ($timer->{start} > ($event->{start} - $CONFIG{TM_MARGIN_BEGIN} * 60)) ||
- ($timer->{stop} < ($event->{stop} + $CONFIG{TM_MARGIN_END} * 60))) {
+ if(($timer->{start} > ($event->{start} - $timer->{bstart} * 60)) ||
+ ($timer->{stop} < ($event->{stop} + $timer->{bstop} * 60))) {
Log(LOG_CHECKTIMER, sprintf("CheckTimers: Timer \"%s\" (No. %s, Event-ID %s, %s - %s) differs from EPG: \"%s\", Event-ID %s, %s - %s)", $timer->{title}, $timer->{id}, $timer->{event_id}, strftime("%Y%m%d-%H%M", localtime($timer->{start})), strftime("%Y%m%d-%H%M", localtime($timer->{stop})), $event->{title}, $event->{event_id}, strftime("%Y%m%d-%H%M", localtime($event->{start})), strftime("%Y%m%d-%H%M", localtime($event->{stop}))));
ProgTimer(
$timer->{id},
$timer->{active},
0,
$timer->{vdr_id},
- $timer->{start} > ($event->{start} - $CONFIG{TM_MARGIN_BEGIN} * 60) ? $event->{start} - $CONFIG{TM_MARGIN_BEGIN} * 60 : $timer->{start},
- $timer->{stop} < ($event->{stop} + $CONFIG{TM_MARGIN_END} * 60) ? $event->{stop} + $CONFIG{TM_MARGIN_END} * 60 : $timer->{stop},
+ $timer->{start} > ($event->{start} - $timer->{bstart} * 60) ? $event->{start} - $timer->{bstart} * 60 : $timer->{start},
+ $timer->{stop} < ($event->{stop} + $timer->{bstop} * 60) ? $event->{stop} + $timer->{bstop} * 60 : $timer->{stop},
$timer->{prio},
$timer->{lft},
# don't touch the title since we're not too sure about the event
$timer->{title},
- # If there already is a summary, the user might have changed it -- leave it untouched.
- $timer->{summary} ? $timer->{summary} : ( $CONFIG{TM_ADD_SUMMARY} ? $event->{summary} : "" ),
+ # leave summary untouched.
+ $timer->{summary},
);
Log(LOG_CHECKTIMER, sprintf("CheckTimers: Timer %s updated.", $timer->{id}));
}
@@ -1712,7 +1719,7 @@ sub my_mktime {
}
sub ParseTimer {
- my $pc = shift;
+ my $pc = shift; #TODO: what's this supposed to do?
my $tid = shift;
my $entry = 1;
@@ -1721,19 +1728,18 @@ sub ParseTimer {
last if(/^No timers defined/);
chomp;
my($id, $temp) = split(/ /, $_, 2);
- my($tmstatus, $vdr_id, $dor, $start, $stop, $prio, $lft, $title, $summary) = split(/\:/, $temp, 9);
+ my($active, $vdr_id, $dor, $start, $stop, $prio, $lft, $title, $summary) = split(/\:/, $temp, 9);
my($startsse, $stopsse, $weekday, $off, $perrec, $length, $first);
- my($active, $event_id);
- $active = UnpackActive($tmstatus);
- $event_id = UnpackEvent_id($tmstatus);
+ my($autotimer, $event_id, $bstart, $bstop, $pattern);
+ ($autotimer, $event_id, $bstart, $bstop, $pattern) = extract_timer_metadata($summary);
# VDR > 1.3.24 sets a bit if it's currently recording
my $recording = 0;
$recording = 1 if(($active & 8) == 8);
$active = 1 if($active == 3 || $active == 9);
- #$active = 1 if(($active & 1) == 1);
+ #$active = 1 if(($active & 1) == 1); #TODO
# replace "|" by ":" in timer's title (man vdr.5)
$title =~ s/\|/\:/g;
@@ -1813,7 +1819,11 @@ sub ParseTimer {
collision => 0,
critical => 0,
first => $first,
- proglink => sprintf("%s?aktion=prog_list&amp;vdr_id=%s", $MyURL, $vdr_id)
+ proglink => sprintf("%s?aktion=prog_list&amp;vdr_id=%s", $MyURL, $vdr_id),
+ autotimer => $autotimer,
+ bstart => $bstart,
+ bstop => $bstop,
+ pattern => $pattern
});
$first = 0;
}
@@ -1840,7 +1850,11 @@ sub ParseTimer {
collision => 0,
critical => 0,
first => -1,
- proglink => sprintf("%s?aktion=prog_list&amp;vdr_id=%s", $MyURL, $vdr_id)
+ proglink => sprintf("%s?aktion=prog_list&amp;vdr_id=%s", $MyURL, $vdr_id),
+ autotimer => $autotimer,
+ bstart => $bstart,
+ bstop => $bstop,
+ pattern => $pattern
});
}
@@ -1857,6 +1871,36 @@ sub ParseTimer {
}
}
+# extract out own metadata from a timer's aux field.
+sub extract_timer_metadata {
+ my $aux = shift;
+ return unless( $aux =~ /<vdradmin-am>(.*)<\/vdradmin-am>/i);
+ $aux = $1;
+ my $epg_id = $1 if ($aux =~ /<epgid>(.*)<\/epgid>/i);
+ my $autotimer = $1 if ($aux =~ /<autotimer>(.*)<\/autotimer>/i);
+ my $bstart = $1 if ($aux =~ /<bstart>(.*)<\/bstart>/i);
+ my $bstop = $1 if ($aux =~ /<bstop>(.*)<\/bstop>/i);
+ my $pattern = $1 if ($aux =~ /<pattern>(.*)<\/pattern>/i);
+ return ($autotimer, $epg_id, $bstart, $bstop, $pattern);
+}
+
+sub append_timer_metadata {
+ my ($aux, $epg_id, $autotimer, $bstart, $bstop, $pattern) = @_;
+ # remove old autotimer info
+ $aux =~ s/\|?<vdradmin-am>.*<\/vdradmin-am>//i;
+ $aux = substr($aux, 0, 9000) if($VDRVERSION < 10336 and length($aux) > 9000);
+ # add a new line if VDR<1.3.44 because then there might be a summary
+ $aux .= "|" if($VDRVERSION < 10344 and length($aux));
+ $aux .= "<vdradmin-am>";
+ $aux .= "<epgid>$epg_id</epgid>" if($epg_id);
+ $aux .= "<autotimer>$autotimer</autotimer>" if($autotimer);
+ $aux .= "<bstart>$bstart</bstart>" if($bstart);
+ $aux .= "<bstop>$bstop</bstop>" if($bstop);
+ $aux .= "<pattern>$pattern</pattern>" if($pattern);
+ $aux .= "</vdradmin-am>";
+ return $aux;
+}
+
#############################################################################
# Tools
#############################################################################
@@ -1894,29 +1938,15 @@ sub ProgTimer {
$title =~ s/\:/|/g; # replace ":" by "|" in timer's title (man vdr.5)
- if(($CONFIG{NO_EVENTID} == 1) && ($event_id > 0)) {
- $event_id = 0;
- Log(LOG_CHECKTIMER, sprintf("ProgTimer: Event-ID removed for recording \"%s\"", $title));
- } else {
- for my $n (split(",", $CONFIG{NO_EVENTID_ON})) {
- if(($n == $channel) && ($event_id > 0)) {
- $event_id = 0;
- Log(LOG_CHECKTIMER, sprintf("ProgTimer: Event-ID removed for recording \"%s\" on channel %s", $title, $channel));
- }
- }
- }
-
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 = ($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 $send_summary = ($VDRVERSION >= 10336) ? $summary : substr($summary, 0, $VDR_MAX_SVDRP_LENGTH - 9 - length($send_cmd) - length($active) - length($channel) - length($send_dor) - 8 - length($prio) - length($lft) - length($title));
- Log(LOG_AT, sprintf("ProgTimer: Programming Timer \"%s\" (Channel %s, Event-ID %s, %s - %s, Active %s)", $title, $channel, $event_id, my_strftime("%Y%m%d-%H%M", $start), my_strftime("%Y%m%d-%H%M", $stop), $send_active));
+ Log(LOG_AT, sprintf("ProgTimer: Programming Timer \"%s\" (Channel %s, Event-ID %s, %s - %s, Active %s)", $title, $channel, $event_id, my_strftime("%Y%m%d-%H%M", $start), my_strftime("%Y%m%d-%H%M", $stop), $active));
my $return = SendCMD(
sprintf("%s %s:%s:%s:%s:%s:%s:%s:%s:%s",
$send_cmd,
- # only autotimers with 16th bit set will be extended by the event_id
- $send_active,
+ $active,
$channel,
$send_dor,
strftime("%H%M", localtime($start)),
@@ -1939,7 +1969,7 @@ sub RedirectToReferer {
}
}
-sub salt {
+sub salt { #TODO: unused
$_ = $_[0];
my $string;
my($offset1, $offset2);
@@ -2054,7 +2084,7 @@ sub my_strfgmtime {
return(strftime($format, $time ? gmtime($time) : gmtime(time)));
}
-sub GetFirstChannel {
+sub GetFirstChannel { #TODO: unused
return($CHAN[0]->{service_id});
}
@@ -2075,13 +2105,13 @@ sub Decode_Referer {
return(MIME::Base64::decode_base64(shift));
}
-sub encode_ref {
+sub encode_ref { #TODO: unused
my($tmp) = $_[0]->url(-relative=>1,-query=>1);
my(undef, $query) = split(/\?/, $tmp, 2);
return(MIME::Base64::encode_base64($query));
}
-sub decode_ref {
+sub decode_ref { #TODO: unused
return(MIME::Base64::decode_base64($_[0]));
}
@@ -2280,8 +2310,7 @@ sub toolbar {
return(header("200", "text/html", $template->output));
}
-# obsolete?
-sub show_top {
+sub show_top { #TODO: unused?
my $template = TemplateNew("top.html");
return(header("200", "text/html", $template->output));
}
@@ -2617,7 +2646,7 @@ sub timer_list {
if($VDRVERSION < 10324 && $timer->{recording} == 0 && $timer->{startsse} < time() && $timer->{stopsse} > time() && ($timer->{active} & 1)) {
$timer->{recording} = 1;
}
- if($timer->{active} & 1) {
+ if($timer->{active} & 1) { #TODO
if($timer->{active} & 0x8000) {
$timer->{active} = 0x8001;
}
@@ -2914,13 +2943,14 @@ sub timer_new_form {
my $this_event;
if($epg_id) { # new timer
my $this = EPG_getEntry($vdr_id, $epg_id);
- $this_event->{active} = 0x8001;
+ $this_event->{active} = 1;
$this_event->{event_id} = $this->{event_id};
$this_event->{start} = $this->{start} - ($CONFIG{TM_MARGIN_BEGIN} * 60);
$this_event->{stop} = $this->{stop} + ($CONFIG{TM_MARGIN_END} * 60);
$this_event->{dor} = $this->{dor};
$this_event->{title} = $this->{title};
- $this_event->{summary}= $CONFIG{TM_ADD_SUMMARY} ? $this->{summary} : "";
+ # Do NOT append EPG summary if VDR >= 10344 as this will be done by VDR itself
+ $this_event->{summary}= $this->{summary} if($VDRVERSION < 10344);
$this_event->{vdr_id} = $this->{vdr_id};
} elsif($timer_id) { # edit existing timer
$this_event = ParseTimer(0, $timer_id);
@@ -2939,21 +2969,7 @@ sub timer_new_form {
# determine referer (redirect to where we come from)
my $ref = getReferer();
-
- # check if we may use Event-IDs in general or not
- if($CONFIG{NO_EVENTID} == 1) {
- # OK, remove Event-ID
- $this_event->{event_id} = 0;
- } else {
- # check if the current channel is on the Event-ID-blacklist
- for my $n (split(",", $CONFIG{NO_EVENTID_ON})) {
- if($n == $this_event->{vdr_id}) {
- # OK, remove Event-ID, on this channel no recording may have one.
- $this_event->{event_id} = 0;
- }
- }
- }
-
+
my $displaysummary = $this_event->{summary};
$displaysummary =~ s/\|/\n/g;
my $displaytitle = $this_event->{title};
@@ -2963,7 +2979,7 @@ sub timer_new_form {
usercss => $UserCSS,
url => $MyURL,
active => $this_event->{active} & 1,
- event_id => ($this_event->{event_id} << 1) + (($this_event->{active} & 0x8000) >> 15),
+ event_id => $this_event->{event_id},
starth => my_strftime("%H", $this_event->{start}),
startm => my_strftime("%M", $this_event->{start}),
stoph => $this_event->{stop} ? my_strftime("%H", $this_event->{stop}) : "00",
@@ -2977,6 +2993,8 @@ sub timer_new_form {
timer_id => $timer_id ? $timer_id : 0,
channels => \@channels,
newtimer => $timer_id ? 0 : 1,
+ autotimer => $timer_id ? $this_event->{autotimer} : $AT_OFF,
+ at_epg => $this_event->{event_id} > 0 ? can_do_eventid_autotimer($this_event->{vdr_id}) : 0,
referer => $ref ? Encode_Referer($ref) : undef,
help_url => HelpURL("timer_new")
};
@@ -2996,59 +3014,46 @@ sub timer_add {
my $data;
if($q->param("save")) {
- if($q->param("starth") =~ /\d+/ && $q->param("starth") < 24 && $q->param("starth") >= 0) {
- $data->{start} = $q->param("starth");
- } else { print "Help!\n"; }
- if($q->param("startm") =~ /\d+/ && $q->param("startm") < 60 && $q->param("startm") >= 0) {
- $data->{start} .= $q->param("startm");
- } else { print "Help!\n"; }
-
- if($q->param("stoph") =~ /\d+/ && $q->param("stoph") < 24 && $q->param("stoph") >= 0) {
- $data->{stop} = $q->param("stoph");
- } else { print "Help!\n"; }
- if($q->param("stopm") =~ /\d+/ && $q->param("stopm") < 60 && $q->param("stopm") >= 0) {
- $data->{stop} .= $q->param("stopm");
- } else { print "Help!\n"; }
-
- if($q->param("prio") =~ /\d+/) {
- $data->{prio} = $q->param("prio");
- }
-
- if($q->param("lft") =~ /\d+/) {
- $data->{lft} = $q->param("lft");
+ my $value = $q->param("starth");
+ if($value =~ /\d+/ && $value < 24 && $value >= 0) {
+ $data->{start} = sprintf("%02d", $value);
+ } else {
+ print "Help!\n";
+ $data->{start} = "00";
}
-
- if($q->param("active") == 0 || $q->param("active") == 1) {
- $data->{active} = $q->param("active");
- }
-
- if($q->param("vps") == 1) {
- $data->{active} |= 4;
+ $value = $q->param("startm");
+ if($value =~ /\d+/ && $value < 60 && $value >= 0) {
+ $data->{start} .= sprintf("%02d", $value);
+ } else {
+ print "Help!\n";
+ $data->{start} .= "00";
}
- if($q->param("event_id") == 0) {
- $data->{event_id} = 0;
+ $value = $q->param("stoph");
+ if($value =~ /\d+/ && $value < 24 && $value >= 0) {
+ $data->{stop} = sprintf("%02d", $value);
+ } else {
+ print "Help!\n";
+ $data->{stop} = "00";
}
-
- # if($q->param("event_id") == 1 && $data->{active} == 1) {
- if($q->param("event_id") == 1) {
- $data->{event_id} = 0;
- $data->{active} |= 0x8000;
+ $value = $q->param("stopm");
+ if($value =~ /\d+/ && $value < 60 && $value >= 0) {
+ $data->{stop} .= sprintf("%02d", $value);
+ } else {
+ print "Help!\n";
+ $data->{stop} .= "00";
}
- # if($q->param("event_id") > 1 && $data->{active} == 1) {
- if($q->param("event_id") > 1) {
- $data->{event_id} = ($q->param("event_id") >> 1);
- $data->{active} |= 0x8000;
- }
+ $data->{active} = $q->param("active");
+ $data->{autotimer} = $q->param("autotimer");
+ $data->{event_id} = $q->param("event_id");
- if($q->param("dor") =~ /[0-9MTWTFSS@-]+/) {
- $data->{dor} = $q->param("dor");
- }
-
- if($q->param("channel") =~ /\d+/) {
- $data->{channel} = $q->param("channel");
- }
+ $data->{prio} = $1 if($q->param("prio") =~ /(\d+)/);
+ $data->{lft} = $1 if($q->param("lft") =~ /(\d+)/);
+ $data->{dor} = $1 if($q->param("dor") =~ /([0-9MTWTFSS@\-]+)/);
+ $data->{channel} = $1 if($q->param("channel") =~ /(\d+)/);
+
+ $data->{active} |= 4 if($q->param("vps") == 1);
if(length($q->param("title")) > 0) {
$data->{title} = $q->param("title");
@@ -3069,14 +3074,19 @@ sub timer_add {
$dor = 1;
}
$data->{startsse} = my_mktime(substr($data->{start}, 2, 2),
- substr($data->{start}, 0, 2), $dor,
- (my_strftime("%m") - 1), my_strftime("%Y"));
+ substr($data->{start}, 0, 2),
+ $dor,
+ (my_strftime("%m") - 1),
+ my_strftime("%Y"));
$data->{stopsse} = my_mktime(substr($data->{stop}, 2, 2),
- substr($data->{stop}, 0, 2),
- $data->{stop} > $data->{start} ? $dor : $dor + 1,
- (my_strftime("%m") - 1), my_strftime("%Y"));
-
+ substr($data->{stop}, 0, 2),
+ $data->{stop} > $data->{start} ? $dor : $dor + 1,
+ (my_strftime("%m") - 1),
+ my_strftime("%Y"));
+
+ $data->{event_id} = 0 unless(can_do_eventid_autotimer($data->{channel}));
+
my $return = ProgTimer(
$timer_id,
$data->{active},
@@ -3087,7 +3097,7 @@ sub timer_add {
$data->{prio},
$data->{lft},
$data->{title},
- $data->{summary},
+ append_timer_metadata($data->{summary}, $data->{event_id}, $data->{autotimer}, $CONFIG{TM_MARGIN_BEGIN}, $CONFIG{TM_MARGIN_END}, undef),
($dor == 1) ? $data->{dor} : undef
);
@@ -3613,7 +3623,7 @@ sub at_timer_test {
done => $q->param("done"),
directory => $q->param("directory"),
at_test => 1,
- matches => \@at_matches
+ matches => \@at_matches
};
$template->param($vars);
my $output;
@@ -3808,7 +3818,7 @@ sub prog_summary {
$search =~ s/([\+\?\.\*\^\$\(\)\[\]\{\}\|\\])/\\$1/g;
}
}
-
+
my $now = time();
my(@show, @shows, @temp);
for(keys(%EPG)) {