diff options
| -rw-r--r-- | html/bloecke/event_links.tmpl | 4 | ||||
| -rw-r--r-- | html/display.tmpl | 2 | ||||
| -rw-r--r-- | html/now.tmpl | 16 | ||||
| -rw-r--r-- | html/program.tmpl | 6 | ||||
| -rw-r--r-- | html/schema.tmpl | 4 | ||||
| -rw-r--r-- | html/search.tmpl | 2 | ||||
| -rw-r--r-- | html/topten.tmpl | 4 | ||||
| -rw-r--r-- | lib/XXV/MODULES/AUTOTIMER.pm | 194 | ||||
| -rw-r--r-- | lib/XXV/MODULES/EPG.pm | 22 | ||||
| -rw-r--r-- | lib/XXV/MODULES/MOVETIMER.pm | 94 | ||||
| -rw-r--r-- | lib/XXV/MODULES/RECORDS.pm | 4 | ||||
| -rw-r--r-- | lib/XXV/MODULES/TIMERS.pm | 824 | ||||
| -rw-r--r-- | locale/de.po | 280 | ||||
| -rw-r--r-- | locale/de/LC_MESSAGES/xxv.mo | bin | 73026 -> 73015 bytes |
14 files changed, 766 insertions, 690 deletions
diff --git a/html/bloecke/event_links.tmpl b/html/bloecke/event_links.tmpl index b618f6b..ce37939 100644 --- a/html/bloecke/event_links.tmpl +++ b/html/bloecke/event_links.tmpl @@ -3,8 +3,8 @@ <a href="?cmd=display&data=<?% epgId %?>" title='<?% gettext("Detailed program information") %?>'><img src="images/view_event.png" /></a><?% umbruch %?> <?% END %?> <a href="?cmd=search&data=<?% url( data.1 ) %?>"><img src="images/repeat.png" title="[<?% gettext("Rep") %?>]" /></a><?% umbruch %?> - <?% IF param.timers.${data.0}.Id && allow('tedit') %?> -<a href="?cmd=tedit&data=<?% param.timers.${data.0}.Id %?>"><img src="images/record_blue.png" title="[<?% gettext("Edit this timer") %?>]" /></a><?% umbruch %?> + <?% IF param.timers.${data.0}.id && allow('tedit') %?> +<a href="?cmd=tedit&data=<?% param.timers.${data.0}.id %?>"><img src="images/record_blue.png" title="[<?% gettext("Edit this timer") %?>]" /></a><?% umbruch %?> <?% ELSIF allow('tnew') %?> <a href="?cmd=tnew&data=<?% data.0 %?>"><img src="images/record.png" title="[<?% gettext("To record") %?>]" name='recordlink' id='<?% data.0 %?>' /></a><?% umbruch %?> <?% END %?> diff --git a/html/display.tmpl b/html/display.tmpl index fb04878..4933ccd 100644 --- a/html/display.tmpl +++ b/html/display.tmpl @@ -28,7 +28,7 @@ <td> <a href="?cmd=search&data=<?% url( data.first.1 ) %?>">[<?% gettext("Search for repeats") %?>]</a> <?% IF param.timers.${data.first.$c} && allow('tedit') %?> - <a href="?cmd=tedit&data=<?% param.timers.${data.first.$c}.Id %?>"><span name='recordlink' class='normal'><b>[<?% gettext("Edit this timer") %?>]</b></span></a> + <a href="?cmd=tedit&data=<?% param.timers.${data.first.$c}.id %?>"><span name='recordlink' class='normal'><b>[<?% gettext("Edit this timer") %?>]</b></span></a> <?% ELSIF allow('tnew')%?> <a href="?cmd=tnew&data=<?% data.first.$c %?>"><span name='recordlink' id='<?% data.first.$c %?>' class='normal'>[<?% gettext("To record") %?>]</span></a> <?% END %?> diff --git a/html/now.tmpl b/html/now.tmpl index e124a67..81b8db1 100644 --- a/html/now.tmpl +++ b/html/now.tmpl @@ -60,10 +60,10 @@ <?% END %?> <tr class="<?% myclass %?>" <?% IF (loop.count mod 2) == 0 %?>bgcolor='#F5F5F5'<?% END %?>> <td><nobr> - <?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?> + <?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?> <a href="?cmd=search&data=<?% url( title ) %?>">[<?% gettext("Rep") %?>]</a> <?% IF param.timers.${id} && allow('tedit') %?> - <a href="?cmd=tedit&data=<?% param.timers.${id}.Id %?>">[<?% gettext("Edit") %?>]</a><br> + <a href="?cmd=tedit&data=<?% param.timers.${id}.id %?>">[<?% gettext("Edit") %?>]</a><br> <?% ELSIF allow('tnew') %?> <a href="?cmd=tnew&data=<?% id %?>"><span name='recordlink' id='<?% id %?>' class='normal'>[<?% gettext("Rec") %?>]</span></a><br> <?% END %?> @@ -72,18 +72,18 @@ <?% END %?> </td> <td> - <?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?> + <?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?> <?% INCLUDE bloecke/tooltip.tmpl cmd="display" eventid=id linkid=id ttp_offset=0 %?><?% title %?></a> <?% IF subtitle != "" %?> <br><small><?% subtitle %?></small> <?% END %?> </td> <td> - <?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?> + <?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?> <a href="?cmd=program&data=<?% channel %?>"><?% sender %?></a> </td> - <td><?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?><?% start %?><?% IF param.timers.${id} && param.timers.${id}.Status %?></b><?% END %?></td> - <td><?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?><?% stop %?><?% IF param.timers.${id} && param.timers.${id}.Status %?></b><?% END %?></td> + <td><?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?><?% start %?><?% IF param.timers.${id} && param.timers.${id}.activ %?></b><?% END %?></td> + <td><?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?><?% stop %?><?% IF param.timers.${id} && param.timers.${id}.activ %?></b><?% END %?></td> <?% UNLESS duration > 100 OR duration <= 0 %?> <td width="100" valign='bottom'><nobr> <?% per = ( (100 - duration) + 0.999 ) div 1 ; per = (per > 100 ? 100 : per) %?> @@ -91,8 +91,8 @@ <?% text = per div 1 | format("<br><font size='1'>${per}%%</font>") %?> <table width="100%" cellspacing='0' cellpadding='0'> <tr> - <td bgcolor="#dedede"><img src='images/blank.png' width="<?% per %?>" height='1' hspace=0 vspace=0><?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?><?% (per > 19 ? text : " ") %?></td> - <td bgcolor="#ffffff"><img src='images/blank.png' width="<?% per2 %?>" height='1' hspace=0 vspace=0><?% IF param.timers.${id} && param.timers.${id}.Status %?><b><?% END %?><?% (per < 20 ? text : "") %?></td> + <td bgcolor="#dedede"><img src='images/blank.png' width="<?% per %?>" height='1' hspace=0 vspace=0><?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?><?% (per > 19 ? text : " ") %?></td> + <td bgcolor="#ffffff"><img src='images/blank.png' width="<?% per2 %?>" height='1' hspace=0 vspace=0><?% IF param.timers.${id} && param.timers.${id}.activ %?><b><?% END %?><?% (per < 20 ? text : "") %?></td> <tr> </table> </td> diff --git a/html/program.tmpl b/html/program.tmpl index 8fe07b1..781f275 100644 --- a/html/program.tmpl +++ b/html/program.tmpl @@ -65,7 +65,7 @@ <td> <a href="?cmd=search&data=<?% url( zeile.1 ) %?>">[<?% gettext("Rep") %?>]</a> <?% IF param.timers.${zeile.0} && allow('tedit') %?> - <a href="?cmd=tedit&data=<?% param.timers.${zeile.0}.Id %?>"><b><span name='recordlink' id='<?% zeile.0 %?>' class='normal'>[<?% gettext("Edit this timer") %?>]</span></b></a> + <a href="?cmd=tedit&data=<?% param.timers.${zeile.0}.id %?>"><b><span name='recordlink' id='<?% zeile.0 %?>' class='normal'>[<?% gettext("Edit this timer") %?>]</span></b></a> <?% ELSIF allow('tnew') %?> <a href="?cmd=tnew&data=<?% zeile.0 %?>"><span name='recordlink' id='<?% zeile.0 %?>' class='normal'>[<?% gettext("To record") %?>]</span></a> <?% END %?> @@ -75,7 +75,7 @@ <?% ELSIF c == 2; # Text Field %?> <td> <?% INCLUDE bloecke/tooltip.tmpl cmd="display" title=field subtitle=zeile.2 desc=zeile.6 eventid=zeile.0 linkid=zeile.0 ttp_offset=0 %?> - <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.Status %?> + <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.activ %?> <b><?% field %?></b> <?% ELSE %?> <?% field %?> @@ -92,7 +92,7 @@ <?% ELSIF c == 6; # Day Field %?> <?% ELSIF c >= 7; # Desc Field %?> <?% ELSE %?> - <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.Status %?> + <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.activ %?> <td><b><?% field %?></b></td> <?% ELSE %?> <td><?% field %?></td> diff --git a/html/schema.tmpl b/html/schema.tmpl index 5869c4e..b933184 100644 --- a/html/schema.tmpl +++ b/html/schema.tmpl @@ -166,10 +166,10 @@ Duration = param.zeitbis - param.zeitvon; <?%- BLOCK getStatus -%?> <?%- class = 'schema_normal'; - IF t.exists(e.0) && t.${e.0}.Status; + IF t.exists(e.0) && t.${e.0}.activ; class = 'schema_record_plan'; END; - IF t.exists(e.0) && r.exists(t.${e.0}.Id); + IF t.exists(e.0) && r.exists(t.${e.0}.id); class = 'schema_record_now'; END; class; diff --git a/html/search.tmpl b/html/search.tmpl index 5cb0235..48c9312 100644 --- a/html/search.tmpl +++ b/html/search.tmpl @@ -100,7 +100,7 @@ <?% ELSIF c == 1; # Text Field %?> <td> <?% INCLUDE bloecke/tooltip.tmpl cmd="display" title=field subtitle=zeile.2 desc=zeile.8 eventid=zeile.0 linkid=zeile.0 ttp_offset=0 %?> - <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.Status %?> + <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.activ %?> <b><?% field %?></b> <?% ELSE %?> <?% field %?> diff --git a/html/topten.tmpl b/html/topten.tmpl index 8ebe7f5..2458da2 100644 --- a/html/topten.tmpl +++ b/html/topten.tmpl @@ -34,7 +34,7 @@ <?% ELSIF c == 2; # Text Field %?> <td> <?% INCLUDE bloecke/tooltip.tmpl cmd="display" title=field subtitle=zeile.2 desc=zeile.3 eventid=zeile.0 linkid=zeile.0 ttp_offset=0 %?> - <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.Status %?> + <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.activ %?> <b><?% field %?></b> <?% ELSE %?> <?% field %?> @@ -61,7 +61,7 @@ <?% field | format('%d') %?> </td> <?% ELSE %?> - <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.Status %?> + <?% IF param.timers.${zeile.0} && param.timers.${zeile.0}.activ %?> <td><b><?% field %?></b></td> <?% ELSE %?> <td><?% field %?></td> diff --git a/lib/XXV/MODULES/AUTOTIMER.pm b/lib/XXV/MODULES/AUTOTIMER.pm index f3b595e..d39444c 100644 --- a/lib/XXV/MODULES/AUTOTIMER.pm +++ b/lib/XXV/MODULES/AUTOTIMER.pm @@ -130,24 +130,24 @@ sub module { Actions => [ q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); my $desc = getDataById($timer->{eventid}, 'EPG', 'eventid') if($timer->{eventid}); - my $autotimer = getDataById($timer->{AutotimerId}, 'AUTOTIMER', 'Id'); + my $autotimer = getDataById($timer->{autotimerid}, 'AUTOTIMER', 'Id'); my $title = sprintf(gettext("Autotimer('%s') found: %s"), - $autotimer->{Search}, $timer->{File}); + $autotimer->{Search}, $timer->{file}); my $description = ''; - my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{ChannelID}); + my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{channel}); $description .= sprintf(gettext("Channel: %s"), $channel); $description .= "\r\n"; Date_Init("Language=English"); - my $d = ParseDate($timer->{NextStartTime}); - $timer->{NextStartTime} = datum(UnixDate($d,"%s")) if($d); + my $d = ParseDate($timer->{starttime}); + $timer->{starttime} = datum(UnixDate($d,"%s")) if($d); $description .= sprintf(gettext("On: %s to %s"), - $timer->{NextStartTime}, - fmttime($timer->{Stop})); + $timer->{starttime}, + fmttime($timer->{stop})); $description .= "\r\n"; $description .= sprintf(gettext("Description: %s"), $desc->{description} ) if($desc && $desc->{description}); @@ -176,28 +176,28 @@ sub status { my $sql = qq| SELECT SQL_CACHE - t.Id as __Id, - t.File, - t.Status as __Status, + t.id as __id, + t.file, + t.flags as __flags, c.Name as Channel, c.Pos as __Pos, - DATE_FORMAT(t.Day, '%e.%c.%Y') as Day, - t.Start, - t.Stop, - t.Priority, - UNIX_TIMESTAMP(t.NextStartTime) as __Day, - t.Collision as __Collision, - t.eventid as __NextEpgId, - t.AutotimerId as __AutotimerId + DATE_FORMAT(t.day, '%e.%c.%Y') as Day, + t.start, + t.stop, + t.priority, + UNIX_TIMESTAMP(t.starttime) as __day, + t.collision as __collision, + t.eventid as __eventid, + t.autotimerid as __autotimerid FROM TIMERS as t, CHANNELS as c WHERE - t.ChannelID = c.Id + t.channel = c.Id and UNIX_TIMESTAMP(t.addtime) > ? - and t.AutotimerId > 0 + and t.autotimerid > 0 ORDER BY - t.NextStartTime|; + t.starttime|; my $fields = fields($obj->{dbh}, $sql); my $sth = $obj->{dbh}->prepare($sql); @@ -298,9 +298,9 @@ sub _init { |); main::after(sub{ - my $m = main::getModule('EPG'); - $m->updated( - sub{ + my $modE = main::getModule('EPG'); + $modE->updated( + sub{ my $watcher = shift; my $console = shift; my $waiter = shift; @@ -411,7 +411,7 @@ sub _autotimerLookup { my $now = time; # Get Timersmodule - my $timermod = main::getModule('TIMERS'); + my $modT = main::getModule('TIMERS'); foreach my $id (sort keys %$att) { my $a = $att->{$id}; @@ -424,18 +424,18 @@ sub _autotimerLookup { } # Build SQL Command and run it .... - my $events = $obj->_eventsearch($a, $timermod, $addtime ) || next; + my $events = $obj->_eventsearch($a, $modT, $addtime ) || next; # Only search for one at? if(ref $console && $autotimerid) { $console->message(sprintf(gettext("Found %d entries for '%s' in EPG database."), scalar keys %$events, $a->{Search})); foreach my $Id (sort keys %$events) { my $output = [ - [gettext("Title") , $events->{$Id}->{Title}], - [gettext("Subtitle") , $events->{$Id}->{Subtitle}], - [gettext("Channel") , $events->{$Id}->{Channel}], + [gettext("Title") , $events->{$Id}->{title}], + [gettext("Subtitle") , $events->{$Id}->{subtitle}], + [gettext("Channel") , $events->{$Id}->{channelname}], ]; - if($events->{$Id}->{vpsstart} and $a->{VPS}) { + if($events->{$Id}->{vpsstart} and $a->{VPS} and $modT->{usevpstime} eq 'y') { push(@$output, [gettext("Start") , datum($events->{$Id}->{vpsstart} )]); push(@$output, [gettext("Stop") , datum($events->{$Id}->{vpsstop} )]); } else { @@ -456,22 +456,33 @@ sub _autotimerLookup { foreach my $Id (sort keys %$events) { my $event = $events->{$Id}; - $event->{Activ} = 'y'; - $event->{Priority} = $a->{Priority}; - $event->{Lifetime} = $a->{Lifetime}; - - $event->{File} = $obj->_placeholder($event, $a); + $event->{activ} = 'y'; + $event->{priority} = $a->{Priority}; + $event->{lifetime} = $a->{Lifetime}; - if($event->{vpsstart} and $a->{VPS}) { - $event->{VPS} = 'y'; + if($event->{vpsstart} and $a->{VPS} and $modT->{usevpstime} eq 'y') { + $event->{vps} = 'y'; $event->{starttime} = $event->{vpsstart}; $event->{stoptime} = $event->{vpsstop}; } else { - $event->{VPS} = ''; + $event->{vps} = 'n'; } # ignore outdated event next if($event->{stoptime} < $now); + + # remove seconds from time 12:00:30 => 12:00:00 + $event->{starttime} -= ($event->{starttime} % 60); + $event->{stoptime} -= ($event->{stoptime} % 60); + + my ($bsec,$bmin,$bhour,$bmday,$bmon,$byear,$bwday,$byday,$bisdst) = localtime($event->{starttime}); + my ($esec,$emin,$ehour,$emday,$emon,$eyear,$ewday,$eyday,$eisdst) = localtime($event->{stoptime}); + + $event->{day} = sprintf("%04d-%02d-%02d",$byear+1900,$bmon+1,$bmday); + $event->{start} = sprintf("%02d%02d",$bhour,$bmin); + $event->{stop} = sprintf("%02d%02d",$ehour,$emin); + + $event->{file} = $obj->_placeholder($event, $a); # Add anchor for reidentify timer $event->{aux} = sprintf('#~AT[%d]', $id); @@ -486,32 +497,28 @@ sub _autotimerLookup { # Ignore timer if it already with same title recorded if(grep(/^chronicle$/, @done) && $obj->_chronicleexists($event)) { - lg sprintf("Don't create timer from AT(%d) '%s', because found same data on chronicle", $id, $event->{File}); + lg sprintf("Don't create timer from AT(%d) '%s', because found same data on chronicle", $id, $event->{file}); next; } # Ignore timer if it already with same title recorded if(grep(/^recording$/, @done) && $obj->_recordexists($event)){ - lg sprintf("Don't create timer from AT(%d) '%s', because found same data on recordings", $id, $event->{File}); + lg sprintf("Don't create timer from AT(%d) '%s', because found same data on recordings", $id, $event->{file}); next; } # Ignore timer if it already a timer with same title programmed, on other place if(grep(/^timer$/, @done) && $obj->_timerexiststitle($event)){ - lg sprintf("Don't create timer from AT(%d) '%s', because found same data on other timers", $id, $event->{File}); + lg sprintf("Don't create timer from AT(%d) '%s', because found same data on other timers", $id, $event->{file}); next; } } my $error = 0; - my ($bsec,$bmin,$bhour,$bmday,$bmon,$byear,$bwday,$byday,$bisdst) = localtime($event->{starttime}); - my ($esec,$emin,$ehour,$emday,$emon,$eyear,$ewday,$eyday,$eisdst) = localtime($event->{stoptime}); - - $event->{Day} = sprintf("%04d-%02d-%02d",$byear+1900,$bmon+1,$bmday); - $event->{Start} = sprintf("%02d%02d",$bhour,$bmin); - $event->{Stop} = sprintf("%02d%02d",$ehour,$emin); - - my $erg = $timermod->saveTimer($event, $timerID ? $timerID : undef); + if($timerID) { + $event->{pos} = $modT->getPos($timerID); + } + my $erg = $modT->saveTimer($event); foreach my $zeile (@$erg) { if($zeile =~ /^(\d{3})\s+(.+)/) { $error = $2 if(int($1) >= 500); @@ -526,16 +533,16 @@ sub _autotimerLookup { #my $tdata = getDataByTable('TIMERS'); #dumper($tdata); - $console->err(sprintf(gettext("Could not save timer for '%s' : %s"), $event->{File}, $error)) + $console->err(sprintf(gettext("Could not save timer for '%s' : %s"), $event->{file}, $error)) if(ref $console && $autotimerid); } else { if($timerID) { ++$m; - $console->message(sprintf(gettext("Modified timer for '%s'."), $event->{File})) + $console->message(sprintf(gettext("Modified timer for '%s'."), $event->{file})) if(ref $console && $autotimerid); } else { ++$c; - $console->message(sprintf(gettext("Timer for '%s' has been created."), $event->{File})) + $console->message(sprintf(gettext("Timer for '%s' has been created."), $event->{file})) if(ref $console && $autotimerid); } } @@ -572,7 +579,7 @@ sub _autotimerLookup { sleep 1; - $timermod->readData(); + $modT->readData(); return (\@{$log},$C,$M); } @@ -603,7 +610,7 @@ sub autotimerEdit { my $timerid = shift || 0; my $data = shift || 0; - my $mod = main::getModule('CHANNELS'); + my $modC = main::getModule('CHANNELS'); my $modT = main::getModule('TIMERS'); my $epg; @@ -615,7 +622,7 @@ sub autotimerEdit { # Channels Ids in Namen umwandeln if($epg->{Channels}) { - my @channels = map { $_ = $mod->ChannelToPos($_) } split(/[\s|,]+/, $epg->{Channels}); + my @channels = map { $_ = $modC->ChannelToPos($_) } split(/[\s|,]+/, $epg->{Channels}); $epg->{Channels} = \@channels; } @@ -655,9 +662,9 @@ sub autotimerEdit { my $DoneChoices = [$do{'timer'}, $do{'recording'}]; # Enable option "chronicle" only if activated. - my $cm = main::getModule('CHRONICLE'); + my $modCH = main::getModule('CHRONICLE'); push(@$DoneChoices, $do{'chronicle'}) - if($cm and $cm->{active} eq 'y'); + if($modCH and $modCH->{active} eq 'y'); my $questions = [ 'Id' => { @@ -713,14 +720,14 @@ You can also fine tune your search : 'Channels' => { typ => 'list', def => $epg->{Channels}, - choices => $mod->ChannelArray('Name', sprintf(' NOT (%s)', $obj->{exclude})), + choices => $modC->ChannelArray('Name', sprintf(' NOT (%s)', $obj->{exclude})), options => 'multi', msg => gettext('Limit search to these channels'), check => sub{ my $value = shift || return; my @vals; foreach my $chname ((ref $value eq 'ARRAY' ? @$value : split(/\s*,\s*/, $value))) { - if( my $chid = $mod->PosToChannel($chname) || $mod->NameToChannel($chname)) { + if( my $chid = $modC->PosToChannel($chname) || $modC->NameToChannel($chname)) { push(@vals, $chid); } else { return undef, sprintf(gettext("The channel '%s' does not exist!"),$chname); @@ -838,7 +845,7 @@ You can also fine tune your search : }, }, 'VPS' => { - typ => 'confirm', + typ => $modT->{usevpstime} eq 'y' ? 'confirm' : 'hidden', def => $epg->{VPS} || 'n', msg => gettext('Use PDC time to control created timer'), }, @@ -919,7 +926,7 @@ You can also fine tune your search : typ => 'string', msg => gettext('Group all recordings into one directory'), def => $epg->{Dir}, - # choices => main::getModule('TIMERS')->getRootDirs, + # choices => $modT->getRootDirs, }, 'startdate' => { typ => 'string', @@ -1194,7 +1201,7 @@ sub _eventsearch { # ------------------ my $obj = shift || return error('No object defined!'); my $a = shift || return error('No data defined!'); - my $timermod = shift || return error('No timer modul defined!'); + my $modT = shift || return error('No timer modul defined!'); my $addtime = shift; my $query; @@ -1268,12 +1275,12 @@ sub _eventsearch { if(defined $a->{prevminutes}) { $prev = $a->{prevminutes} * 60; } else { - $prev = $timermod->{prevminutes} * 60; + $prev = $modT->{prevminutes} * 60; } if(defined $a->{afterminutes}) { $after = $a->{afterminutes} * 60; } else { - $after = $timermod->{afterminutes} * 60; + $after = $modT->{afterminutes} * 60; } # } @@ -1283,9 +1290,8 @@ sub _eventsearch { my $sql = qq| SELECT SQL_CACHE e.eventid as eventid, - e.channel_id as ChannelID, - c.Name as Channel, - c.POS as POS, + e.channel_id as channel, + c.Name as channelname, e.title as Title, e.subtitle as Subtitle, e.description as description, @@ -1317,21 +1323,21 @@ sub _timerexists { # Avoid Timer already defined (the timer with the same data again do not put on) my $sql = "SELECT SQL_CACHE count(*) as cc from TIMERS where - ChannelID = ? - and UNIX_TIMESTAMP(NextStartTime) = ? - and UNIX_TIMESTAMP(NextStopTime) = ? + channel = ? + and UNIX_TIMESTAMP(starttime) = ? + and UNIX_TIMESTAMP(stoptime) = ? "; -# and Priority = ? -# and Lifetime = ? +# and priority = ? +# and lifetime = ? # and ( -# ( Status & 1 = '0' ) -# or ( File = ? ) +# ( flags & 1 = '0' ) +# or ( file = ? ) # ) my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{ChannelID},$eventdata->{starttime},$eventdata->{stoptime}, -# $eventdata->{Priority},$eventdata->{Lifetime}, -# $eventdata->{File} + $sth->execute($eventdata->{channel},$eventdata->{starttime},$eventdata->{stoptime}, +# $eventdata->{priority},$eventdata->{lifetime}, +# $eventdata->{file} ) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchrow_hashref(); @@ -1348,22 +1354,22 @@ sub _timerexistsfuzzy { my $eventdata = shift || return error('No data defined!'); # Adjust timers set by the autotimer, if event changed +/- five minutes. - my $sql = "SELECT SQL_CACHE ID from TIMERS where - ChannelID = ? - and ? between (UNIX_TIMESTAMP(NextStartTime) - 300) AND (UNIX_TIMESTAMP(NextStartTime) + 300) - and ? between (UNIX_TIMESTAMP(NextStopTime) - 300) AND (UNIX_TIMESTAMP(NextStopTime) + 300) - and File = ? + my $sql = "SELECT SQL_CACHE id from TIMERS where + channel = ? + and ? between (UNIX_TIMESTAMP(starttime) - 300) AND (UNIX_TIMESTAMP(starttime) + 300) + and ? between (UNIX_TIMESTAMP(stoptime) - 300) AND (UNIX_TIMESTAMP(stoptime) + 300) + and file = ? and aux like ?"; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{ChannelID}, + $sth->execute($eventdata->{channel}, $eventdata->{starttime}, $eventdata->{stoptime}, - $eventdata->{File}, + $eventdata->{file}, "%".$eventdata->{aux}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchrow_hashref(); - return $erg->{ID} + return $erg->{id} if($erg); return 0; } @@ -1381,7 +1387,7 @@ sub _recordexists { AND CONCAT_WS('~',e.title,IF(e.subtitle<>'',e.subtitle,NULL)) = ?"; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{File}) + $sth->execute($eventdata->{file}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchrow_hashref(); return $erg->{cc} @@ -1395,13 +1401,13 @@ sub _chronicleexists { my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my $chroniclemod = main::getModule('CHRONICLE'); + my $modCH = main::getModule('CHRONICLE'); return 0 - unless($chroniclemod and $chroniclemod->{active} eq 'y'); + unless($modCH and $modCH->{active} eq 'y'); my $sql = "SELECT SQL_CACHE count(*) as cc from CHRONICLE where title = ?"; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{File}) + $sth->execute($eventdata->{file}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchrow_hashref(); return $erg->{cc} @@ -1415,10 +1421,10 @@ sub _timerexiststitle { my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my $sql = "SELECT SQL_CACHE count(*) as cc from TIMERS where File = ?"; + my $sql = "SELECT SQL_CACHE count(*) as cc from TIMERS where file = ?"; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{File}) + $sth->execute($eventdata->{file}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchrow_hashref(); return $erg->{cc} @@ -1470,8 +1476,8 @@ sub _placeholder { if($title =~ /.*%.*%.*/sig) { my %at_details; $at_details{'title'} = $data->{Title}; - $at_details{'subtitle'} = $data->{Subtitle} ? $data->{Subtitle} : $data->{Start}; - $at_details{'date'} = $data->{Day}; + $at_details{'subtitle'} = $data->{Subtitle} ? $data->{Subtitle} : $data->{start}; + $at_details{'date'} = $data->{day}; $at_details{'regie'} = $1 if $data->{description} =~ m/\|Director: (.*?)\|/; $at_details{'category'} = $1 if $data->{description} =~ m/\|Category: (.*?)\|/; $at_details{'genre'} = $1 if $data->{description} =~ m/\|Genre: (.*?)\|/; diff --git a/lib/XXV/MODULES/EPG.pm b/lib/XXV/MODULES/EPG.pm index 2a545eb..51c515c 100644 --- a/lib/XXV/MODULES/EPG.pm +++ b/lib/XXV/MODULES/EPG.pm @@ -202,7 +202,7 @@ sub _init { return 0; } - my $version = 26; # Must be increment if rows of table changed + my $version = 27; # Must be increment if rows of table changed # this tables hasen't handmade user data, # therefore old table could dropped if updated rows @@ -216,7 +216,7 @@ sub _init { $obj->{dbh}->do(qq| CREATE TABLE IF NOT EXISTS $table ( - eventid bigint unsigned NOT NULL default '0', + eventid int unsigned NOT NULL default '0', title text NOT NULL default '', subtitle text default '', description text, @@ -665,7 +665,7 @@ sub search { unshift(@$erg, $fields); } $console->table($erg, { - timers => $tim->getEpgIds, + timers => $tim->getEvents, runningTimer => $tim->getRunningTimer('eventid'), } ); @@ -722,7 +722,7 @@ order by $console->table($erg, { channels => $mod->ChannelArray('Name'), current => $mod->ChannelToPos($cid), - timers => $tim->getEpgIds, + timers => $tim->getEvents, runningTimer => $tim->getRunningTimer('eventid'), } ); @@ -803,7 +803,7 @@ where unshift(@$erg, $fields); my $tim = main::getModule('TIMERS'); - $console->table($erg,{timers => $tim->getEpgIds}); + $console->table($erg,{timers => $tim->getEvents}); } # ------------------ @@ -885,7 +885,7 @@ ORDER BY $console->table($erg, { - timers => $tim->getEpgIds, + timers => $tim->getEvents, runningTimer => $tim->getRunningTimer('eventid'), periods => $obj->{periods}, cgroups => $cgroups, @@ -960,7 +960,7 @@ ORDER BY my $tim = main::getModule('TIMERS'); $console->table($erg, { - timers => $tim->getEpgIds, + timers => $tim->getEvents, runningTimer => $tim->getRunningTimer('eventid'), zeit => $zeit, periods => $obj->{periods}, @@ -1104,7 +1104,7 @@ ORDER BY my $tim = main::getModule('TIMERS'); $console->table($data, { - timers => $tim->getEpgIds, + timers => $tim->getEvents, runningTimer => $tim->getRunningTimer('eventid'), zeitvon => $zeitvon, zeitbis => $zeitbis, @@ -1127,8 +1127,8 @@ sub checkOnTimer { my $sql = qq| SELECT SQL_CACHE - e.starttime as NextStartTime, - ADDDATE(e.starttime, INTERVAL e.duration SECOND) as NextStopTime, + e.starttime as starttime, + ADDDATE(e.starttime, INTERVAL e.duration SECOND) as stoptime, LEFT(c.Source,1) as source, c.TID as transponderid FROM @@ -1147,7 +1147,7 @@ WHERE my $tmod = main::getModule('TIMERS'); # Zeige den Title des Timers foreach (@$erg) { - $_ = $tmod->getTimerById((split(':', $_))[0])->{File} + $_ = $tmod->getTimerById((split(':', $_))[0])->{file} unless($_ eq 'ok'); } diff --git a/lib/XXV/MODULES/MOVETIMER.pm b/lib/XXV/MODULES/MOVETIMER.pm index 087e953..c9df382 100644 --- a/lib/XXV/MODULES/MOVETIMER.pm +++ b/lib/XXV/MODULES/MOVETIMER.pm @@ -184,31 +184,32 @@ sub _movetimer { my $sth = $self->{dbh}->prepare( q| select - t.Id as Id, - IF(t.Status & 1,'y','n') as Activ, - IF(t.Status & 4,'y','n') as VPS, - t.Status as Status, - t.ChannelID as ChannelID, - t.File as File, + t.id as id, + t.pos as pos, + IF(t.flags & 1,'y','n') as activ, + IF(t.flags & 4,'y','n') as vps, + t.flags as flags, + t.channel as channel, + t.file as file, t.aux as aux, - t.Day as Day, - t.Start as Start, - t.Stop as Stop, - t.Priority as Priority, - t.Lifetime as Lifetime, - t.Collision as Collision, - IF(t.Status & 1 and NOW() between t.NextStartTime and t.NextStopTime,1,0) as Running + t.day as day, + t.start as start, + t.stop as stop, + t.priority as priority, + t.lifetime as lifetime, + t.collision as collision, + IF(t.flags & 1 and NOW() between t.starttime and t.stoptime,1,0) as running from TIMERS as t,MOVETIMER as m where - m.source = t.channelid + m.source = t.channel and m.move != 'm' - and t.Status & 1 + and t.flags & 1 |); if(!$sth->execute()) { return error sprintf("Couldn't execute query: %s.",$sth->errstr); } - my $timer = $sth->fetchall_hashref('Id'); + my $timer = $sth->fetchall_hashref('id'); return unless($timer); $sth = $self->{dbh}->prepare("select * from MOVETIMER where move != 'n'"); @@ -229,7 +230,7 @@ q| my $rule = $rules->{$id}; - if($data->{ChannelID} eq $rule->{source}) { + if($data->{channel} eq $rule->{source}) { # Move timer if collision present if($rule->{move} eq 'collision') { @@ -243,39 +244,41 @@ q| if($col > $maxPrio); } # dont solve collision until lesser own Priority - last if($maxPrio < $data->{Priority}); + last if($maxPrio < $data->{priority}); } debug sprintf("Move timer %d (%s) at %s : from %s to %s", - $data->{Id}, - $data->{File}, - $data->{Day}, + $data->{pos}, + $data->{file}, + $data->{day}, $rule->{source}, $rule->{destination}); if($rule->{original} eq 'keep' ) { # Keep original timer but disable him - $data->{Activ} = 'n'; - $self->modifyTimer($data,$tid); + $data->{activ} = 'n'; + $self->modifyTimer($data); # Create new timer - $data->{Activ} = 'y'; - $data->{ChannelID} = $rule->{destination}; - $self->modifyTimer($data,0); + $data->{activ} = 'y'; + $data->{channel} = $rule->{destination}; + $data->{pos} = 0; + $self->modifyTimer($data); } elsif($rule->{original} eq 'copy' ) { # Copy to new timer - $data->{Activ} = 'y'; - $data->{ChannelID} = $rule->{destination}; - $self->modifyTimer($data,0); + $data->{activ} = 'y'; + $data->{channel} = $rule->{destination}; + $data->{pos} = 0; + $self->modifyTimer($data); } else { # Edit timer direct - $data->{ChannelID} = $rule->{destination}; - $self->modifyTimer($data,$tid); + $data->{channel} = $rule->{destination}; + $self->modifyTimer($data); } @@ -302,26 +305,25 @@ sub modifyTimer { # ------------------ my $self = shift || return error('No object defined!'); my $data = shift || return error('No data defined!'); - my $id = shift || 0; - my $status = ($data->{Activ} eq 'y' ? 1 : 0); - $status |= ($data->{VPS} eq 'y' ? 4 : 0); + my $flags = ($data->{activ} eq 'y' ? 1 : 0); + $flags |= ($data->{vps} eq 'y' ? 4 : 0); - $data->{File} =~ s/:/|/g; - $data->{File} =~ s/(\r|\n)//sig; + $data->{file} =~ s/:/|/g; + $data->{file} =~ s/(\r|\n)//sig; $self->{svdrp}->queue_cmds( sprintf("%s %s:%s:%s:%s:%s:%s:%s:%s:%s", - $id ? "modt $id" : "newt", - $status, - $data->{ChannelID}, - $data->{Day}, - $data->{Start}, - $data->{Stop}, - int($data->{Priority}), - int($data->{Lifetime}), - $data->{File}, - ($data->{aux} || '') + $data->{pos} ? "modt $data->{pos}" : "newt", + $flags, + $data->{channel}, + $data->{day}, + $data->{start}, + $data->{stop}, + int($data->{priority}), + int($data->{lifetime}), + $data->{file}, + ($data->{aux} || '') ) ); } diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm index b48b588..afda6bf 100644 --- a/lib/XXV/MODULES/RECORDS.pm +++ b/lib/XXV/MODULES/RECORDS.pm @@ -269,7 +269,7 @@ sub _init { return 0; } - my $version = 26; # Must be increment if rows of table changed + my $version = 27; # Must be increment if rows of table changed # this tables hasen't handmade user data, # therefore old table could dropped if updated rows if(!tableUpdated($obj->{dbh},'RECORDS',$version,1)) { @@ -279,7 +279,7 @@ sub _init { # Look for table or create this table $obj->{dbh}->do(qq| CREATE TABLE IF NOT EXISTS RECORDS ( - eventid bigint unsigned NOT NULL, + eventid int unsigned NOT NULL, RecordId int unsigned not NULL, RecordMD5 varchar(32) NOT NULL, Path text NOT NULL, diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm index 00d9ec3..ae978cc 100644 --- a/lib/XXV/MODULES/TIMERS.pm +++ b/lib/XXV/MODULES/TIMERS.pm @@ -143,24 +143,24 @@ sub module { Actions => [ q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); - return if($timer->{AutotimerId}); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); + return if($timer->{autotimerid}); my $desc = getDataById($timer->{eventid}, 'EPG', 'eventid') if($timer->{eventid}); - my $title = sprintf(gettext("New timer found: %s"),$timer->{File}); + my $title = sprintf(gettext("New timer found: %s"),$timer->{file}); my $description = ''; - my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{ChannelID}); + my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{channel}); $description .= sprintf(gettext("Channel: %s"), $channel); $description .= "\r\n"; Date_Init("Language=English"); - my $d = ParseDate($timer->{NextStartTime}); - $timer->{NextStartTime} = datum(UnixDate($d,"%s")) if($d); + my $d = ParseDate($timer->{starttime}); + $timer->{starttime} = datum(UnixDate($d,"%s")) if($d); $description .= sprintf(gettext("On: %s to %s"), - $timer->{NextStartTime}, - fmttime($timer->{Stop})); + $timer->{starttime}, + fmttime($timer->{stop})); $description .= "\r\n"; $description .= sprintf(gettext("Description: %s"), $desc->{description} ) if($desc && $desc->{description}); @@ -170,13 +170,13 @@ sub module { |, q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); my $soap = main::getModule('SHARE'); my $level = 1; - if($timer->{AutotimerId}) { - $level = (($timer->{Priority} <= 50 or $timer->{Lifetime} < 33) ? 2 : 3); + if($timer->{autotimerid}) { + $level = (($timer->{priority} <= 50 or $timer->{lifetime} < 33) ? 2 : 3); } else { - $level = (($timer->{Priority} <= 50 or $timer->{Lifetime} < 33) ? 4 : 5); + $level = (($timer->{priority} <= 50 or $timer->{lifetime} < 33) ? 4 : 5); } if($timer->{eventid}) { @@ -199,23 +199,23 @@ sub module { Actions => [ q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); - my $title = sprintf(gettext("Timer deleted: %s"),$timer->{File}); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); + my $title = sprintf(gettext("Timer deleted: %s"),$timer->{file}); my $desc = getDataById($timer->{eventid}, 'EPG', 'eventid') if($timer->{eventid}); my $description = ''; - my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{ChannelID}); + my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{channel}); $description .= sprintf(gettext("Channel: %s"), $channel); $description .= "\r\n"; Date_Init("Language=English"); - my $d = ParseDate($timer->{NextStartTime}); - $timer->{NextStartTime} = datum(UnixDate($d,"%s")) if($d); + my $d = ParseDate($timer->{starttime}); + $timer->{starttime} = datum(UnixDate($d,"%s")) if($d); $description .= sprintf(gettext("On: %s to %s"), - $timer->{NextStartTime}, - fmttime($timer->{Stop})); + $timer->{starttime}, + fmttime($timer->{stop})); $description .= "\r\n"; $description .= sprintf(gettext("Description: %s"), $desc->{description} ) if($desc && $desc->{description}); @@ -225,7 +225,7 @@ sub module { |, q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); my $soap = main::getModule('SHARE'); my $level = 1; @@ -249,28 +249,28 @@ sub module { Actions => [ q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); my $title; if($args->{Type} eq 'on') { - $title = sprintf(gettext("Timer activated: %s"),$timer->{File}); + $title = sprintf(gettext("Timer activated: %s"),$timer->{file}); } else { - $title = sprintf(gettext("Timer deactivated: %s"),$timer->{File}); + $title = sprintf(gettext("Timer deactivated: %s"),$timer->{file}); } my $description = ''; - my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{ChannelID}); + my $channel = main::getModule('CHANNELS')->ChannelToName($timer->{channel}); $description .= sprintf(gettext("Channel: %s"), $channel); $description .= "\r\n"; Date_Init("Language=English"); - my $d = ParseDate($timer->{NextStartTime}); - $timer->{NextStartTime} = datum(UnixDate($d,"%s")) if($d); + my $d = ParseDate($timer->{starttime}); + $timer->{starttime} = datum(UnixDate($d,"%s")) if($d); my $desc = getDataById($timer->{eventid}, 'EPG', 'eventid') if($timer->{eventid}); $description .= sprintf(gettext("On: %s to %s"), - $timer->{NextStartTime}, - fmttime($timer->{Stop})); + $timer->{starttime}, + fmttime($timer->{stop})); $description .= "\r\n"; $description .= sprintf(gettext("Description: %s"), $desc->{description} ) if($desc && $desc->{description}); @@ -280,13 +280,13 @@ sub module { |, q|sub{ my $args = shift; my $event = shift; - my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id'); + my $timer = getDataById($args->{TimerId}, 'TIMERS', 'pos'); my $soap = main::getModule('SHARE'); my $level = ($args->{Type} eq 'off' ? 1 : 2); - if($timer->{AutotimerId} and $args->{Type} eq 'on') { - $level = (($timer->{Priority} <= 50 or $timer->{Lifetime} < 33) ? 2 : 3); + if($timer->{autotimerid} and $args->{Type} eq 'on') { + $level = (($timer->{priority} <= 50 or $timer->{lifetime} < 33) ? 2 : 3); } elsif($args->{Type} eq 'on') { - $level = (($timer->{Priority} <= 50 or $timer->{Lifetime} < 33) ? 4 : 5); + $level = (($timer->{priority} <= 50 or $timer->{lifetime} < 33) ? 4 : 5); } if($timer->{eventid}) { @@ -308,21 +308,21 @@ sub module { Actions => [ q|sub{ my $args = shift; my $event = shift; - my $soap = main::getModule('SHARE'); - my $epg = main::getModule('EPG'); + my $modS = main::getModule('SHARE') or return; + my $modE = main::getModule('EPG') or return; for (my $i = 1; $i<=$args->{HighId}; $i++) { - my $timer = getDataById($i, 'TIMERS', 'Id'); + my $timer = getDataById($i, 'TIMERS', 'pos'); my $level = 1; - if($timer->{AutotimerId} and ($timer->{Status} & 1)) { - $level = (($timer->{Priority} <= 50 or $timer->{Lifetime} < 33) ? 2 : 3); - } elsif($timer->{Status} & 1) { - $level = (($timer->{Priority} <= 50 or $timer->{Lifetime} < 33) ? 4 : 5); + if($timer->{autotimerid} and ($timer->{flags} & 1)) { + $level = (($timer->{priority} <= 50 or $timer->{lifetime} < 33) ? 2 : 3); + } elsif($timer->{flags} & 1) { + $level = (($timer->{priority} <= 50 or $timer->{lifetime} < 33) ? 4 : 5); } if($timer->{eventid}) { - my $event = $epg->getId($timer->{eventid}, 'UNIX_TIMESTAMP(starttime) + duration as STOPTIME'); - $soap->setEventLevel($timer->{eventid}, $level, $event->{STOPTIME}); + my $event = $modE->getId($timer->{eventid}, 'UNIX_TIMESTAMP(starttime) + duration as STOPTIME'); + $modS->setEventLevel($timer->{eventid}, $level, $event->{STOPTIME}); } } }|, @@ -402,7 +402,7 @@ sub _init { return 0; } - my $version = 27; # Must be increment if rows of table changed + my $version = 28; # Must be increment if rows of table changed # this tables hasen't handmade user data, # therefore old table could dropped if updated rows if(!tableUpdated($obj->{dbh},'TIMERS',$version,1)) { @@ -412,26 +412,27 @@ sub _init { # Look for table or create this table $obj->{dbh}->do(qq| CREATE TABLE IF NOT EXISTS TIMERS ( - Id int(11) unsigned NOT NULL, - Status char(1) default 1, - ChannelID varchar(100) NOT NULL default '', - Day varchar(20) default '-------', - Start int(11) unsigned, - Stop int(11) unsigned, - Priority tinyint(2), - Lifetime tinyint(2), - File text, + id varchar(32) NOT NULL, + pos int(11) unsigned NOT NULL, + flags char(1) default 1, + channel varchar(100) NOT NULL default '', + day varchar(20) default '-------', + start int(11) unsigned, + stop int(11) unsigned, + priority tinyint(2), + lifetime tinyint(2), + file text, aux text default '', - NextStartTime datetime, - NextStopTime datetime, - Collision varchar(100) default '0', - eventid bigint unsigned default '0', + starttime datetime, + stoptime datetime, + collision varchar(100) default '0', + eventid int unsigned default '0', eventstarttime datetime, eventduration int unsigned default '0', - AutotimerId int(11) unsigned default '0', + autotimerid int(11) unsigned default '0', + checked char(1) default 0, addtime timestamp, - Checked char(1) default 0, - PRIMARY KEY (Id) + PRIMARY KEY(id) ) COMMENT = '$version' |); @@ -466,30 +467,20 @@ sub saveTimer { # ------------------ my $obj = shift || return error('No object defined!'); my $data = shift || return error('No data defined!'); - my $timerid = shift || 0; - $obj->_saveTimer($data,$timerid); + $obj->_saveTimer($data); if($obj->{svdrp}->queue_cmds('COUNT')) { my $erg = $obj->{svdrp}->queue_cmds("CALL"); # Aufrufen der Kommandos # Save shortly this timer in DB if this only a new timer (at) # Very Important for Autotimer! my $pos = $1 if($erg->[1] =~ /^250\s+(\d+)/); - if(! $timerid and $pos) { - $obj->insert([ - $data->{Status}, - $data->{ChannelID}, - $data->{Day}, - $data->{Start}, - $data->{Stop}, - int($data->{Priority}), - int($data->{Lifetime}), - $data->{File}, - ($data->{aux} || '') - ], $pos); + if(!(exists $data->{pos}) and $pos) { + $data->{pos} = $pos; + $obj->_insert($data); } - event sprintf('Save timer "%s" with id: "%d"', $data->{File}, $pos || 0); + event sprintf('Save timer "%s" with id: "%d"', $data->{file}, $pos || 0); return $erg; } @@ -501,25 +492,27 @@ sub _saveTimer { # ------------------ my $obj = shift || return error('No object defined!'); my $data = shift || return error('No data defined!'); - my $timerid = shift || 0; - $data->{Status} = ($data->{Activ} eq 'y' ? 1 : 0); - $data->{Status} |= ($data->{VPS} eq 'y' ? 4 : 0); + $data->{flags} = ($data->{activ} eq 'y' ? 1 : 0); + $data->{flags} |= ($data->{vps} eq 'y' ? 4 : 0); + + $data->{file} =~ s/(\r|\n)//sg; + $data->{aux} =~ s/(\r|\n)//sg; - $data->{File} =~ s/:/|/g; - $data->{File} =~ s/(\r|\n)//sig; + my $file = $data->{file}; + $file =~ s/:/|/g; $obj->{svdrp}->queue_cmds( sprintf("%s %s:%s:%s:%s:%s:%s:%s:%s:%s", - $timerid ? "modt $timerid" : "newt", - $data->{Status}, - $data->{ChannelID}, - $data->{Day}, - $data->{Start}, - $data->{Stop}, - int($data->{Priority}), - int($data->{Lifetime}), - $data->{File}, + $data->{pos} ? "modt $data->{pos}" : "newt", + $data->{flags}, + $data->{channel}, + $data->{day}, + $data->{start}, + $data->{stop}, + int($data->{priority}), + int($data->{lifetime}), + $file, ($data->{aux} || '') ) ); @@ -527,19 +520,19 @@ sub _saveTimer { sub _newTimerdefaults { my $obj = shift || return error('No object defined!'); - my $epg = shift; + my $timer = shift; - $epg->{Activ} = 'y'; - $epg->{Priority} = $obj->{Priority}; - $epg->{Lifetime} = $obj->{Lifetime}; + $timer->{activ} = 'y'; + $timer->{priority} = $obj->{Priority}; + $timer->{lifetime} = $obj->{Lifetime}; - if($epg->{VpsStart} && $obj->{usevpstime} eq 'y') { - $epg->{VPS} = 'y'; - $epg->{Day} = $epg->{VpsDay}; - $epg->{Start} = $epg->{VpsStart}; - $epg->{Stop} = $epg->{VpsStop}; + if($timer->{vpsstart} && $obj->{usevpstime} eq 'y') { + $timer->{vps} = 'y'; + $timer->{day} = $timer->{vpsday}; + $timer->{start} = $timer->{vpsstart}; + $timer->{stop} = $timer->{vpsstop}; } else { - $epg->{VPS} = 'n'; + $timer->{vps} = 'n'; } } # ------------------ @@ -557,15 +550,15 @@ sub newTimer { my $sql = qq| SELECT SQL_CACHE eventid, - channel_id as ChannelID, + channel_id as channel, description, - CONCAT_WS('~', title, subtitle) as File, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) - ? ), '%Y-%m-%d') as Day, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) - ? ), '%H%i') as Start, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) + duration + ? ), '%H%i') as Stop, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(vpstime)), '%Y-%m-%d') as VpsDay, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(vpstime)), '%H%i') as VpsStart, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(vpstime) + duration), '%H%i') as VpsStop + CONCAT_WS('~', title, subtitle) as file, + DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) - ? ), '%Y-%m-%d') as day, + DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) - ? ), '%H%i') as start, + DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) + duration + ? ), '%H%i') as stop, + DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(vpstime)), '%Y-%m-%d') as vpsday, + DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(vpstime)), '%H%i') as vpsstart, + DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(vpstime) + duration), '%H%i') as vpsstop FROM EPG WHERE|; @@ -590,11 +583,11 @@ WHERE|; if(not ref $epg) { my $t = time; $epg = { - ChannelID => '', - File => gettext('New timer'), - Day => my_strftime("%Y-%m-%d",$t), - Start => my_strftime("%H%M",$t), - Stop => my_strftime("%H%M",$t) + channel => '', + file => gettext('New timer'), + day => my_strftime("%Y-%m-%d",$t), + start => my_strftime("%H%M",$t), + stop => my_strftime("%H%M",$t) }; $obj->_newTimerdefaults($epg); } @@ -615,21 +608,21 @@ sub _editTimer { my $sth = $obj->{dbh}->prepare( qq| SELECT SQL_CACHE - Id, - ChannelID, - File, + id, + channel, + file, aux, - Start, - Stop, - Day, - Priority, - Lifetime, - IF(Status & 1,'y','n') as Activ, - IF(Status & 4,'y','n') as VPS + start, + stop, + day, + priority, + lifetime, + IF(flags & 1,'y','n') as activ, + IF(flags & 4,'y','n') as vps FROM TIMERS WHERE - Id = ? + id = ? |); $sth->execute($timerid) or return $console->err(sprintf(gettext("Timer '%s' does not exist in the database!"),$timerid)); @@ -641,28 +634,33 @@ WHERE $timerData->{aux} =~ s/(\r|\n)//sig if(defined $timerData->{aux}); - my $mod = main::getModule('CHANNELS'); + my $modC = main::getModule('CHANNELS'); my $con = $console->typ eq "CONSOLE"; my $questions = [ - 'Id' => { + 'id' => { typ => 'hidden', - def => $timerData->{Id} || 0, + def => $timerData->{id} || 0, }, - 'Activ' => { + 'activ' => { typ => 'confirm', - def => $timerData->{Activ}, + def => $timerData->{activ}, msg => gettext('Enable this timer'), }, - 'VPS' => { + 'vps' => { typ => 'confirm', - def => $timerData->{VPS}, + def => $timerData->{vps}, msg => gettext('Use PDC time to control timer'), }, - 'ChannelID' => { + 'file' => { + msg => gettext('Title of recording'), + def => $timerData->{file}, + req => gettext("This is required!"), + }, + 'channel' => { typ => 'list', - def => $con ? $mod->ChannelToPos($timerData->{ChannelID}) : $timerData->{ChannelID}, - choices => $con ? $mod->ChannelArray('Name') : $mod->ChannelIDArray('Name'), + def => $con ? $modC->ChannelToPos($timerData->{channel}) : $timerData->{channel}, + choices => $con ? $modC->ChannelArray('Name') : $modC->ChannelIDArray('Name'), msg => gettext('Which channel should recorded'), req => gettext("This is required!"), check => sub{ @@ -670,17 +668,17 @@ WHERE return undef, gettext("This is required!") unless($value); - my $ch = $mod->ToCID($value); + my $ch = $modC->ToCID($value); return undef, sprintf(gettext("This channel '%s' does not exist!"),$value) unless($ch); return $ch; }, }, - 'Day' => { + 'day' => { typ => $con ? 'string' : 'date', def => sub{ # Convert day from VDR format to locale format - my $value = $timerData->{Day}; + my $value = $timerData->{day}; if($value and $value =~ /^\d{4}\-\d{2}-\d{2}$/) { Date_Init("Language=English"); my $d = ParseDate($value); @@ -715,10 +713,10 @@ WHERE } }, }, - 'Start' => { + 'start' => { typ => 'string', def => sub{ - return fmttime($timerData->{Start}); + return fmttime($timerData->{start}); }, msg => gettext("Start time in format 'HH:MM'"), check => sub{ @@ -734,10 +732,10 @@ WHERE } }, }, - 'Stop' => { + 'stop' => { typ => 'string', def => sub{ - return fmttime($timerData->{Stop} || 0 ); + return fmttime($timerData->{stop}); }, msg => gettext("End time in format 'HH:MM'"), check => sub{ @@ -753,10 +751,10 @@ WHERE } }, }, - 'Priority' => { + 'priority' => { typ => 'integer', msg => sprintf(gettext('Priority (%d ... %d)'),0,$console->{USER}->{MaxPriority} ? $console->{USER}->{MaxPriority} : 99 ), - def => int($timerData->{Priority}), + def => int($timerData->{priority}), check => sub{ my $value = shift || 0; if($value =~ /^\d+$/sig and $value >= 0 and $value < 100) { @@ -769,10 +767,10 @@ WHERE } }, }, - 'Lifetime' => { + 'lifetime' => { typ => 'integer', msg => sprintf(gettext('Lifetime (%d ... %d)'),0,$console->{USER}->{MaxLifeTime} ? $console->{USER}->{MaxLifeTime} : 99 ), - def => int($timerData->{Lifetime}), + def => int($timerData->{lifetime}), check => sub{ my $value = shift || 0; if($value =~ /^\d+$/sig and $value >= 0 and $value < 100) { @@ -785,19 +783,14 @@ WHERE } }, }, - 'File' => { - msg => gettext('Title of recording'), - def => $timerData->{File}, - req => gettext("This is required!"), - }, 'aux' => { typ => 'hidden', def => $timerData->{aux}, } ]; - if($timerData->{Id} || $timerData->{description}) { - my $description = $timerData->{description} || $obj->getEpgDesc($timerData->{Id}); + if($timerData->{id} || $timerData->{description}) { + my $description = $timerData->{description} || $obj->getEpgDesc($timerData->{id}); if($description) { push(@$questions, 'Description' => { @@ -813,7 +806,10 @@ WHERE : gettext('New timer')), $questions, $data); if(ref $datasave eq 'HASH') { - $obj->_saveTimer($datasave, $timerid); + if($timerid) { + $datasave->{pos} = $obj->getPos($timerid); + } + $obj->_saveTimer($datasave); return 1; } return 0; @@ -840,14 +836,14 @@ sub editTimer { unless($error) { debug sprintf('%s timer with title "%s" is saved%s', ($timerid ? 'Changed' : 'New'), - $data->{File}, + $data->{file}, ( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" ) ); $console->message($erg); } else { error sprintf('%s timer with title "%s" does\'nt saved : %s', ($timerid ? 'Changed' : 'New'), - $data->{File}, + $data->{file}, $error ); $console->err($erg); @@ -868,25 +864,31 @@ sub deleteTimer { my $timerid = shift || return $console->err(gettext("No timer defined for deletion! Please use tdelete 'tid'.")); # If timerid the edittimer my $answer = shift || 0; - my @timers = reverse sort{ $a <=> $b } split(/[^0-9]/, $timerid); + my @timers = split(/[^0-9a-f]/, $timerid); - my $sql = sprintf('SELECT SQL_CACHE Id,File,ChannelID,NextStartTime,IF(Status & 1 and NOW() between NextStartTime and NextStopTime,1,0) as Running FROM TIMERS where Id in (%s)', join(',' => ('?') x @timers)); + my $sql = sprintf('SELECT SQL_CACHE id,pos,file,channel,starttime,IF(flags & 1 and NOW() between starttime and stoptime,1,0) FROM TIMERS where id in (%s) ORDER BY pos desc', join(',' => ('?') x @timers)); my $sth = $obj->{dbh}->prepare($sql); $sth->execute(@timers) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); - my $data = $sth->fetchall_hashref('Id'); - - my $mod = main::getModule('CHANNELS') or return; - foreach my $tid (@timers) { - unless(exists $data->{$tid}) { - $console->err(sprintf(gettext("Timer '%s' does not exist in the database!"), $tid)); - next; - } + my $data = $sth->fetchall_arrayref(); + + my $modC = main::getModule('CHANNELS') or return; + foreach my $d (@$data) { + my $t = { + id => $d->[0], + pos => $d->[1], + file => $d->[2], + channel => $d->[3], + start => $d->[4], + running => $d->[5] + }; if(ref $console and $console->{TYP} eq 'CONSOLE') { - $data->{$tid}->{ChannelID} = $mod->ChannelToName($data->{$tid}->{ChannelID}); - - $console->table($data->{$tid}); + $console->table({ + gettext('Title') => $t->{file}, + gettext('Channel') => $modC->ChannelToName($t->{channel}), + gettext('Start') => $t->{start}, + }); my $confirm = $console->confirm({ typ => 'confirm', def => 'y', @@ -896,15 +898,30 @@ sub deleteTimer { } debug sprintf('Delete timer with title "%s"%s', - $data->{$tid}->{File}, + $t->{file}, ( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" ) ); - $obj->{svdrp}->queue_cmds(sprintf("modt %d off", $tid)) - if($data->{$tid}->{Running}); - $obj->{svdrp}->queue_cmds(sprintf("delt %d", $tid)); + $obj->{svdrp}->queue_cmds(sprintf("modt %d off", $t->{pos})) + if($t->{running}); + $obj->{svdrp}->queue_cmds(sprintf("delt %d", $t->{pos})); + + # Delete timer from request, if found in database + my $i = 0; + for my $x (@timers) { + if ( $x eq $t->{id} ) { # Remove known MD5 from user request + splice @timers, $i, 1; + } else { + $i++; + } + } } + con_err($console, + sprintf(gettext("Timer '%s' does not exist in the database!"), + join('\',\'',@timers))) + if(scalar @timers); + if($obj->{svdrp}->queue_cmds('COUNT')) { my $erg = $obj->{svdrp}->queue_cmds("CALL"); # Aufrufen der Kommandos $console->msg($erg, $obj->{svdrp}->err) @@ -931,38 +948,58 @@ sub toggleTimer { my $console = shift || return error('No console defined!'); my $timerid = shift || return $console->err(gettext("No timer defined to toggle! Please use ttoggle 'id'.")); # If timerid the edittimer - my @timers = reverse sort{ $a <=> $b } split(/[^0-9]/, $timerid); + my @timers = split(/[^0-9a-f]/, $timerid); - my $sql = sprintf('SELECT SQL_CACHE Id,File,Status,NextStartTime, NextStopTime FROM TIMERS where Id in (%s)', join(',' => ('?') x @timers)); + my $sql = sprintf('SELECT SQL_CACHE id,pos,file,flags,starttime,stoptime FROM TIMERS where id in (%s) ORDER BY pos desc', join(',' => ('?') x @timers)); my $sth = $obj->{dbh}->prepare($sql); $sth->execute(@timers) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); - my $data = $sth->fetchall_hashref('Id'); + my $data = $sth->fetchall_arrayref(); my $ref; - - for my $timer (@timers) { - - unless(exists $data->{$timer}) { - $console->err(sprintf(gettext("Timer '%s' does not exist in the database!"), $timer)); - next; - } + my @success; + + foreach my $d (@$data) { + my $t = { + id => $d->[0], + pos => $d->[1], + file => $d->[2], + flags => $d->[3], + start => $d->[4], + stop => $d->[5] + }; # Build query for all timers with possible collisions - $ref .= " or '$data->{$timer}->{NextStartTime}' between NextStartTime and NextStopTime" - . " or '$data->{$timer}->{NextStopTime}' between NextStartTime and NextStopTime"; + $ref .= " or '$t->{start}' between starttime and stoptime" + . " or '$t->{stop}' between starttime and stoptime"; - my $status = (($data->{$timer}->{Status} & 1) ? 'off' : 'on'); + my $status = (($t->{flags} & 1) ? 'off' : 'on'); debug sprintf('Timer with title "%s" is %s%s', - $data->{$timer}->{File}, + $t->{file}, ($status eq 'on' ? 'activated' : 'deactivated'), ( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" ) ); - $obj->{svdrp}->queue_cmds("modt $data->{$timer}->{Id} $status"); # Sammeln der Kommandos + $obj->{svdrp}->queue_cmds("modt $t->{pos} $status"); # Sammeln der Kommandos + + # Delete timer from request, if found in database + my $i = 0; + for my $x (@timers) { + if ( $x eq $t->{id} ) { # Remove known MD5 from user request + splice @timers, $i, 1; + } else { + $i++; + } + } + push(@success,$t->{id}); } + con_err($console, + sprintf(gettext("Timer '%s' does not exist in the database!"), + join('\',\'',@timers))) + if(scalar @timers); + if($obj->{svdrp}->queue_cmds('COUNT')) { my $erg = $obj->{svdrp}->queue_cmds("CALL"); # Aufrufen der Kommandos @@ -977,10 +1014,10 @@ sub toggleTimer { if(ref $console and $console->typ eq 'AJAX') { # { "data" : [ [ ID, ON, RUN, CONFLICT ], .... ] } # { "data" : [ [ 5, 1, 0, 0 ], .... ] } - my $sql = sprintf('SELECT SQL_CACHE Id, Status & 1 as Active, IF(NOW() between NextStartTime and NextStopTime,1,0) as Running, Collision from TIMERS where Id in (%s) %s', - join(',' => ('?') x @timers),$ref); + my $sql = sprintf('SELECT SQL_CACHE id, flags & 1 as Active, IF(NOW() between starttime and stoptime,1,0) as Running, Collision from TIMERS where id in (%s) %s', + join(',' => ('?') x @success),$ref); my $sth = $obj->{dbh}->prepare($sql); - $sth->execute(@timers) + $sth->execute(@success) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchall_arrayref(); $console->table($erg); @@ -995,62 +1032,62 @@ sub toggleTimer { # ------------------ -sub insert { +sub _insert { # ------------------ my $obj = shift || return error('No object defined!'); - my $data = shift || return; - my $pos = shift || return; + my $timer = shift || return; my $checked = shift || 0; # import only status which used from vdr and thereby exclude eventid from vdradmin - $data->[0] &= 15; + $timer->{flags} &= 15; # change pos to channelid, because change to telnet reader - if(index($data->[1], '-') < 0) { - $data->[1] = main::getModule('CHANNELS')->ToCID($data->[1]) - or return error(sprintf("Couldn't get channel from this data: %s", join(',', @$data))); + if(index($timer->{channel}, '-') < 0) { + $timer->{channel} = main::getModule('CHANNELS')->ToCID($timer->{channel}) + or return error(sprintf("Couldn't get channel from this timer: %d '%s'", $timer->{pos}, $timer->{channel})); } - # POS - unshift(@$data, $pos); - $data->[8] =~ s/\|/\:/g; + $timer->{file} =~ s/\|/\:/g; # NextTime - my $nexttime = $obj->getNextTime( $data->[3], $data->[4], $data->[5] ) - or return error(sprintf("Couldn't get time from this data: %s", join(',', @$data))); - push(@$data, $nexttime->{start}, $nexttime->{stop}); - - # insert placeholder - push(@$data, 0); # eventid - push(@$data, 0); # eventstarttime - push(@$data, 0); # eventduration + my $nexttime = $obj->getNextTime( $timer->{day}, $timer->{start}, $timer->{stop} ) + or return error(sprintf("Couldn't get time from this timer: %d '%s' '%s' '%s'", $timer->{pos}, $timer->{day}, $timer->{start}, $timer->{stop})); # AutotimerId - my $atxt = (split('~', $data->[9]))[-1]; + my $atxt = (split('~', $timer->{aux}))[-1]; my $aid = $1 if(defined $atxt and $atxt =~ /AT\[(\d+)\]/); - push(@$data, $aid || 0); - - # checked - push(@$data, $checked); # Search for event at EPG my $e = $obj->_getNextEpgId( { - Id => $data->[0], - Status => $data->[1], - ChannelID => $data->[2], - File => $data->[8], - NextStartTime => $data->[10], - NextStopTime => $data->[11], + pos => $timer->{pos}, + flags => $timer->{flags}, + channel => $timer->{channel}, + file => $timer->{file}, + start => $nexttime->{start}, + stop => $nexttime->{stop}, }); - if($e and exists $e->{eventid}) { - $data->[12] = $e->{eventid}; - $data->[13] = $e->{starttime}; - $data->[14] = $e->{duration}; - } - my $sth = $obj->{dbh}->prepare('REPLACE INTO TIMERS VALUES (?,?,?,?,?,?,?,?,?,?,FROM_UNIXTIME(?), FROM_UNIXTIME(?),0,?,?,?,?,NOW(),?)'); - $sth->execute( @$data ) - or return error sprintf("Couldn't execute query: %s.",$sth->errstr); + my $sth = $obj->{dbh}->prepare('REPLACE INTO TIMERS VALUES (MD5(CONCAT(?,?,?)),?,?,?,?,?,?,?,?,?,?,FROM_UNIXTIME(?), FROM_UNIXTIME(?),0,?,?,?,?,?,NOW())'); + $sth->execute( + $timer->{channel},$nexttime->{start},$nexttime->{stop}, + $timer->{pos}, + $timer->{flags}, + $timer->{channel}, + $timer->{day}, + $timer->{start}, + $timer->{stop}, + $timer->{priority}, + $timer->{lifetime}, + $timer->{file}, + $timer->{aux}, + $nexttime->{start}, + $nexttime->{stop}, + $e ? $e->{eventid} : 0, + $e ? $e->{starttime} : 0, + $e ? $e->{duration} : 0, + $aid, + $checked + ) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); } @@ -1079,9 +1116,21 @@ sub _readData { $line =~ s/^\d+[- ]+\d+\s//sig; $c++; my @data = split(':', $line, 9); - - $obj->insert(\@data, $c, 1) - if(scalar @data > 2); + if(scalar @data > 2) { + my $timer = { + pos => $c, + flags => $data[0], + channel => $data[1], + day => $data[2], + start => $data[3], + stop => $data[4], + priority=> $data[5], + lifetime=> $data[6], + file => $data[7], + aux => $data[8] + }; + $obj->_insert($timer, 1); + } } # Search for overlapping Timers @@ -1095,7 +1144,7 @@ sub _readData { if($oldTimers) { my $timers = $obj->getNewTimers($oldTimers); foreach my $timerdata (@$timers) { - event sprintf('New timer "%s" with id: "%d"', $timerdata->{File}, $timerdata->{Id}); + event sprintf('New timer "%s" with id: "%d"', $timerdata->{file}, $timerdata->{pos}); } $obj->updated() if(scalar @$timers); } @@ -1157,89 +1206,89 @@ sub list { my $term; my $search1 = ''; my $search2 = ''; - if($text and $text =~ /^[0-9,_ ]+$/ ) { - my @timers = split(/[^0-9]/, $text); - $search1 = sprintf(" AND t.Id in (%s)",join(',' => ('?') x @timers)); + if($text and $text =~ /^[0-9a-f,_ ]+$/ and length($text) >= 32 ) { + my @timers = split(/[^0-9a-f]/, $text); + $search1 = sprintf(" AND t.id in (%s)",join(',' => ('?') x @timers)); foreach(@timers) { push(@{$term},$_); } - $search2 = sprintf(" AND t.Id in (%s)",join(',' => ('?') x @timers)); + $search2 = sprintf(" AND t.id in (%s)",join(',' => ('?') x @timers)); foreach(@timers) { push(@{$term},$_); } } elsif($text) { - my $query1 = buildsearch("t.File,e.description",$text); + my $query1 = buildsearch("t.file,e.description",$text); $search1 = sprintf('AND ( %s )', $query1->{query}); foreach(@{$query1->{term}}) { push(@{$term},$_); } - my $query2 = buildsearch("t.File",$text); + my $query2 = buildsearch("t.file",$text); $search2 = sprintf('AND ( %s )', $query2->{query}); foreach(@{$query2->{term}}) { push(@{$term},$_); } } my %f = ( - 'Id' => gettext('Service'), - 'Status' => gettext('Status'), - 'Day' => gettext('Day'), - 'Channel' => gettext('Channel'), - 'Start' => gettext('Start'), - 'Stop' => gettext('Stop'), - 'Title' => gettext('Title'), - 'Priority' => gettext('Priority') + 'id' => gettext('Service'), + 'flags' => gettext('Status'), + 'day' => gettext('Day'), + 'channel' => gettext('Channel'), + 'start' => gettext('Start'), + 'stop' => gettext('Stop'), + 'title' => gettext('Title'), + 'priority' => gettext('Priority') ); my $sql = qq| SELECT SQL_CACHE - t.Id as \'$f{'Id'}\', - t.Status as \'$f{'Status'}\', - c.Name as \'$f{'Channel'}\', - c.Pos as __Pos, - t.Day as \'$f{'Day'}\', - DATE_FORMAT(t.NextStartTime, '%H:%i') as \'$f{'Start'}\', - DATE_FORMAT(t.NextStopTime, '%H:%i') as \'$f{'Stop'}\', - t.File as \'$f{'Title'}\', - t.Priority as \'$f{'Priority'}\', - UNIX_TIMESTAMP(t.NextStartTime) as __Day, - t.Collision as __Collision, + t.id as \'$f{'id'}\', + t.flags as \'$f{'flags'}\', + c.Name as \'$f{'channel'}\', + c.Pos as __pos, + t.day as \'$f{'day'}\', + DATE_FORMAT(t.starttime, '%H:%i') as \'$f{'start'}\', + DATE_FORMAT(t.stoptime, '%H:%i') as \'$f{'stop'}\', + t.file as \'$f{'title'}\', + t.priority as \'$f{'priority'}\', + UNIX_TIMESTAMP(t.starttime) as __day, + t.collision as __collision, t.eventid as __eventid, - t.AutotimerId as __AutotimerId, - UNIX_TIMESTAMP(t.NextStopTime) - UNIX_TIMESTAMP(t.NextStartTime) as __Duration, + t.autotimerid as __autotimerid, + UNIX_TIMESTAMP(t.stoptime) - UNIX_TIMESTAMP(t.starttime) as __duration, e.description as __description FROM TIMERS as t, CHANNELS as c, EPG as e WHERE - t.NextStopTime > NOW() - AND t.ChannelID = c.Id - and (t.eventid = e.eventid) + t.stoptime > NOW() + AND t.channel = c.Id + AND (t.eventid = e.eventid) $search1 UNION SELECT SQL_CACHE - t.Id as \'$f{'Id'}\', - t.Status as \'$f{'Status'}\', - c.Name as \'$f{'Channel'}\', - c.Pos as __Pos, - t.Day as \'$f{'Day'}\', - DATE_FORMAT(t.NextStartTime, '%H:%i') as \'$f{'Start'}\', - DATE_FORMAT(t.NextStopTime, '%H:%i') as \'$f{'Stop'}\', - t.File as \'$f{'Title'}\', - t.Priority as \'$f{'Priority'}\', - UNIX_TIMESTAMP(t.NextStartTime) as __Day, - t.Collision as __Collision, + t.id as \'$f{'id'}\', + t.flags as \'$f{'flags'}\', + c.Name as \'$f{'channel'}\', + c.Pos as __pos, + t.day as \'$f{'day'}\', + DATE_FORMAT(t.starttime, '%H:%i') as \'$f{'start'}\', + DATE_FORMAT(t.stoptime, '%H:%i') as \'$f{'stop'}\', + t.file as \'$f{'title'}\', + t.priority as \'$f{'priority'}\', + UNIX_TIMESTAMP(t.starttime) as __day, + t.collision as __collision, t.eventid as __eventid, - t.AutotimerId as __AutotimerId, - UNIX_TIMESTAMP(t.NextStopTime) - UNIX_TIMESTAMP(t.NextStartTime) as __Duration, + t.autotimerid as __autotimerid, + UNIX_TIMESTAMP(t.stoptime) - UNIX_TIMESTAMP(t.starttime) as __duration, "" as __description FROM TIMERS as t, CHANNELS as c WHERE - t.ChannelID = c.Id - and (t.eventid = 0) + t.channel = c.Id + AND ((t.eventid = 0) or (t.eventid is null)) $search2 ORDER BY - __Day + __day |; my $fields = fields($obj->{dbh}, $sql); @@ -1265,25 +1314,25 @@ sub getTimerById { my $sql = qq| SELECT SQL_CACHE - t.Id, - t.Status, + t.id, + t.flags, c.Name as Channel, c.Pos as __Pos, - t.Day as Prg, - t.Start, - t.Stop, - t.File, - t.Priority, - UNIX_TIMESTAMP(t.NextStartTime) as Day, - t.Collision as Collision, - t.eventid as eventid, - t.AutotimerId as AutotimerId + t.day as Date, + t.start, + t.stop, + t.file, + t.priority, + UNIX_TIMESTAMP(t.starttime) as Day, + t.collision, + t.eventid, + t.autotimerid FROM TIMERS as t, CHANNELS as c WHERE - t.ChannelID = c.Id - and t.Id = ? + t.channel = c.Id + and t.id = ? |; my $sth = $obj->{dbh}->prepare($sql); @@ -1297,8 +1346,8 @@ WHERE sub getRunningTimer { # ------------------ my $obj = shift || return error('No object defined!'); - my $rowname = shift || 'Id'; - my $sql = "SELECT SQL_CACHE $rowname from TIMERS where NOW() between NextStartTime and NextStopTime AND (Status & 1)"; + my $rowname = shift || 'id'; + my $sql = "SELECT SQL_CACHE $rowname from TIMERS where NOW() between starttime and stoptime AND (flags & 1)"; my $erg = $obj->{dbh}->selectall_hashref($sql, $rowname); return $erg; } @@ -1311,7 +1360,7 @@ sub getNewTimers { my $ret = []; foreach my $timerid (keys %$oldTimers) { - if(! $oldTimers->{$timerid}->{Checked}) { + if(! $oldTimers->{$timerid}->{checked}) { push(@$ret, $oldTimers->{$timerid}); } } @@ -1323,31 +1372,31 @@ sub getCheckTimer { # ------------------ my $obj = shift || return error('No object defined!'); my $sql = qq| -SELECT SQL_CACHE t.Id as Id, t.Status as Status,t.ChannelID as ChannelID, - t.Priority as Priority, t.Lifetime as Lifetime, - t.File as File, t.aux as aux, - t.Start as TimerStart,t.Stop as TimerStop, +SELECT SQL_CACHE t.id as id,t.pos as pos, t.flags as flags,t.channel as channel, + t.priority as priority, t.lifetime as lifetime, + t.file as file, t.aux as aux, + t.start as timerstart,t.stop as timerstop, UNIX_TIMESTAMP(e.starttime) as starttime, UNIX_TIMESTAMP(e.starttime) + e.duration as stoptime, UNIX_TIMESTAMP(e.vpstime) as vpsstart, UNIX_TIMESTAMP(e.vpstime) + e.duration as vpsstop, - ABS(UNIX_TIMESTAMP(t.eventstarttime) - UNIX_TIMESTAMP(NextStartTime)) as lead, - ABS(UNIX_TIMESTAMP(NextStopTime)-(UNIX_TIMESTAMP(t.eventstarttime) + t.eventduration)) as lag + ABS(UNIX_TIMESTAMP(t.eventstarttime) - UNIX_TIMESTAMP(t.starttime)) as lead, + ABS(UNIX_TIMESTAMP(t.stoptime)-(UNIX_TIMESTAMP(t.eventstarttime) + t.eventduration)) as lag FROM TIMERS as t, EPG as e - WHERE (Status & 1) + WHERE (flags & 1) AND e.eventid > 0 AND t.eventid = e.eventid AND ( - (((t.Status & 4) = 0) AND e.starttime != t.eventstarttime) - OR ((t.Status & 4) AND e.vpstime != t.eventstarttime) + (((t.flags & 4) = 0) AND e.starttime != t.eventstarttime) + OR ((t.flags & 4) AND e.vpstime != t.eventstarttime) OR (e.duration != t.eventduration) ) - AND SUBSTRING_INDEX( t.File , '~', 1 ) LIKE CONCAT('%', e.title ,'%') + AND SUBSTRING_INDEX( t.file , '~', 1 ) LIKE CONCAT('%', e.title ,'%') |; - my $erg = $obj->{dbh}->selectall_hashref($sql, 'Id'); + my $erg = $obj->{dbh}->selectall_hashref($sql, 'id'); foreach my $t (keys %$erg) { my %tt; @@ -1356,7 +1405,7 @@ SELECT SQL_CACHE t.Id as Id, t.Status as Status,t.ChannelID as ChannelID, my $start; my $stop; - if(($erg->{$t}->{Status} & 4) # Use VPS Time if used + if(($erg->{$t}->{flags} & 4) # Use PDC time if used and $erg->{$t}->{vpsstart} and $erg->{$t}->{vpsstop}) { $start = $erg->{$t}->{vpsstart}; @@ -1368,37 +1417,56 @@ SELECT SQL_CACHE t.Id as Id, t.Status as Status,t.ChannelID as ChannelID, # Format parameterhash for saveTimer my $tt = { - Activ => (($erg->{$t}->{Status} & 1) ? 'y' : 'n'), - VPS => (($erg->{$t}->{Status} & 4) ? 'y' : 'n'), - ChannelID => $erg->{$t}->{ChannelID}, - File => $erg->{$t}->{File}, + pos => $erg->{$t}->{pos}, + activ => (($erg->{$t}->{flags} & 1) ? 'y' : 'n'), + vps => (($erg->{$t}->{flags} & 4) ? 'y' : 'n'), + channel => $erg->{$t}->{channel}, + file => $erg->{$t}->{file}, aux => $erg->{$t}->{aux}, - Day => my_strftime("%Y-%m-%d",$start), - Start => my_strftime("%H%M",$start), - Stop => my_strftime("%H%M",$stop), - Priority => $erg->{$t}->{Priority}, - Lifetime => $erg->{$t}->{Lifetime} + day => my_strftime("%Y-%m-%d",$start), + start => my_strftime("%H%M",$start), + stop => my_strftime("%H%M",$stop), + priority => $erg->{$t}->{priority}, + lifetime => $erg->{$t}->{lifetime} }; - my $timer = $erg->{$t}->{Id}; - debug sprintf("Adjust timer %d (%s) at %s : from %s - %s to %s - %s", - $timer, - $tt->{File}, - $tt->{Day}, - fmttime($erg->{$t}->{TimerStart}), fmttime($erg->{$t}->{TimerStop}), - fmttime($tt->{Start}),fmttime($tt->{Stop})); + $tt->{pos}, + $tt->{file}, + $tt->{day}, + fmttime($erg->{$t}->{timerstart}), fmttime($erg->{$t}->{timerstop}), + fmttime($tt->{start}),fmttime($tt->{stop})); - $obj->saveTimer($tt, $timer); + $obj->saveTimer($tt); } return $erg; } # ------------------ -sub getEpgIds { +sub getPos { # ------------------ my $obj = shift || return error('No object defined!'); - my $sql = "SELECT SQL_CACHE Id, Status & 1 as Status, eventid from TIMERS where eventid > 0"; + my $tid = shift || return error('No id defined!'); + + my $sql = qq| +SELECT SQL_CACHE + pos from TIMERS as t +where + t.id = ? +|; + + my $sth = $obj->{dbh}->prepare($sql); + $sth->execute($tid) + or return error(sprintf("Timer '%s' does not exist in the database!",$tid)); + my $erg = $sth->fetchrow_hashref(); + return $erg ? $erg->{pos} : 0; +} + +# ------------------ +sub getEvents { +# ------------------ + my $obj = shift || return error('No object defined!'); + my $sql = "SELECT SQL_CACHE id, flags & 1 as activ, eventid from TIMERS where eventid > 0"; my $erg = $obj->{dbh}->selectall_hashref($sql, 'eventid'); return $erg; } @@ -1432,20 +1500,20 @@ sub getOverlappingTimer { my $sql = qq| SELECT SQL_CACHE - TIMERS.Id, - TIMERS.Priority, - TIMERS.NextStartTime, - TIMERS.NextStopTime, - CHANNELS.TID as transponderid, - LEFT(CHANNELS.Source,1) as source -from TIMERS, - CHANNELS -where TIMERS.ChannelID = CHANNELS.Id + t.id, + t.priority, + t.starttime, + t.stoptime, + c.TID as transponderid, + LEFT(c.Source,1) as source +from TIMERS as t, + CHANNELS as c +where t.channel = c.Id |; - my $erg = $obj->{dbh}->selectall_hashref($sql, 'Id'); + my $erg = $obj->{dbh}->selectall_hashref($sql, 'id'); my $return; - my $sth = $obj->{dbh}->prepare("UPDATE TIMERS SET Collision = ? WHERE Id = ?"); + my $sth = $obj->{dbh}->prepare("UPDATE TIMERS SET collision = ? WHERE id = ?"); foreach my $tid (keys %$erg) { my $result = $obj->checkOverlapping($erg->{$tid}); if(ref $result eq 'ARRAY' and scalar @$result) { @@ -1465,37 +1533,37 @@ sub checkOverlapping { my $obj = shift || return error('No object defined!'); my $data = shift || return error('No data defined!'); - my $NextStartTime = $data->{NextStartTime}; - my $NextStopTime = $data->{NextStopTime}; + my $starttime = $data->{starttime}; + my $stoptime = $data->{stoptime}; my $transponder = $data->{transponderid}; my $source = $data->{source}; - my $Priority = $data->{Priority} || $obj->{Priority}; - my $tid = $data->{Id} || 0; + my $Priority = $data->{priority} || $obj->{Priority}; + my $tid = $data->{id} || 0; my $sql = qq| SELECT SQL_CACHE - t.Id, - t.Priority, + t.id, + t.priority, c.TID FROM TIMERS as t, CHANNELS as c WHERE - ((? between t.NextStartTime AND t.NextStopTime) - OR (? between t.NextStartTime AND t.NextStopTime) - OR (t.NextStartTime between ? AND ?) - OR (t.NextStopTime between ? AND ?)) - AND t.Id != ? - AND (t.Status & 1) - AND t.ChannelID = c.Id + ((? between t.starttime AND t.stoptime) + OR (? between t.starttime AND t.stoptime) + OR (t.starttime between ? AND ?) + OR (t.stoptime between ? AND ?)) + AND t.id != ? + AND (t.flags & 1) + AND t.channel = c.Id AND c.TID != ? AND LEFT(c.Source,1) = ? ORDER BY - t.Priority desc + t.priority desc |; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($NextStartTime,$NextStopTime, - $NextStartTime,$NextStopTime, - $NextStartTime,$NextStopTime, + $sth->execute($starttime,$stoptime, + $starttime,$stoptime, + $starttime,$stoptime, $tid,$transponder,$source) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $result = $sth->fetchall_arrayref(); @@ -1512,7 +1580,7 @@ ORDER BY # Store conflict line at line - my $col = sprintf('%d:%d', + my $col = sprintf('%s:%s', $probant->[0], $probant->[1]); @@ -1521,10 +1589,10 @@ ORDER BY foreach my $trans (@{$result}) { if(defined $trans->[0] - && $probant->[0] != $trans->[0] - && $probant->[2] == $trans->[2]) { + && $probant->[0] ne $trans->[0] + && $probant->[2] eq $trans->[2]) { - $col .= sprintf('|%d:%d', + $col .= sprintf('|%s:%s', $trans->[0], $trans->[1]); @@ -1569,12 +1637,12 @@ sub getNextTimer { my $watcher = $event->w; my $data = $watcher->data; - my $reportmod = main::getModule('REPORT'); - $reportmod->news( - sprintf(gettext("Timer %d with title '%s' has started the recording!"), $data->{Id}, $data->{File}), - sprintf(gettext("on channel: %s to %s"), $data->{Channel}, fmttime($data->{Stop})), + my $modR = main::getModule('REPORT'); + $modR->news( + sprintf(gettext("Timer title '%s' has started the recording!"), $data->{file}), + sprintf(gettext("on channel: %s to %s"), $data->{channel}, fmttime($data->{stop})), 'tedit', - $data->{Id}, + $data->{id}, 'harmless' ); $watcher->cancel; @@ -1591,8 +1659,8 @@ sub _getNextEpgId { my $timer = shift || return error('No data defined!'); my $e; - my @file = split('~', $timer->{File}); - my $timemode = ($timer->{Status} & 4) ? 'vpstime' : 'starttime'; + my @file = split('~', $timer->{file}); + my $timemode = ($timer->{flags} & 4) ? 'vpstime' : 'starttime'; if(scalar @file >= 2) { # title and subtitle defined my $sth = $obj->{dbh}->prepare(sprintf(qq| SELECT SQL_CACHE eventid,%s as starttime,duration from EPG @@ -1602,13 +1670,13 @@ sub _getNextEpgId { AND (title like ? or title like ? ) ORDER BY ABS(( ? )-UNIX_TIMESTAMP(%s)) LIMIT 1 |,$timemode,$timemode,$timemode)); - if(!$sth->execute($timer->{ChannelID}, - $timer->{NextStartTime}, - $timer->{NextStopTime}, + if(!$sth->execute($timer->{channel}, + $timer->{start}, + $timer->{stop}, '%'.$file[-2].'%', '%'.$file[-1].'%', - $timer->{NextStartTime})) { - lg sprintf("Couldn't find epg event for timer with id %d - %s", $timer->{Id} , $timer->{File} ); + $timer->{start})) { + lg sprintf("Couldn't find epg event for timer with id %d - %s", $timer->{pos} , $timer->{file} ); return 0; } $e = $sth->fetchrow_hashref(); @@ -1622,19 +1690,19 @@ sub _getNextEpgId { AND (title like ? ) ORDER BY ABS(( ? )-UNIX_TIMESTAMP(%s)) LIMIT 1 |,$timemode,$timemode,$timemode)); - if(!$sth->execute($timer->{ChannelID}, - $timer->{NextStartTime}, - $timer->{NextStopTime}, - '%'.$timer->{File}.'%', - $timer->{NextStartTime})) { - lg sprintf("Couldn't find epg event for timer with id %d - %s", $timer->{Id} , $timer->{File} ); + if(!$sth->execute($timer->{channel}, + $timer->{start}, + $timer->{stop}, + '%'.$timer->{file}.'%', + $timer->{start})) { + lg sprintf("Couldn't find epg event for timer with id %d - %s", $timer->{pos} , $timer->{file} ); return 0; } $e = $sth->fetchrow_hashref(); } - lg sprintf("Couldn't find epg event for timer with id %d - %s", $timer->{Id} , $timer->{File} ) + lg sprintf("Couldn't find epg event for timer with id %d - %s", $timer->{pos} , $timer->{file} ) if(not exists $e->{eventid}); return $e; } @@ -1736,7 +1804,7 @@ sub getTimersByAutotimer { activeTimer => [], deactiveTimer => [], }; - my $erg = getDataBySearch('TIMERS', 'AutotimerId = ?', $aid); + my $erg = getDataBySearch('TIMERS', 'autotimerid = ?', $aid); map { my $type = ($_->[1] ? 'activeTimer' : 'deactiveTimer'); push(@{$obj->{AIDS}->{$aid}->{$type}}, $_->[0]); @@ -1754,7 +1822,7 @@ sub getTimersByAutotimer { sub getRootDirs { my $obj = shift || return error('No object defined!'); my $count = shift || 1; - my $sql = "SELECT SQL_CACHE distinct SUBSTRING_INDEX(File,'~',$count) from TIMERS;"; + my $sql = "SELECT SQL_CACHE distinct SUBSTRING_INDEX(file,'~',$count) from TIMERS;"; my $erg = $obj->{dbh}->selectall_arrayref($sql); my @ret; for(@$erg) { @@ -1792,15 +1860,15 @@ sub suggest { if($search) { my $sql = qq| SELECT SQL_CACHE - File + file FROM TIMERS WHERE - ( File LIKE ? ) + ( file LIKE ? ) GROUP BY - File + file ORDER BY - File + file LIMIT 25 |; my $sth = $obj->{dbh}->prepare($sql); diff --git a/locale/de.po b/locale/de.po index 60bcb06..a1b57b3 100644 --- a/locale/de.po +++ b/locale/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: XXV 1.1\n" "POT-Creation-Date: 2005-01-12 18:55\n" -"PO-Revision-Date: 2008-01-04 12:42+0100\n" +"PO-Revision-Date: 2008-01-18 17:38+0100\n" "Last-Translator: Andreas Brachold <anbr at users.berlios.de>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #-------------------- -#: ../bin/xxvd:101 ../bin/xxvd:116 ../bin/xxvd:89 ../bin/xxvd:95 ../lib/XXV/MODULES/AUTOTIMER.pm:31 ../lib/XXV/MODULES/AUTOTIMER.pm:685 ../lib/XXV/MODULES/CHANNELS.pm:29 ../lib/XXV/MODULES/CHANNELS.pm:35 ../lib/XXV/MODULES/CHANNELS.pm:701 ../lib/XXV/MODULES/CHANNELS.pm:727 ../lib/XXV/MODULES/CHANNELS.pm:740 ../lib/XXV/MODULES/CHANNELS.pm:779 ../lib/XXV/MODULES/CHANNELS.pm:805 ../lib/XXV/MODULES/CHRONICLE.pm:28 ../lib/XXV/MODULES/EPG.pm:36 ../lib/XXV/MODULES/EPG.pm:42 ../lib/XXV/MODULES/EPG.pm:48 ../lib/XXV/MODULES/EVENTS.pm:34 ../lib/XXV/MODULES/GRAB.pm:30 ../lib/XXV/MODULES/GRAB.pm:44 ../lib/XXV/MODULES/HTTPD.pm:61 ../lib/XXV/MODULES/HTTPD.pm:67 ../lib/XXV/MODULES/HTTPD.pm:73 ../lib/XXV/MODULES/HTTPD.pm:79 ../lib/XXV/MODULES/HTTPD.pm:85 ../lib/XXV/MODULES/HTTPD.pm:92 ../lib/XXV/MODULES/INTERFACE.pm:33 ../lib/XXV/MODULES/INTERFACE.pm:39 ../lib/XXV/MODULES/INTERFACE.pm:45 ../lib/XXV/MODULES/LOGREAD.pm:32 ../lib/XXV/MODULES/LOGREAD.pm:38 ../lib/XXV/MODULES/LOGREAD.pm:44 ../lib/XXV/MODULES/LOGREAD.pm:50 ../lib/XXV/MODULES/MEDIALIB.pm:34 ../lib/XXV/MODULES/MEDIALIB.pm:40 ../lib/XXV/MODULES/MEDIALIB.pm:46 ../lib/XXV/MODULES/MEDIALIB.pm:52 ../lib/XXV/MODULES/MEDIALIB.pm:58 ../lib/XXV/MODULES/MOVETIMER.pm:27 ../lib/XXV/MODULES/MOVETIMER.pm:380 ../lib/XXV/MODULES/MOVETIMER.pm:393 ../lib/XXV/MODULES/MOVETIMER.pm:402 ../lib/XXV/MODULES/MOVETIMER.pm:415 ../lib/XXV/MODULES/MUSIC.pm:40 ../lib/XXV/MODULES/MUSIC.pm:46 ../lib/XXV/MODULES/MUSIC.pm:52 ../lib/XXV/MODULES/MUSIC.pm:58 ../lib/XXV/MODULES/MUSIC.pm:69 ../lib/XXV/MODULES/MUSIC.pm:75 ../lib/XXV/MODULES/RECORDS.pm:1835 ../lib/XXV/MODULES/RECORDS.pm:1849 ../lib/XXV/MODULES/RECORDS.pm:1863 ../lib/XXV/MODULES/RECORDS.pm:1882 ../lib/XXV/MODULES/RECORDS.pm:2427 ../lib/XXV/MODULES/RECORDS.pm:2439 ../lib/XXV/MODULES/RECORDS.pm:40 ../lib/XXV/MODULES/RECORDS.pm:46 ../lib/XXV/MODULES/RECORDS.pm:52 ../lib/XXV/MODULES/RECORDS.pm:58 ../lib/XXV/MODULES/RECORDS.pm:64 ../lib/XXV/MODULES/RECORDS.pm:76 ../lib/XXV/MODULES/RECORDS.pm:92 ../lib/XXV/MODULES/REMOTE.pm:28 ../lib/XXV/MODULES/REMOTE.pm:34 ../lib/XXV/MODULES/REMOTE.pm:40 ../lib/XXV/MODULES/REPORT.pm:30 ../lib/XXV/MODULES/REPORT.pm:46 ../lib/XXV/MODULES/ROBOT.pm:29 ../lib/XXV/MODULES/SHARE.pm:53 ../lib/XXV/MODULES/SHARE.pm:70 ../lib/XXV/MODULES/SHARE.pm:76 ../lib/XXV/MODULES/STATUS.pm:32 ../lib/XXV/MODULES/STATUS.pm:38 ../lib/XXV/MODULES/STATUS.pm:43 ../lib/XXV/MODULES/STATUS.pm:49 ../lib/XXV/MODULES/STREAM.pm:33 ../lib/XXV/MODULES/STREAM.pm:43 ../lib/XXV/MODULES/STREAM.pm:64 ../lib/XXV/MODULES/STREAM.pm:70 ../lib/XXV/MODULES/STREAM.pm:84 ../lib/XXV/MODULES/SVDRP.pm:30 ../lib/XXV/MODULES/SVDRP.pm:36 ../lib/XXV/MODULES/SVDRP.pm:42 ../lib/XXV/MODULES/TELNET.pm:29 ../lib/XXV/MODULES/TELNET.pm:35 ../lib/XXV/MODULES/TELNET.pm:41 ../lib/XXV/MODULES/TELNET.pm:47 ../lib/XXV/MODULES/TIMERS.pm:29 ../lib/XXV/MODULES/TIMERS.pm:667 ../lib/XXV/MODULES/TIMERS.pm:670 ../lib/XXV/MODULES/TIMERS.pm:695 ../lib/XXV/MODULES/TIMERS.pm:791 ../lib/XXV/MODULES/USER.pm:268 ../lib/XXV/MODULES/USER.pm:360 ../lib/XXV/MODULES/USER.pm:366 ../lib/XXV/MODULES/USER.pm:391 ../lib/XXV/MODULES/USER.pm:68 ../lib/XXV/MODULES/VTX.pm:33 ../lib/XXV/MODULES/VTX.pm:39 ../lib/XXV/MODULES/WAPD.pm:43 ../lib/XXV/MODULES/WAPD.pm:49 ../lib/XXV/MODULES/WAPD.pm:55 ../lib/XXV/MODULES/WAPD.pm:61 ../lib/XXV/MODULES/WAPD.pm:67 ../lib/XXV/MODULES/WAPD.pm:74 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:100 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:118 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:124 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:130 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:70 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:107 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:34 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:64 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:82 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:96 ../lib/XXV/OUTPUT/NEWS/RSS.pm:33 ../lib/XXV/OUTPUT/NEWS/RSS.pm:63 ../lib/XXV/OUTPUT/NEWS/VDR.pm:30 ../lib/XXV/OUTPUT/NEWS/VDR.pm:60 +#: ../bin/xxvd:101 ../bin/xxvd:116 ../bin/xxvd:89 ../bin/xxvd:95 ../lib/XXV/MODULES/AUTOTIMER.pm:31 ../lib/XXV/MODULES/AUTOTIMER.pm:692 ../lib/XXV/MODULES/CHANNELS.pm:29 ../lib/XXV/MODULES/CHANNELS.pm:35 ../lib/XXV/MODULES/CHANNELS.pm:701 ../lib/XXV/MODULES/CHANNELS.pm:727 ../lib/XXV/MODULES/CHANNELS.pm:740 ../lib/XXV/MODULES/CHANNELS.pm:779 ../lib/XXV/MODULES/CHANNELS.pm:805 ../lib/XXV/MODULES/CHRONICLE.pm:28 ../lib/XXV/MODULES/EPG.pm:36 ../lib/XXV/MODULES/EPG.pm:42 ../lib/XXV/MODULES/EPG.pm:48 ../lib/XXV/MODULES/EVENTS.pm:34 ../lib/XXV/MODULES/GRAB.pm:30 ../lib/XXV/MODULES/GRAB.pm:44 ../lib/XXV/MODULES/HTTPD.pm:61 ../lib/XXV/MODULES/HTTPD.pm:67 ../lib/XXV/MODULES/HTTPD.pm:73 ../lib/XXV/MODULES/HTTPD.pm:79 ../lib/XXV/MODULES/HTTPD.pm:85 ../lib/XXV/MODULES/HTTPD.pm:92 ../lib/XXV/MODULES/INTERFACE.pm:33 ../lib/XXV/MODULES/INTERFACE.pm:39 ../lib/XXV/MODULES/INTERFACE.pm:45 ../lib/XXV/MODULES/LOGREAD.pm:32 ../lib/XXV/MODULES/LOGREAD.pm:38 ../lib/XXV/MODULES/LOGREAD.pm:44 ../lib/XXV/MODULES/LOGREAD.pm:50 ../lib/XXV/MODULES/MEDIALIB.pm:34 ../lib/XXV/MODULES/MEDIALIB.pm:40 ../lib/XXV/MODULES/MEDIALIB.pm:46 ../lib/XXV/MODULES/MEDIALIB.pm:52 ../lib/XXV/MODULES/MEDIALIB.pm:58 ../lib/XXV/MODULES/MOVETIMER.pm:27 ../lib/XXV/MODULES/MOVETIMER.pm:382 ../lib/XXV/MODULES/MOVETIMER.pm:395 ../lib/XXV/MODULES/MOVETIMER.pm:404 ../lib/XXV/MODULES/MOVETIMER.pm:417 ../lib/XXV/MODULES/MUSIC.pm:40 ../lib/XXV/MODULES/MUSIC.pm:46 ../lib/XXV/MODULES/MUSIC.pm:52 ../lib/XXV/MODULES/MUSIC.pm:58 ../lib/XXV/MODULES/MUSIC.pm:69 ../lib/XXV/MODULES/MUSIC.pm:75 ../lib/XXV/MODULES/RECORDS.pm:1835 ../lib/XXV/MODULES/RECORDS.pm:1849 ../lib/XXV/MODULES/RECORDS.pm:1863 ../lib/XXV/MODULES/RECORDS.pm:1882 ../lib/XXV/MODULES/RECORDS.pm:2427 ../lib/XXV/MODULES/RECORDS.pm:2439 ../lib/XXV/MODULES/RECORDS.pm:40 ../lib/XXV/MODULES/RECORDS.pm:46 ../lib/XXV/MODULES/RECORDS.pm:52 ../lib/XXV/MODULES/RECORDS.pm:58 ../lib/XXV/MODULES/RECORDS.pm:64 ../lib/XXV/MODULES/RECORDS.pm:76 ../lib/XXV/MODULES/RECORDS.pm:92 ../lib/XXV/MODULES/REMOTE.pm:28 ../lib/XXV/MODULES/REMOTE.pm:34 ../lib/XXV/MODULES/REMOTE.pm:40 ../lib/XXV/MODULES/REPORT.pm:30 ../lib/XXV/MODULES/REPORT.pm:46 ../lib/XXV/MODULES/ROBOT.pm:29 ../lib/XXV/MODULES/SHARE.pm:53 ../lib/XXV/MODULES/SHARE.pm:70 ../lib/XXV/MODULES/SHARE.pm:76 ../lib/XXV/MODULES/STATUS.pm:32 ../lib/XXV/MODULES/STATUS.pm:38 ../lib/XXV/MODULES/STATUS.pm:43 ../lib/XXV/MODULES/STATUS.pm:49 ../lib/XXV/MODULES/STREAM.pm:33 ../lib/XXV/MODULES/STREAM.pm:43 ../lib/XXV/MODULES/STREAM.pm:64 ../lib/XXV/MODULES/STREAM.pm:70 ../lib/XXV/MODULES/STREAM.pm:84 ../lib/XXV/MODULES/SVDRP.pm:30 ../lib/XXV/MODULES/SVDRP.pm:36 ../lib/XXV/MODULES/SVDRP.pm:42 ../lib/XXV/MODULES/TELNET.pm:29 ../lib/XXV/MODULES/TELNET.pm:35 ../lib/XXV/MODULES/TELNET.pm:41 ../lib/XXV/MODULES/TELNET.pm:47 ../lib/XXV/MODULES/TIMERS.pm:29 ../lib/XXV/MODULES/TIMERS.pm:658 ../lib/XXV/MODULES/TIMERS.pm:665 ../lib/XXV/MODULES/TIMERS.pm:668 ../lib/XXV/MODULES/TIMERS.pm:693 ../lib/XXV/MODULES/USER.pm:268 ../lib/XXV/MODULES/USER.pm:360 ../lib/XXV/MODULES/USER.pm:366 ../lib/XXV/MODULES/USER.pm:391 ../lib/XXV/MODULES/USER.pm:68 ../lib/XXV/MODULES/VTX.pm:33 ../lib/XXV/MODULES/VTX.pm:39 ../lib/XXV/MODULES/WAPD.pm:43 ../lib/XXV/MODULES/WAPD.pm:49 ../lib/XXV/MODULES/WAPD.pm:55 ../lib/XXV/MODULES/WAPD.pm:61 ../lib/XXV/MODULES/WAPD.pm:67 ../lib/XXV/MODULES/WAPD.pm:74 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:100 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:118 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:124 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:130 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:70 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:107 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:34 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:64 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:82 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:96 ../lib/XXV/OUTPUT/NEWS/RSS.pm:33 ../lib/XXV/OUTPUT/NEWS/RSS.pm:63 ../lib/XXV/OUTPUT/NEWS/VDR.pm:30 ../lib/XXV/OUTPUT/NEWS/VDR.pm:60 msgid "This is required!" msgstr "Das ist erforderlich!" @@ -97,7 +97,7 @@ msgid "Wished automated recordings" msgstr "Gewünschte automatische Aufnahmen" #-------------------- -#: ../html/alist.tmpl:45 ../html/asearch.tmpl:45 ../html/tlist.tmpl:93 ../html/tsearch.tmpl:93 ../lib/XXV/MODULES/AUTOTIMER.pm:992 +#: ../html/alist.tmpl:45 ../html/asearch.tmpl:45 ../html/tlist.tmpl:93 ../html/tsearch.tmpl:93 ../lib/XXV/MODULES/AUTOTIMER.pm:999 msgid "Edit autotimer" msgstr "Autotimer bearbeiten" @@ -112,7 +112,7 @@ msgid "Delete autotimer" msgstr "Lösche Autotimer" #-------------------- -#: ../html/alist.tmpl:5 ../html/asearch.tmpl:5 ../lib/XXV/MODULES/AUTOTIMER.pm:55 ../lib/XXV/MODULES/AUTOTIMER.pm:993 +#: ../html/alist.tmpl:5 ../html/asearch.tmpl:5 ../lib/XXV/MODULES/AUTOTIMER.pm:1000 ../lib/XXV/MODULES/AUTOTIMER.pm:55 msgid "Create new autotimer" msgstr "Neuer Autotimer" @@ -257,7 +257,7 @@ msgid "Delete channel" msgstr "Kanal löschen" #-------------------- -#: ../html/clist.tmpl:94 ../lib/XXV/MODULES/AUTOTIMER.pm:1140 ../lib/XXV/MODULES/CHANNELS.pm:379 +#: ../html/clist.tmpl:94 ../lib/XXV/MODULES/AUTOTIMER.pm:1147 ../lib/XXV/MODULES/CHANNELS.pm:379 msgid "Channels" msgstr "Kanäle" @@ -277,12 +277,12 @@ msgid "Percent" msgstr "Prozent" #-------------------- -#: ../html/display.tmpl:25 ../html/rdisplay.tmpl:149 ../html/search.tmpl:54 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:436 ../lib/XXV/MODULES/CHRONICLE.pm:168 ../lib/XXV/MODULES/CHRONICLE.pm:207 ../lib/XXV/MODULES/EPG.pm:748 ../lib/XXV/MODULES/EPG.pm:849 ../lib/XXV/MODULES/EPG.pm:923 ../lib/XXV/MODULES/RECORDS.pm:1873 ../lib/XXV/MODULES/TIMERS.pm:1181 +#: ../html/display.tmpl:25 ../html/rdisplay.tmpl:149 ../html/search.tmpl:54 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:436 ../lib/XXV/MODULES/CHRONICLE.pm:168 ../lib/XXV/MODULES/CHRONICLE.pm:207 ../lib/XXV/MODULES/EPG.pm:748 ../lib/XXV/MODULES/EPG.pm:849 ../lib/XXV/MODULES/EPG.pm:923 ../lib/XXV/MODULES/RECORDS.pm:1873 ../lib/XXV/MODULES/TIMERS.pm:1230 ../lib/XXV/MODULES/TIMERS.pm:889 msgid "Channel" msgstr "Kanal" #-------------------- -#: ../html/display.tmpl:27 ../html/movetimerlist.tmpl:81 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:1137 ../lib/XXV/MODULES/CHRONICLE.pm:165 ../lib/XXV/MODULES/CHRONICLE.pm:204 ../lib/XXV/MODULES/EPG.pm:745 ../lib/XXV/MODULES/EPG.pm:847 ../lib/XXV/MODULES/EPG.pm:921 ../lib/XXV/MODULES/MOVETIMER.pm:543 ../lib/XXV/MODULES/MUSIC.pm:607 ../lib/XXV/MODULES/RECORDS.pm:1519 ../lib/XXV/MODULES/RECORDS.pm:1594 ../lib/XXV/MODULES/TIMERS.pm:1178 ../lib/XXV/MODULES/USER.pm:525 +#: ../html/display.tmpl:27 ../html/movetimerlist.tmpl:81 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:1144 ../lib/XXV/MODULES/CHRONICLE.pm:165 ../lib/XXV/MODULES/CHRONICLE.pm:204 ../lib/XXV/MODULES/EPG.pm:745 ../lib/XXV/MODULES/EPG.pm:847 ../lib/XXV/MODULES/EPG.pm:921 ../lib/XXV/MODULES/MOVETIMER.pm:545 ../lib/XXV/MODULES/MUSIC.pm:607 ../lib/XXV/MODULES/RECORDS.pm:1519 ../lib/XXV/MODULES/RECORDS.pm:1594 ../lib/XXV/MODULES/TIMERS.pm:1227 ../lib/XXV/MODULES/USER.pm:525 msgid "Service" msgstr "Service" @@ -312,12 +312,12 @@ msgid "Search with OFDb" msgstr "Suche mit OFDb" #-------------------- -#: ../html/display.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:445 ../lib/XXV/MODULES/AUTOTIMER.pm:647 ../lib/XXV/MODULES/EPG.pm:751 ../lib/XXV/MODULES/RECORDS.pm:1887 ../lib/XXV/MODULES/RECORDS.pm:2068 ../lib/XXV/MODULES/TIMERS.pm:804 ../lib/XXV/OUTPUT/Console.pm:169 +#: ../html/display.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:445 ../lib/XXV/MODULES/AUTOTIMER.pm:654 ../lib/XXV/MODULES/EPG.pm:751 ../lib/XXV/MODULES/RECORDS.pm:1887 ../lib/XXV/MODULES/RECORDS.pm:2068 ../lib/XXV/MODULES/TIMERS.pm:797 ../lib/XXV/OUTPUT/Console.pm:169 msgid "Description" msgstr "Beschreibung" #-------------------- -#: ../html/display.tmpl:69 ../html/rlist.tmpl:243 ../html/rsearch.tmpl:243 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:1141 ../lib/XXV/MODULES/AUTOTIMER.pm:439 ../lib/XXV/MODULES/AUTOTIMER.pm:442 ../lib/XXV/MODULES/CHRONICLE.pm:170 ../lib/XXV/MODULES/CHRONICLE.pm:209 ../lib/XXV/MODULES/EPG.pm:749 ../lib/XXV/MODULES/EPG.pm:850 ../lib/XXV/MODULES/EPG.pm:924 ../lib/XXV/MODULES/TIMERS.pm:1182 +#: ../html/display.tmpl:69 ../html/rlist.tmpl:243 ../html/rsearch.tmpl:243 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:1148 ../lib/XXV/MODULES/AUTOTIMER.pm:439 ../lib/XXV/MODULES/AUTOTIMER.pm:442 ../lib/XXV/MODULES/CHRONICLE.pm:170 ../lib/XXV/MODULES/CHRONICLE.pm:209 ../lib/XXV/MODULES/EPG.pm:749 ../lib/XXV/MODULES/EPG.pm:850 ../lib/XXV/MODULES/EPG.pm:924 ../lib/XXV/MODULES/TIMERS.pm:1231 ../lib/XXV/MODULES/TIMERS.pm:890 msgid "Start" msgstr "Start" @@ -327,7 +327,7 @@ msgid "PDC" msgstr "VPS" #-------------------- -#: ../html/display.tmpl:75 ../html/widgets/player.tmpl:100 ../html/widgets/player.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:1142 ../lib/XXV/MODULES/AUTOTIMER.pm:440 ../lib/XXV/MODULES/AUTOTIMER.pm:443 ../lib/XXV/MODULES/CHRONICLE.pm:171 ../lib/XXV/MODULES/CHRONICLE.pm:210 ../lib/XXV/MODULES/EPG.pm:750 ../lib/XXV/MODULES/EPG.pm:851 ../lib/XXV/MODULES/EPG.pm:925 ../lib/XXV/MODULES/TIMERS.pm:1183 +#: ../html/display.tmpl:75 ../html/widgets/player.tmpl:100 ../html/widgets/player.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:1149 ../lib/XXV/MODULES/AUTOTIMER.pm:440 ../lib/XXV/MODULES/AUTOTIMER.pm:443 ../lib/XXV/MODULES/CHRONICLE.pm:171 ../lib/XXV/MODULES/CHRONICLE.pm:210 ../lib/XXV/MODULES/EPG.pm:750 ../lib/XXV/MODULES/EPG.pm:851 ../lib/XXV/MODULES/EPG.pm:925 ../lib/XXV/MODULES/TIMERS.pm:1232 msgid "Stop" msgstr "Stopp" @@ -527,7 +527,7 @@ msgid "Edit channels" msgstr "Kanäle bearbeiten" #-------------------- -#: ../html/help.tmpl:92 ../html/widgets/player.tmpl:105 ../html/widgets/player.tmpl:69 ../lib/XXV/MODULES/HTTPD.pm:103 ../lib/XXV/MODULES/TIMERS.pm:1179 ../lib/XXV/MODULES/WAPD.pm:84 +#: ../html/help.tmpl:92 ../html/widgets/player.tmpl:105 ../html/widgets/player.tmpl:69 ../lib/XXV/MODULES/HTTPD.pm:103 ../lib/XXV/MODULES/TIMERS.pm:1228 ../lib/XXV/MODULES/WAPD.pm:84 msgid "Status" msgstr "Status" @@ -682,7 +682,7 @@ msgid "Save" msgstr "Speichern" #-------------------- -#: ../html/mlcopy.tmpl:23 ../html/mledit.tmpl:23 ../html/mlimport.tmpl:23 ../html/rlist.tmpl:241 ../html/rsearch.tmpl:241 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:434 ../lib/XXV/MODULES/AUTOTIMER.pm:645 ../lib/XXV/MODULES/CHRONICLE.pm:166 ../lib/XXV/MODULES/CHRONICLE.pm:205 ../lib/XXV/MODULES/EPG.pm:746 ../lib/XXV/MODULES/EPG.pm:848 ../lib/XXV/MODULES/EPG.pm:922 ../lib/XXV/MODULES/MEDIALIB.pm:1300 ../lib/XXV/MODULES/MUSIC.pm:610 ../lib/XXV/MODULES/RECORDS.pm:1520 ../lib/XXV/MODULES/RECORDS.pm:1595 ../lib/XXV/MODULES/TIMERS.pm:1184 +#: ../html/mlcopy.tmpl:23 ../html/mledit.tmpl:23 ../html/mlimport.tmpl:23 ../html/rlist.tmpl:241 ../html/rsearch.tmpl:241 ../html/topten.tmpl:21 ../lib/XXV/MODULES/AUTOTIMER.pm:434 ../lib/XXV/MODULES/AUTOTIMER.pm:652 ../lib/XXV/MODULES/CHRONICLE.pm:166 ../lib/XXV/MODULES/CHRONICLE.pm:205 ../lib/XXV/MODULES/EPG.pm:746 ../lib/XXV/MODULES/EPG.pm:848 ../lib/XXV/MODULES/EPG.pm:922 ../lib/XXV/MODULES/MEDIALIB.pm:1300 ../lib/XXV/MODULES/MUSIC.pm:610 ../lib/XXV/MODULES/RECORDS.pm:1520 ../lib/XXV/MODULES/RECORDS.pm:1595 ../lib/XXV/MODULES/TIMERS.pm:1233 ../lib/XXV/MODULES/TIMERS.pm:888 msgid "Title" msgstr "Titel" @@ -692,7 +692,7 @@ msgid "Search at" msgstr "Suche bei" #-------------------- -#: ../html/mlcopy.tmpl:36 ../html/mledit.tmpl:36 ../html/mlimport.tmpl:36 ../html/rlist.tmpl:242 ../html/rsearch.tmpl:242 ../lib/XXV/MODULES/AUTOTIMER.pm:435 ../lib/XXV/MODULES/AUTOTIMER.pm:646 ../lib/XXV/MODULES/CHRONICLE.pm:167 ../lib/XXV/MODULES/CHRONICLE.pm:206 ../lib/XXV/MODULES/EPG.pm:747 ../lib/XXV/MODULES/MEDIALIB.pm:1301 ../lib/XXV/MODULES/RECORDS.pm:1521 ../lib/XXV/MODULES/RECORDS.pm:1596 +#: ../html/mlcopy.tmpl:36 ../html/mledit.tmpl:36 ../html/mlimport.tmpl:36 ../html/rlist.tmpl:242 ../html/rsearch.tmpl:242 ../lib/XXV/MODULES/AUTOTIMER.pm:435 ../lib/XXV/MODULES/AUTOTIMER.pm:653 ../lib/XXV/MODULES/CHRONICLE.pm:167 ../lib/XXV/MODULES/CHRONICLE.pm:206 ../lib/XXV/MODULES/EPG.pm:747 ../lib/XXV/MODULES/MEDIALIB.pm:1301 ../lib/XXV/MODULES/RECORDS.pm:1521 ../lib/XXV/MODULES/RECORDS.pm:1596 msgid "Subtitle" msgstr "Serientitel" @@ -777,7 +777,7 @@ msgid "Albums" msgstr "Alben" #-------------------- -#: ../html/mlist.tmpl:24 ../html/mlnavcontainer.tmpl:96 ../html/mlsearch.tmpl:46 ../html/search.tmpl:66 ../html/widgets/vtx.tmpl:28 ../lib/XXV/MODULES/AUTOTIMER.pm:1139 ../lib/XXV/MODULES/AUTOTIMER.pm:1164 ../wml/next.tmpl:15 ../wml/now.tmpl:15 ../wml/program.tmpl:43 ../wml/search.tmpl:17 +#: ../html/mlist.tmpl:24 ../html/mlnavcontainer.tmpl:96 ../html/mlsearch.tmpl:46 ../html/search.tmpl:66 ../html/widgets/vtx.tmpl:28 ../lib/XXV/MODULES/AUTOTIMER.pm:1146 ../lib/XXV/MODULES/AUTOTIMER.pm:1171 ../wml/next.tmpl:15 ../wml/now.tmpl:15 ../wml/program.tmpl:43 ../wml/search.tmpl:17 msgid "Search" msgstr "Suche" @@ -902,7 +902,7 @@ msgid "Rules to move timer between channels" msgstr "Regeln zum Verschieben von Timern zwischen Kanälen" #-------------------- -#: ../html/movetimerlist.tmpl:54 ../html/movetimerlist.tmpl:55 ../lib/XXV/MODULES/MOVETIMER.pm:443 +#: ../html/movetimerlist.tmpl:54 ../html/movetimerlist.tmpl:55 ../lib/XXV/MODULES/MOVETIMER.pm:445 #. (25) msgid "Create a new rule to move timer" msgstr "Erzeuge eine neue Regel zum Verschieben von Timern" @@ -925,27 +925,27 @@ msgid "Would you like to delete these rules?" msgstr "Wollen Sie diese Regeln löschen?" #-------------------- -#: ../html/movetimerlist.tmpl:7 ../lib/XXV/MODULES/MOVETIMER.pm:442 +#: ../html/movetimerlist.tmpl:7 ../lib/XXV/MODULES/MOVETIMER.pm:444 msgid "Edit rule to move timer" msgstr "Regel zum Verschieben von Timern bearbeiten" #-------------------- -#: ../html/movetimerlist.tmpl:82 ../lib/XXV/MODULES/MOVETIMER.pm:544 +#: ../html/movetimerlist.tmpl:82 ../lib/XXV/MODULES/MOVETIMER.pm:546 msgid "Source" msgstr "Quelle" #-------------------- -#: ../html/movetimerlist.tmpl:83 ../lib/XXV/MODULES/MOVETIMER.pm:545 +#: ../html/movetimerlist.tmpl:83 ../lib/XXV/MODULES/MOVETIMER.pm:547 msgid "Destination" msgstr "Ziel" #-------------------- -#: ../html/movetimerlist.tmpl:84 ../lib/XXV/MODULES/MOVETIMER.pm:546 ../lib/XXV/MODULES/MOVETIMER.pm:609 +#: ../html/movetimerlist.tmpl:84 ../lib/XXV/MODULES/MOVETIMER.pm:548 ../lib/XXV/MODULES/MOVETIMER.pm:611 msgid "Move timer" msgstr "Verschiebe Timer" #-------------------- -#: ../html/movetimerlist.tmpl:85 ../lib/XXV/MODULES/MOVETIMER.pm:547 +#: ../html/movetimerlist.tmpl:85 ../lib/XXV/MODULES/MOVETIMER.pm:549 msgid "Change original timer" msgstr "Ändere original Timer" @@ -1040,7 +1040,7 @@ msgid "Lifetime" msgstr "Lebenszeit" #-------------------- -#: ../html/rdisplay.tmpl:162 ../lib/XXV/MODULES/TIMERS.pm:1185 +#: ../html/rdisplay.tmpl:162 ../lib/XXV/MODULES/TIMERS.pm:1234 msgid "Priority" msgstr "Priorität" @@ -1297,7 +1297,7 @@ msgid "Search for timers" msgstr "Suche nach Timern" #-------------------- -#: ../html/tlist.tmpl:82 ../html/tsearch.tmpl:82 ../lib/XXV/MODULES/TIMERS.pm:893 +#: ../html/tlist.tmpl:82 ../html/tsearch.tmpl:82 ../lib/XXV/MODULES/TIMERS.pm:895 msgid "Would you like to delete this timer?" msgstr "Wollen Sie diesen Timer löschen?" @@ -1522,32 +1522,32 @@ msgid "Next page" msgstr "Nächste Seite" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1003 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1010 msgid "Autotimer saved!" msgstr "Autotimer gespeichert!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1023 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1030 msgid "No autotimer defined for deletion! Please use adelete 'aid'!" msgstr "Kein Autotimer zum Löschen definiert! Bitte verwende adelete 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1031 ../lib/XXV/MODULES/AUTOTIMER.pm:1061 ../lib/XXV/MODULES/AUTOTIMER.pm:1070 ../lib/XXV/MODULES/AUTOTIMER.pm:613 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1038 ../lib/XXV/MODULES/AUTOTIMER.pm:1068 ../lib/XXV/MODULES/AUTOTIMER.pm:1077 ../lib/XXV/MODULES/AUTOTIMER.pm:620 msgid "The autotimer '%s' does not exist in the database." msgstr "Der Autotimer '%s' existiert nicht in der Datenbank!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1035 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1042 msgid "Autotimer %s deleted." msgstr "Autotimer %s wurde gelöscht." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1053 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1060 msgid "No autotimer defined to toggle! Please use atoggle 'aid'!" msgstr "Kein ID eines Autotimer zum Umschalten definiert! Bitte verwende atoggle 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1080 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1087 msgid "Couldn't toggle autotimer with ID '%s'!" msgstr "Konnte Autotimer mit ID '%s' nicht umschalten!" @@ -1557,32 +1557,32 @@ msgid "Create event entries if an autotimer has created a new timer." msgstr "Erzeuge Eventeinträge, wenn eine neuer Timer durch einen Autotimer erzeugt wurde." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1091 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1098 msgid "disabled" msgstr "Deaktiviert" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1092 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1099 msgid "activated" msgstr "Aktiviert" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1093 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1100 msgid "Autotimer %s is %s." msgstr "Autotimer %s ist %s." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1138 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1145 msgid "Activ" msgstr "Aktiv" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1143 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1150 msgid "Directory" msgstr "Verzeichnis" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:1144 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:1151 msgid "Minimum length" msgstr "Minimale Länge" @@ -1657,32 +1657,32 @@ msgid "Display status of autotimers." msgstr "Status der Autotimer anzeigen." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:529 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:536 msgid "Could not save timer for '%s' : %s" msgstr "Konnte Timer für '%s' nicht speichern : %s" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:534 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:541 msgid "Modified timer for '%s'." msgstr "Timer für '%s' modifiziert." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:538 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:545 msgid "Timer for '%s' has been created." msgstr "Timer für '%s' erzeugt." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:546 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:553 msgid "Created %d timer for '%s'." msgstr "%d Timer für '%s' erzeugt. " #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:555 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:562 msgid "Modified %d timer for '%s'." msgstr "%d Timer für '%s' modifiziert." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:570 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:577 msgid "Read new timers into database." msgstr "Lese neue Timer in Datenbank." @@ -1692,62 +1692,62 @@ msgid "Delete a autotimer 'aid'" msgstr "Löschen eines Autotimer 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:635 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:642 msgid "Mon" msgstr "Mo" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:636 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:643 msgid "Tue" msgstr "Di" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:637 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:644 msgid "Wed" msgstr "Mi" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:638 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:645 msgid "Thu" msgstr "Do" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:639 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:646 msgid "Fri" msgstr "Fr" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:640 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:647 msgid "Sat" msgstr "Sa" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:641 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:648 msgid "Sun" msgstr "So" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:651 ../wml/tlist.tmpl:26 ../wml/tlist.tmpl:67 ../wml/tsearch.tmpl:26 ../wml/tsearch.tmpl:67 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:658 ../wml/tlist.tmpl:26 ../wml/tlist.tmpl:67 ../wml/tsearch.tmpl:26 ../wml/tsearch.tmpl:67 msgid "Timer" msgstr "Timer" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:652 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:659 msgid "Existing recording" msgstr "Vorhandene Aufnahme" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:653 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:660 msgid "Recording chronicle" msgstr "Aufnahmechronik" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:670 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:677 msgid "Activate this autotimer" msgstr "Aktiviere diesen Autotimer" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:674 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:681 msgid "" "Search terms to search for EPG entries.\n" "You can also fine tune your search :\n" @@ -1762,7 +1762,7 @@ msgstr "" "* durch ein Minuszeichen zum Ausschliessen von Suchbegriffen z.B. 'Heute,-Morgen'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:682 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:689 msgid "Search in this EPG fields" msgstr "Suche in diesen EPG-Feldern" @@ -1772,22 +1772,22 @@ msgid "Edit an autotimer 'aid'" msgstr "Editieren eines Autotimer 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:703 ../lib/XXV/MODULES/AUTOTIMER.pm:753 ../lib/XXV/MODULES/AUTOTIMER.pm:830 ../lib/XXV/MODULES/USER.pm:398 ../lib/XXV/MODULES/USER.pm:405 ../lib/XXV/MODULES/USER.pm:421 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:710 ../lib/XXV/MODULES/AUTOTIMER.pm:760 ../lib/XXV/MODULES/AUTOTIMER.pm:837 ../lib/XXV/MODULES/USER.pm:398 ../lib/XXV/MODULES/USER.pm:405 ../lib/XXV/MODULES/USER.pm:421 msgid "You can choose: %s!" msgstr "Sie können wählen: %s!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:718 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:725 msgid "Limit search to these channels" msgstr "Begrenze Suche auf diese Kanäle" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:726 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:733 msgid "The channel '%s' does not exist!" msgstr "Der Kanal '%s' existiert nicht!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:733 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:740 msgid "Ignore retries with same title?" msgstr "Ignoriere Wiederholungen mit gleichen Titel?" @@ -1797,32 +1797,32 @@ msgid "Search for autotimer with text 'aid'" msgstr "Suche nach Autotimer mit Text 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:769 ../lib/XXV/MODULES/TIMERS.pm:723 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:776 ../lib/XXV/MODULES/TIMERS.pm:721 msgid "Start time in format 'HH:MM'" msgstr "Startzeit im Format 'HH:MM'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:772 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:779 msgid "You set a start time without an end time!" msgstr "Startzeitpunkt ohne Stoppzeitpunkt definiert!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:776 ../lib/XXV/MODULES/AUTOTIMER.pm:782 ../lib/XXV/MODULES/AUTOTIMER.pm:799 ../lib/XXV/MODULES/AUTOTIMER.pm:805 ../lib/XXV/MODULES/TIMERS.pm:727 ../lib/XXV/MODULES/TIMERS.pm:733 ../lib/XXV/MODULES/TIMERS.pm:746 ../lib/XXV/MODULES/TIMERS.pm:752 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:783 ../lib/XXV/MODULES/AUTOTIMER.pm:789 ../lib/XXV/MODULES/AUTOTIMER.pm:806 ../lib/XXV/MODULES/AUTOTIMER.pm:812 ../lib/XXV/MODULES/TIMERS.pm:725 ../lib/XXV/MODULES/TIMERS.pm:731 ../lib/XXV/MODULES/TIMERS.pm:744 ../lib/XXV/MODULES/TIMERS.pm:750 msgid "The time is incorrect!" msgstr "Die Zeit ist nicht korrekt!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:792 ../lib/XXV/MODULES/TIMERS.pm:742 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:799 ../lib/XXV/MODULES/TIMERS.pm:740 msgid "End time in format 'HH:MM'" msgstr "Endzeit im Format 'HH:MM'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:795 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:802 msgid "You set an end time without a start time!" msgstr "Stoppzeitpunkt ohne Startzeitpunkt definiert!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:810 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:817 msgid "Only search these weekdays" msgstr "Suche nur an diesen Wochentagen" @@ -1832,87 +1832,87 @@ msgid "Show autotimer 'aid'" msgstr "Zeige Autotimer 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:843 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:850 msgid "Use PDC time to control created timer" msgstr "Verwende VPS zum Überwachen neuer Timer" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:847 ../lib/XXV/MODULES/TIMERS.pm:32 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:854 ../lib/XXV/MODULES/TIMERS.pm:32 msgid "Buffer time in minutes before the scheduled start of a recording" msgstr "Pufferzeit in Minuten, vor dem zeitlichen Anfang der Aufnahme." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:855 ../lib/XXV/MODULES/AUTOTIMER.pm:869 ../lib/XXV/MODULES/AUTOTIMER.pm:882 ../lib/XXV/MODULES/AUTOTIMER.pm:898 ../lib/XXV/MODULES/AUTOTIMER.pm:914 ../lib/XXV/MODULES/CHANNELS.pm:683 ../lib/XXV/MODULES/CHANNELS.pm:714 ../lib/XXV/MODULES/CHANNELS.pm:753 ../lib/XXV/MODULES/CHANNELS.pm:766 ../lib/XXV/MODULES/CHANNELS.pm:792 ../lib/XXV/MODULES/CHANNELS.pm:818 ../lib/XXV/MODULES/CHANNELS.pm:831 ../lib/XXV/MODULES/CHANNELS.pm:844 ../lib/XXV/MODULES/CHANNELS.pm:857 ../lib/XXV/MODULES/GRAB.pm:105 ../lib/XXV/MODULES/GRAB.pm:36 ../lib/XXV/MODULES/GRAB.pm:50 ../lib/XXV/MODULES/GRAB.pm:73 ../lib/XXV/MODULES/GRAB.pm:92 ../lib/XXV/MODULES/RECORDS.pm:1846 ../lib/XXV/MODULES/RECORDS.pm:1860 ../lib/XXV/MODULES/STREAM.pm:76 ../lib/XXV/MODULES/STREAM.pm:90 ../lib/XXV/MODULES/TIMERS.pm:768 ../lib/XXV/MODULES/TIMERS.pm:784 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:862 ../lib/XXV/MODULES/AUTOTIMER.pm:876 ../lib/XXV/MODULES/AUTOTIMER.pm:889 ../lib/XXV/MODULES/AUTOTIMER.pm:905 ../lib/XXV/MODULES/AUTOTIMER.pm:921 ../lib/XXV/MODULES/CHANNELS.pm:683 ../lib/XXV/MODULES/CHANNELS.pm:714 ../lib/XXV/MODULES/CHANNELS.pm:753 ../lib/XXV/MODULES/CHANNELS.pm:766 ../lib/XXV/MODULES/CHANNELS.pm:792 ../lib/XXV/MODULES/CHANNELS.pm:818 ../lib/XXV/MODULES/CHANNELS.pm:831 ../lib/XXV/MODULES/CHANNELS.pm:844 ../lib/XXV/MODULES/CHANNELS.pm:857 ../lib/XXV/MODULES/GRAB.pm:105 ../lib/XXV/MODULES/GRAB.pm:36 ../lib/XXV/MODULES/GRAB.pm:50 ../lib/XXV/MODULES/GRAB.pm:73 ../lib/XXV/MODULES/GRAB.pm:92 ../lib/XXV/MODULES/RECORDS.pm:1846 ../lib/XXV/MODULES/RECORDS.pm:1860 ../lib/XXV/MODULES/STREAM.pm:76 ../lib/XXV/MODULES/STREAM.pm:90 ../lib/XXV/MODULES/TIMERS.pm:766 ../lib/XXV/MODULES/TIMERS.pm:782 msgid "Value incorrect!" msgstr "Der Wert ist nicht korrekt!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:861 ../lib/XXV/MODULES/TIMERS.pm:37 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:868 ../lib/XXV/MODULES/TIMERS.pm:37 msgid "Buffer time in minutes past the scheduled end of a recording" msgstr "Pufferzeit in Minuten, nach dem zeitlichen Ende der Aufnahme." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:875 -msgid "Minimum play time in minutes" -msgstr "Mindestlänge in Minuten" - -#-------------------- #: ../lib/XXV/MODULES/AUTOTIMER.pm:88 msgid "Start autotimer search." msgstr "Autotimersuche durchführen" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:888 ../lib/XXV/MODULES/RECORDS.pm:1853 ../lib/XXV/MODULES/TIMERS.pm:758 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:882 +msgid "Minimum play time in minutes" +msgstr "Mindestlänge in Minuten" + +#-------------------- +#: ../lib/XXV/MODULES/AUTOTIMER.pm:895 ../lib/XXV/MODULES/RECORDS.pm:1853 ../lib/XXV/MODULES/TIMERS.pm:756 msgid "Priority (%d ... %d)" msgstr "Priorität (%d ... %d)" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:894 ../lib/XXV/MODULES/TIMERS.pm:764 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:901 ../lib/XXV/MODULES/TIMERS.pm:762 msgid "Sorry, but the maximum priority is limited to %d!" msgstr "Entschuldigung, aber die maximale Priorität ist auf %d begrenzt!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:904 ../lib/XXV/MODULES/RECORDS.pm:1839 ../lib/XXV/MODULES/TIMERS.pm:774 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:911 ../lib/XXV/MODULES/RECORDS.pm:1839 ../lib/XXV/MODULES/TIMERS.pm:772 msgid "Lifetime (%d ... %d)" msgstr "Lebenszeit (%d ... %d)" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:910 ../lib/XXV/MODULES/TIMERS.pm:780 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:917 ../lib/XXV/MODULES/TIMERS.pm:778 msgid "Sorry, but the maximum life time is limited to %d!" msgstr "Entschuldigung, aber die maximale Lebenszeit ist auf %d begrenzt!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:920 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:927 msgid "Group all recordings into one directory" msgstr "Gruppiere alle Aufnahmen in einem Verzeichnis" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:934 ../lib/XXV/MODULES/AUTOTIMER.pm:967 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:941 ../lib/XXV/MODULES/AUTOTIMER.pm:974 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d.%m.%Y %H:%M:%S" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:940 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:947 msgid "Start date as YYYY-MM-DD HH:MM:SS." msgstr "Startdatum als DD.MM.YYYY HH:MM:SS." #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:947 ../lib/XXV/MODULES/AUTOTIMER.pm:979 ../lib/XXV/MODULES/TIMERS.pm:700 -msgid "Language=English" -msgstr "Language=German,DateFormat=non-US" - -#-------------------- #: ../lib/XXV/MODULES/AUTOTIMER.pm:95 msgid "Toggle autotimer on or off 'aid'" msgstr "Umschalten der Autotimer zwischen Ein und Aus 'aid'" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:954 ../lib/XXV/MODULES/AUTOTIMER.pm:986 ../lib/XXV/MODULES/TIMERS.pm:714 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:954 ../lib/XXV/MODULES/AUTOTIMER.pm:986 ../lib/XXV/MODULES/TIMERS.pm:698 +msgid "Language=English" +msgstr "Language=German,DateFormat=non-US" + +#-------------------- +#: ../lib/XXV/MODULES/AUTOTIMER.pm:961 ../lib/XXV/MODULES/AUTOTIMER.pm:993 ../lib/XXV/MODULES/TIMERS.pm:712 msgid "The day is incorrect or was in a wrong format!" msgstr "Der Tag ist nicht korrekt oder hatte ein falsches Format!" #-------------------- -#: ../lib/XXV/MODULES/AUTOTIMER.pm:973 +#: ../lib/XXV/MODULES/AUTOTIMER.pm:980 msgid "Stop date as YYYY-MM-DD HH:MM:SS." msgstr "Enddatum als DD.MM.YYYY HH:MM:SS." @@ -2072,7 +2072,7 @@ msgid "No channel defined for deletion!" msgstr "Kein Kanal zum Löschen definiert!" #-------------------- -#: ../lib/XXV/MODULES/CHRONICLE.pm:169 ../lib/XXV/MODULES/CHRONICLE.pm:208 ../lib/XXV/MODULES/TIMERS.pm:1180 +#: ../lib/XXV/MODULES/CHRONICLE.pm:169 ../lib/XXV/MODULES/CHRONICLE.pm:208 ../lib/XXV/MODULES/TIMERS.pm:1229 msgid "Day" msgstr "Tag" @@ -2806,22 +2806,22 @@ msgid "This modul move timers between channels." msgstr "Diese Modul verschiebt Timer zwischen Kanälen." #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:217 +#: ../lib/XXV/MODULES/MOVETIMER.pm:218 msgid "Couldn't query rules to move timer from database!" msgstr "Konnte Regel zum Verschieben der Timer nicht aus der Datenbank abfragen!" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:293 +#: ../lib/XXV/MODULES/MOVETIMER.pm:296 msgid "There none timer to move." msgstr "Es wurden keine Timer verschoben." #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:362 ../lib/XXV/MODULES/MOVETIMER.pm:519 +#: ../lib/XXV/MODULES/MOVETIMER.pm:364 ../lib/XXV/MODULES/MOVETIMER.pm:521 msgid "Rule to move timer with ID '%s' does not exist in the database!" msgstr "Regel zum Verschieben der Timer mit ID '%s' exisitert nicht in der Datenbank!" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:379 +#: ../lib/XXV/MODULES/MOVETIMER.pm:381 msgid "Which channel should used as source?" msgstr "Welcher Kanal soll als Quelle verwendet werden?" @@ -2831,27 +2831,27 @@ msgid "List rules to move timer between channels" msgstr "Zeige Regel zum Verschieben von Timer zwischen Kanälen" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:391 ../lib/XXV/MODULES/MOVETIMER.pm:413 ../lib/XXV/MODULES/RECORDS.pm:1880 ../lib/XXV/MODULES/STREAM.pm:170 ../lib/XXV/MODULES/TIMERS.pm:674 +#: ../lib/XXV/MODULES/MOVETIMER.pm:393 ../lib/XXV/MODULES/MOVETIMER.pm:415 ../lib/XXV/MODULES/RECORDS.pm:1880 ../lib/XXV/MODULES/STREAM.pm:170 ../lib/XXV/MODULES/TIMERS.pm:672 msgid "This channel '%s' does not exist!" msgstr "Dieser Kanal '%s' existiert nicht in der Datenbank!" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:401 +#: ../lib/XXV/MODULES/MOVETIMER.pm:403 msgid "Which channel should used as destination?" msgstr "Welcher Kanal soll als Ziel verwendet werden?" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:420 +#: ../lib/XXV/MODULES/MOVETIMER.pm:422 msgid "When should use this rule" msgstr "Wann soll die Regel verwendet werden" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:430 +#: ../lib/XXV/MODULES/MOVETIMER.pm:432 msgid "How should timer handled, if changed" msgstr "Wie sollen Timer behandelt bei Änderungen behandelt werden" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:451 +#: ../lib/XXV/MODULES/MOVETIMER.pm:453 msgid "Rule to move timer saved!" msgstr "Regel zum Verschieben von Timern gespeichert!" @@ -2861,17 +2861,17 @@ msgid "Create rule to move timer between channels" msgstr "Erzeuge eine neue Regel zum Verschieben von Timern zwischen Kanälen" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:488 ../lib/XXV/MODULES/MOVETIMER.pm:495 +#: ../lib/XXV/MODULES/MOVETIMER.pm:490 ../lib/XXV/MODULES/MOVETIMER.pm:497 msgid "Couldn't insert rule move timer in database!" msgstr "Regel zum Verschieben von Timern konnte nicht in Datenbank eingefügt werden!" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:511 +#: ../lib/XXV/MODULES/MOVETIMER.pm:513 msgid "Missing ID to select rules for deletion! Please use movetimerdelete 'id'" msgstr "Benötige ID zum Auswählen der Regel für die Löschung! Bitte verwende movetimerdelete 'id'" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:523 +#: ../lib/XXV/MODULES/MOVETIMER.pm:525 msgid "Rule to move timer %s is deleted." msgstr "Regel zum Verschieben der Timer %s wurde gelöscht." @@ -2881,32 +2881,32 @@ msgid "Delete rule to move timer between channels" msgstr "Lösche Regel zum Verschieben von Timern zwischen Kanälen" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:597 +#: ../lib/XXV/MODULES/MOVETIMER.pm:599 msgid "Allways" msgstr "Immer" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:598 +#: ../lib/XXV/MODULES/MOVETIMER.pm:60 +msgid "Edit rule to move timer between channels" +msgstr "Bearbeite Regel zum Verschieben von Timern zwischen Kanälen" + +#-------------------- +#: ../lib/XXV/MODULES/MOVETIMER.pm:600 msgid "Newer" msgstr "Niemals" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:599 +#: ../lib/XXV/MODULES/MOVETIMER.pm:601 msgid "If collision detected" msgstr "Wenn eine Kollision erkannt wurde" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:60 -msgid "Edit rule to move timer between channels" -msgstr "Bearbeite Regel zum Verschieben von Timern zwischen Kanälen" - -#-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:610 +#: ../lib/XXV/MODULES/MOVETIMER.pm:612 msgid "Keep inactiv original timer" msgstr "Behalte den inaktiven original Timer" #-------------------- -#: ../lib/XXV/MODULES/MOVETIMER.pm:611 +#: ../lib/XXV/MODULES/MOVETIMER.pm:613 msgid "Copy original timer" msgstr "Kopiere den original Timer" @@ -3151,7 +3151,7 @@ msgid "No recording defined for editing!" msgstr "Keine Aufnahme-ID zum Bearbeiten!" #-------------------- -#: ../lib/XXV/MODULES/RECORDS.pm:1833 ../lib/XXV/MODULES/RECORDS.pm:2426 ../lib/XXV/MODULES/TIMERS.pm:789 +#: ../lib/XXV/MODULES/RECORDS.pm:1833 ../lib/XXV/MODULES/RECORDS.pm:2426 ../lib/XXV/MODULES/TIMERS.pm:656 msgid "Title of recording" msgstr "Titel der Aufnahme" @@ -3955,12 +3955,17 @@ msgid "Delete timer 'tid'" msgstr "Lösche Timer 'tid'" #-------------------- +#: ../lib/XXV/MODULES/TIMERS.pm:1028 +msgid "No timer to toggle!" +msgstr "Kein Timer zum Umschalten!" + +#-------------------- #: ../lib/XXV/MODULES/TIMERS.pm:109 msgid "Activate/Deactive timer 'tid'" msgstr "Aktiviere/Deaktiviere Timer 'tid'" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:1109 +#: ../lib/XXV/MODULES/TIMERS.pm:1158 msgid "%d timer written to database." msgstr "%d Timer in Datenbank geschrieben." @@ -3975,12 +3980,12 @@ msgid "New timer found: %s" msgstr "Neuer Timer gefunden: %s" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:1574 -msgid "Timer %d with title '%s' has started the recording!" -msgstr "Timer %d mit Titel '%s' hat die Aufnahme gestartet!" +#: ../lib/XXV/MODULES/TIMERS.pm:1642 +msgid "Timer title '%s' has started the recording!" +msgstr "Timer mit Titel '%s' hat die Aufnahme gestartet!" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:1575 +#: ../lib/XXV/MODULES/TIMERS.pm:1643 msgid "on channel: %s to %s" msgstr "auf Kanal: %s bis %s" @@ -4045,17 +4050,17 @@ msgid "How much DVB cards exist on this system" msgstr "Wieviel DVB Karten sind im System" #-------------------- +#: ../lib/XXV/MODULES/TIMERS.pm:569 ../lib/XXV/MODULES/TIMERS.pm:572 +msgid "Event '%s' does not exist in the database!" +msgstr "Sendung '%s' existiert nicht in der Datenbank!" + +#-------------------- #: ../lib/XXV/MODULES/TIMERS.pm:57 msgid "Use Programme Delivery Control (PDC) to control start time" msgstr "Verwende Video Program System (VPS) zum Überwachen der Startzeit" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:576 ../lib/XXV/MODULES/TIMERS.pm:579 -msgid "Event '%s' does not exist in the database!" -msgstr "Sendung '%s' existiert nicht in der Datenbank!" - -#-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:594 ../lib/XXV/MODULES/TIMERS.pm:813 +#: ../lib/XXV/MODULES/TIMERS.pm:587 ../lib/XXV/MODULES/TIMERS.pm:806 msgid "New timer" msgstr "Neuer Timer" @@ -4065,27 +4070,27 @@ msgid "Change timers if EPG entries change" msgstr "Timer justieren, wenn EPG Eintrag verändert wurde" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:635 ../lib/XXV/MODULES/TIMERS.pm:882 ../lib/XXV/MODULES/TIMERS.pm:946 +#: ../lib/XXV/MODULES/TIMERS.pm:628 ../lib/XXV/MODULES/TIMERS.pm:921 ../lib/XXV/MODULES/TIMERS.pm:999 msgid "Timer '%s' does not exist in the database!" msgstr "Timer '%s' existiert nicht in der Datenbank!" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:655 +#: ../lib/XXV/MODULES/TIMERS.pm:648 msgid "Enable this timer" msgstr "Aktiviere diesen Timer" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:660 +#: ../lib/XXV/MODULES/TIMERS.pm:653 msgid "Use PDC time to control timer" msgstr "Verwende VPS Zeit zum Überwachen des Timers" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:666 +#: ../lib/XXV/MODULES/TIMERS.pm:664 msgid "Which channel should recorded" msgstr "Welcher Kanal soll aufgezeichnet werden" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:688 +#: ../lib/XXV/MODULES/TIMERS.pm:686 msgid "%Y-%m-%d" msgstr "%d.%m.%Y" @@ -4095,7 +4100,7 @@ msgid "List timers 'tid'" msgstr "Zeige Timer 'tid'" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:694 +#: ../lib/XXV/MODULES/TIMERS.pm:692 msgid "Enter a day (1 to 31) or weekday in format 'MTWTFSS'." msgstr "Tag (1 - 31) oder Wochentag im Format 'MDMDFSS' eingeben." @@ -4105,17 +4110,17 @@ msgid "Search timers 'text'" msgstr "Suche Timer 'text'" #-------------------- +#: ../lib/XXV/MODULES/TIMERS.pm:805 +msgid "Edit timer" +msgstr "Timer bearbeiten" + +#-------------------- #: ../lib/XXV/MODULES/TIMERS.pm:81 msgid "Read timers and write them to the database" msgstr "Lese Timer und schreibe sie in die Datenbank" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:812 -msgid "Edit timer" -msgstr "Timer bearbeiten" - -#-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:868 +#: ../lib/XXV/MODULES/TIMERS.pm:864 msgid "No timer defined for deletion! Please use tdelete 'tid'." msgstr "Kein Timer zum Löschen definiert! Bitte verwende tdelete 'tid'." @@ -4125,12 +4130,12 @@ msgid "Create timer 'eid'" msgstr "Erzeuge Timer 'eid'" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:920 +#: ../lib/XXV/MODULES/TIMERS.pm:937 msgid "No timer to delete!" msgstr "Kein Timer zum Löschen!" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:932 +#: ../lib/XXV/MODULES/TIMERS.pm:949 msgid "No timer defined to toggle! Please use ttoggle 'id'." msgstr "Kein Timer zum Umschalten definiert! Bitte verwende ttoggle 'tid'" @@ -4140,11 +4145,6 @@ msgid "Edit timer 'tid'" msgstr "Bearbeite Timer 'tid'" #-------------------- -#: ../lib/XXV/MODULES/TIMERS.pm:991 -msgid "No timer to toggle!" -msgstr "Kein Timer zum Umschalten!" - -#-------------------- #: ../lib/XXV/MODULES/USER.pm:103 msgid "Log out from current session." msgstr "Abmelden von der aktuellen Sitzung." diff --git a/locale/de/LC_MESSAGES/xxv.mo b/locale/de/LC_MESSAGES/xxv.mo Binary files differindex 92d6b64..d7a67b5 100644 --- a/locale/de/LC_MESSAGES/xxv.mo +++ b/locale/de/LC_MESSAGES/xxv.mo |
