diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-12-05 18:48:49 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-12-05 18:48:49 +0000 |
| commit | 6f9314b3403c00baecbe305b0b3fcbfe053141cb (patch) | |
| tree | 307fe8f22a4aca46af810430edff1ebb87f863af /lib | |
| parent | a3225761044a2c6c15b220f1663200795526fcc9 (diff) | |
| download | xxv-6f9314b3403c00baecbe305b0b3fcbfe053141cb.tar.gz xxv-6f9314b3403c00baecbe305b0b3fcbfe053141cb.tar.bz2 | |
* AUTOTIMER: Speedup search epg events
* AUTOTIMER: Don't sort fields of result output
* MUSIC: Warn if socket blocked
* RECORDS: a little optimize at analyze function
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/XXV/MODULES/AUTOTIMER.pm | 89 | ||||
| -rw-r--r-- | lib/XXV/MODULES/MUSIC.pm | 2 | ||||
| -rw-r--r-- | lib/XXV/MODULES/RECORDS.pm | 40 |
3 files changed, 67 insertions, 64 deletions
diff --git a/lib/XXV/MODULES/AUTOTIMER.pm b/lib/XXV/MODULES/AUTOTIMER.pm index 92a12a0..4f281ea 100644 --- a/lib/XXV/MODULES/AUTOTIMER.pm +++ b/lib/XXV/MODULES/AUTOTIMER.pm @@ -4,7 +4,7 @@ use strict; use Tools; use Locale::gettext; - +use POSIX ":sys_wait_h", qw(strftime); # ------------------ # Name: module @@ -388,15 +388,14 @@ sub autotimer { 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("Channel") => $events->{$Id}->{Channel}, - gettext("Title") => $events->{$Id}->{Title}, - gettext("Subtitle") => $events->{$Id}->{Subtitle}, - gettext("Day") => $events->{$Id}->{Day}, - gettext("Start") => fmttime($events->{$Id}->{Start}), - gettext("Stop") => fmttime($events->{$Id}->{Stop}), - gettext("Description") => $events->{$Id}->{Summary}, - }; + my $output = [ + [gettext("Title") , $events->{$Id}->{Title}], + [gettext("Subtitle") , $events->{$Id}->{Subtitle}], + [gettext("Channel") , $events->{$Id}->{Channel}], + [gettext("Start") , strftime("%x %X", localtime($events->{$Id}->{starttime}))], + [gettext("Stop") , strftime("%x %X", localtime($events->{$Id}->{stoptime}))], + [gettext("Description"), $events->{$Id}->{Summary}], + ]; $console->table($output); }; } @@ -412,56 +411,62 @@ sub autotimer { $events->{$Id}->{File} = $obj->_placeholder($events->{$Id}, $a); - if($events->{$Id}->{VpsStart} and $a->{VPS}) { + if($events->{$Id}->{vpsstart} and $a->{VPS}) { $events->{$Id}->{VPS} = 'y'; - $events->{$Id}->{Day} = $events->{$Id}->{VpsDay}; - $events->{$Id}->{Start} = $events->{$Id}->{VpsStart}; - $events->{$Id}->{Stop} = $events->{$Id}->{VpsStop}; + $events->{$Id}->{starttime} = $events->{$Id}->{vpsstart}; + $events->{$Id}->{stoptime} = $events->{$Id}->{vpsstop}; } - my $nexttime = $timermod->getNextTime( $events->{$Id}->{Day} , $events->{$Id}->{Start},$events->{$Id}->{Stop} ) - or error(sprintf("Couldn't get next time for this autotimer: %d", $events->{$Id}->{eventid})); - # Add anchor for reidentify timer my $aidcomment = sprintf('#~AT[%d]', $id); - if($vdrVersion >= 10344){ - $events->{$Id}->{Summary} = $aidcomment; - } else { - $events->{$Id}->{Summary} .= $aidcomment; - } + if($vdrVersion >= 10344){ + $events->{$Id}->{Summary} = $aidcomment; + } else { + $events->{$Id}->{Summary} .= $aidcomment; + } - my @parameters = ($events->{$Id}, $nexttime, $aidcomment); - # Wished timer already exist with same data from autotimer ? - next if($obj->_timerexists(@parameters)); + next if($obj->_timerexists($events->{$Id}, $aidcomment)); # Adjust timers set by the autotimer - my $timerID = $obj->_timerexistsfuzzy(@parameters); + my $timerID = $obj->_timerexistsfuzzy($events->{$Id}, $aidcomment); if(!$timerID && $a->{Done}) { my @done = split(',', $a->{Done}); # Ignore timer if it already with same title recorded - if(grep(/^chronicle$/, @done) && $obj->_chronicleexists(@parameters)) { + if(grep(/^chronicle$/, @done) && $obj->_chronicleexists($events->{$Id}, $aidcomment)) { lg sprintf("Don't create timer from AT(%d) '%s', because found same data on chronicle", $id, $events->{$Id}->{File}); next; } # Ignore timer if it already with same title recorded - if(grep(/^recording$/, @done) && $obj->_recordexists(@parameters)){ + if(grep(/^recording$/, @done) && $obj->_recordexists($events->{$Id}, $aidcomment)){ lg sprintf("Don't create timer from AT(%d) '%s', because found same data on recordings", $id, $events->{$Id}->{File}); next; } # Ignore timer if it already a timer with same title programmed, on other place - if(grep(/^timer$/, @done) && $obj->_timerexiststitle(@parameters)){ + if(grep(/^timer$/, @done) && $obj->_timerexiststitle($events->{$Id}, $aidcomment)){ lg sprintf("Don't create timer from AT(%d) '%s', because found same data on other timers", $id, $events->{$Id}->{File}); next; } } my $error = 0; + + my ($bsec,$bmin,$bhour,$bmday,$bmon,$byear,$bwday,$byday,$bisdst) = localtime($events->{$Id}->{starttime}); + my ($esec,$emin,$ehour,$emday,$emon,$eyear,$ewday,$eyday,$eisdst) = localtime($events->{$Id}->{stoptime}); + + if($timermod->{newTimerFormat}) { + $events->{$Id}->{Day} = sprintf("%04d-%02d-%02d",$byear+1900,$bmon+1,$bmday); + } else { + $events->{$Id}->{Day} = sprintf("%02d",$bmday); + } + $events->{$Id}->{Start} = sprintf("%02d%02d",$bhour,$bmin); + $events->{$Id}->{Stop} = sprintf("%02d%02d",$ehour,$emin); + my $erg = $timermod->saveTimer($events->{$Id}, $timerID ? $timerID : undef); foreach my $zeile (@$erg) { if($zeile =~ /^(\d{3})\s+(.+)/) { @@ -1168,12 +1173,10 @@ SELECT SQL_CACHE e.title as Title, e.subtitle as Subtitle, e.description as Summary, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(e.starttime) - ? ), '%d') as Day, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(e.starttime) - ? ), '%H%i') as Start, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(e.starttime) + e.duration + ? ), '%H%i') as Stop, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(e.vpstime)), '%d') as VpsDay, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(e.vpstime)), '%H%i') as VpsStart, - DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(e.vpstime) + e.duration), '%H%i') as VpsStop + (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 FROM $table as e, CHANNELS as c @@ -1184,7 +1187,7 @@ WHERE #dumper $sql; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($prev,$prev,$after,@{$term}) + $sth->execute($prev,$after,@{$term}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); return $sth->fetchall_hashref('eventid'); } @@ -1194,7 +1197,7 @@ sub _timerexists { # ------------------ my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my ($nexttime, $aidcomment) = @_; + my $aidcomment = shift || return error('No data defined!'); # 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 @@ -1210,7 +1213,7 @@ sub _timerexists { )"; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{ChannelID},$nexttime->{start},$nexttime->{stop}, + $sth->execute($eventdata->{ChannelID},$eventdata->{starttime},$eventdata->{stoptime}, $eventdata->{Priority},$eventdata->{Lifetime}, $eventdata->{File},$eventdata->{Summary},"%".$aidcomment) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); @@ -1226,7 +1229,7 @@ sub _timerexistsfuzzy { # ------------------ my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my ($nexttime, $aidcomment) = @_; + my $aidcomment = shift || return error('No data defined!'); # Adjust timers set by the autotimer my $timerID = 0; @@ -1238,7 +1241,7 @@ sub _timerexistsfuzzy { order by length(Summary) desc;"; my $sth = $obj->{dbh}->prepare($sql); - $sth->execute($eventdata->{ChannelID},$nexttime->{start},$nexttime->{stop}, + $sth->execute($eventdata->{ChannelID},$eventdata->{starttime},$eventdata->{stoptime}, "%".$aidcomment) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $erg = $sth->fetchrow_hashref(); @@ -1252,7 +1255,7 @@ sub _recordexists { # ------------------ my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my ($nexttime, $aidcomment) = @_; + my $aidcomment = shift || return error('No data defined!'); # Ignore timer if it already with same title recorded my $sql = "SELECT SQL_CACHE count(*) as cc @@ -1274,7 +1277,7 @@ sub _chronicleexists { # ------------------ my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my ($nexttime, $aidcomment) = @_; + my $aidcomment = shift || return error('No data defined!'); my $chroniclemod = main::getModule('CHRONICLE'); return 0 @@ -1295,7 +1298,7 @@ sub _timerexiststitle { # ------------------ my $obj = shift || return error('No object defined!'); my $eventdata = shift || return error('No data defined!'); - my ($nexttime, $aidcomment) = @_; + my $aidcomment = shift || return error('No data defined!'); my $sql = "SELECT SQL_CACHE count(*) as cc from TIMERS where File = ?"; diff --git a/lib/XXV/MODULES/MUSIC.pm b/lib/XXV/MODULES/MUSIC.pm index 424f27e..4181d84 100644 --- a/lib/XXV/MODULES/MUSIC.pm +++ b/lib/XXV/MODULES/MUSIC.pm @@ -229,7 +229,7 @@ sub _init { Proto => 'tcp', Reuse => 1, Timeout => 3600 - ); + ) or return error("Couldn't create socket: $!");; my $channels; diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm index 106e867..58cf8e1 100644 --- a/lib/XXV/MODULES/RECORDS.pm +++ b/lib/XXV/MODULES/RECORDS.pm @@ -294,7 +294,10 @@ sub _init { main::after(sub{ $obj->{svdrp} = main::getModule('SVDRP'); unless($obj->{svdrp}) { - panic ("Couldn't get modul SVDRP"); + return 0; + } + $obj->{timers} = main::getModule('TIMERS'); + unless($obj->{timers}) { return 0; } @@ -356,8 +359,7 @@ sub _notify_readData { $obj->{lastupdate} = time; # Update preview images after five minutes - my $tmod = main::getModule('TIMERS'); - my $after = ($tmod->{prevminutes}) * 2; + my $after = ($obj->{timers}->{prevminutes}) * 2; $after = 300 if($after <= 300); Event->timer( @@ -556,16 +558,15 @@ sub readData { my $duration = $obj->_recordinglength($db_data->{$h}->{path}); if($duration != $db_data->{$h}->{duration}) { + # set addtime only if called from EVENT::TIMER + # avoid generating preview image during user actions + # it's should speedup reading recordings unless($console) { - # set addtime only if called from EVENT::TIMER - # avoid generating preview image during user actions - # it's should speedup reading recordings - $db_data->{$h}->{addtime} = time; - - # Make Preview and remove older Preview images - my $command = $obj->videoPreview( $db_data->{$h}, 1); - push(@{$obj->{JOBS}}, $command) - if($command && not grep(/\Q$command/g,@{$obj->{JOBS}})); + $db_data->{$h}->{addtime} = time; + # Make preview and remove older Preview images + my $command = $obj->videoPreview( $db_data->{$h}, 1); + push(@{$obj->{JOBS}}, $command) + if($command && not grep(/\Q$command/g,@{$obj->{JOBS}})); } # Update duration at database entry $db_data->{$h}->{duration} = $duration; @@ -1055,15 +1056,14 @@ sub videoPreview { } } - my $tmod = main::getModule('TIMERS'); - my $startseconds = ($tmod->{prevminutes} * 60) * 2; - my $endseconds = ($tmod->{afterminutes} * 60) * 2; + my $startseconds = ($obj->{timers}->{prevminutes} * 60) * 2; + my $endseconds = ($obj->{timers}->{afterminutes} * 60) * 2; my $stepseconds = ($info->{duration} - ($startseconds + $endseconds)) / $count; - # reduced interval on short movies - if($stepseconds <= 0 or ($startseconds + ($count * $stepseconds)) > $info->{duration}) { - $stepseconds = $info->{duration} / ( $count + 2 ) ; - $startseconds = $stepseconds; - } + # reduced interval on short movies + if($stepseconds <= 0 or ($startseconds + ($count * $stepseconds)) > $info->{duration}) { + $stepseconds = $info->{duration} / ( $count + 2 ) ; + $startseconds = $stepseconds; + } my @files; my @frames; |
