diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2009-01-01 10:11:56 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2009-01-01 10:11:56 +0000 |
| commit | f3fbf13880739f68242f41fc166be28f2cba8c32 (patch) | |
| tree | e1598a9650608fe0830b570f253e33205cd1b72c /lib | |
| parent | f08caeba615e92e258d8284516778ccf2f06f0d9 (diff) | |
| download | xxv-f3fbf13880739f68242f41fc166be28f2cba8c32.tar.gz xxv-f3fbf13880739f68242f41fc166be28f2cba8c32.tar.bz2 | |
* AUTOTIMER: Create timer by nativ order of events
* USERS: ulist show translated access level
* CHANNELS: cdelete - refactory code
* RECORDS: rdelete,rrecover - refactory code
* TIMERS: tdelete, ttoggle - refactory code
* TIMERS: findOverlapping - refactory code
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/XXV/MODULES/AUTOTIMER.pm | 42 | ||||
| -rw-r--r-- | lib/XXV/MODULES/CHANNELS.pm | 11 | ||||
| -rw-r--r-- | lib/XXV/MODULES/RECORDS.pm | 32 | ||||
| -rw-r--r-- | lib/XXV/MODULES/SVDRP.pm | 4 | ||||
| -rw-r--r-- | lib/XXV/MODULES/TIMERS.pm | 135 | ||||
| -rw-r--r-- | lib/XXV/MODULES/USER.pm | 14 |
6 files changed, 107 insertions, 131 deletions
diff --git a/lib/XXV/MODULES/AUTOTIMER.pm b/lib/XXV/MODULES/AUTOTIMER.pm index b60110d..689e263 100644 --- a/lib/XXV/MODULES/AUTOTIMER.pm +++ b/lib/XXV/MODULES/AUTOTIMER.pm @@ -423,23 +423,23 @@ sub _autotimerLookup { # 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 $eventid (sort keys %$events) { + $console->message(sprintf(gettext("Found %d entries for '%s' in EPG database."), $events ? scalar @$events : 0, $a->{Search})); + foreach my $event (@{$events}) { - my $output = [ [gettext("Title"), $events->{$eventid}->{title}] ]; - push(@$output, [gettext("Subtitle"), $events->{$eventid}->{subtitle}]) - if($events->{$eventid}->{subtitle}); - push(@$output, [gettext("Channel"), $events->{$eventid}->{channelname}]); + my $output = [ [gettext("Title"), $event->{title}] ]; + push(@$output, [gettext("Subtitle"), $event->{subtitle}]) + if($event->{subtitle}); + push(@$output, [gettext("Channel"), $event->{channelname}]); - if($events->{$eventid}->{vpsstart} and $a->{VPS} eq 'y' and $modT->{usevpstime} eq 'y') { - push(@$output, [gettext("Start"), datum($events->{$eventid}->{vpsstart} )]); - push(@$output, [gettext("Stop"), datum($events->{$eventid}->{vpsstop} )]); + if($event->{vpsstart} and $a->{VPS} eq 'y' and $modT->{usevpstime} eq 'y') { + push(@$output, [gettext("Start"), datum($event->{vpsstart} )]); + push(@$output, [gettext("Stop"), datum($event->{vpsstop} )]); } else { - push(@$output, [gettext("Start"), datum($events->{$eventid}->{starttime})]); - push(@$output, [gettext("Stop"), datum($events->{$eventid}->{stoptime} )]); + push(@$output, [gettext("Start"), datum($event->{starttime})]); + push(@$output, [gettext("Stop"), datum($event->{stoptime} )]); } - push(@$output,[gettext("Description"), $events->{$eventid}->{description}]) - if($events->{$eventid}->{description}); + push(@$output,[gettext("Description"), $event->{description}]) + if($event->{description}); $console->table($output); }; } @@ -450,8 +450,7 @@ sub _autotimerLookup { # Every found and save this as timer my $c = 0; my $m = 0; - foreach my $eventid (sort keys %$events) { - my $event = $events->{$eventid}; + foreach my $event (@{$events}) { $event->{active} = 'y'; $event->{priority} = $a->{Priority}; @@ -1363,13 +1362,18 @@ WHERE GROUP BY c.id , e.eventid ORDER BY - e.starttime + e.starttime asc, + e.eventid desc |; my $sth = $obj->{dbh}->prepare($sql); $sth->execute($prev,$after,@{$term}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); - return $sth->fetchall_hashref('eventid'); + my $lst; + while (my $erg = $sth->fetchrow_hashref()) { + push(@$lst,$erg); + } + return $lst; } # ------------------ @@ -1545,7 +1549,7 @@ sub _placeholder { my %at_details; $at_details{'title'} = $data->{title}; - $at_details{'subtitle'} = $data->{subtitle} ? $data->{subtitle} : $data->{start}; + $at_details{'subtitle'} = $data->{subtitle}; $at_details{'date'} = $data->{day}; $at_details{'regie'} = $1 if $data->{description} =~ m/\|Director: (.*?)\|/; $at_details{'category'} = $1 if $data->{description} =~ m/\|Category: (.*?)\|/; @@ -1558,7 +1562,7 @@ sub _placeholder { $at_details{'rating'} = $1 if $data->{description} =~ m/\|Rating: (.*?)\|/; $at_details{'cast'} = $1 if $data->{description} =~ m/\|Cast: (.*?)\|/; - $at_details{'abstract'} = $1 if $data->{description} =~ m/^(.*?)[\.\n]/; + $at_details{'abstract'} = $1 if $data->{description} =~ m/^(.*?)[\.\r\n]/; $at_details{'abstract'} = substr($at_details{'abstract'},0,100) if($at_details{'abstract'}); if ($at->{Dir}) { diff --git a/lib/XXV/MODULES/CHANNELS.pm b/lib/XXV/MODULES/CHANNELS.pm index de518a2..3967948 100644 --- a/lib/XXV/MODULES/CHANNELS.pm +++ b/lib/XXV/MODULES/CHANNELS.pm @@ -1354,15 +1354,8 @@ sub deleteChannel { my $sth = $self->{dbh}->prepare($sql); $sth->execute(@ch) or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr)); - my $data = $sth->fetchall_arrayref(); - - foreach my $d (@$data) { - my $c = { - vid => $d->[0], - pos => $d->[1], - name => $d->[2], - hash => $d->[3] - }; + + while (my $c = $sth->fetchrow_hashref()) { if(ref $console and $console->{TYP} eq 'CONSOLE') { $console->table({ diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm index e436f65..32c65a4 100644 --- a/lib/XXV/MODULES/RECORDS.pm +++ b/lib/XXV/MODULES/RECORDS.pm @@ -766,7 +766,7 @@ sub _readData { next; } $db_data = $sth->fetchall_hashref('idx'); - lg sprintf( 'Compare recording database with data from %s : %d / %d', + debug sprintf( 'Compare recording database with data from %s : %d / %d', $hostname, scalar keys %$db_data,scalar keys %$vdrData ); } @@ -887,7 +887,7 @@ sub _readData { $removedData += $db_data ? scalar keys %$db_data : 0; } - debug sprintf 'Finish .. %d recordings inserted, %d recordings updated, %d recordings removed', + debug sprintf 'Finish .. %d new recordings inserted, %d recordings updated, %d recordings removed', $insertedData, $updatedState, $removedData; map { push(@todel,$outdatedRecordings->{$_}->{hash}); } keys %{$outdatedRecordings}; @@ -950,7 +950,7 @@ sub _readData { my $job = shift (@jobs); my $preview = []; - lg sprintf('Call command "%s"', $job->{command}); + debug sprintf('Call command "%s"', $job->{command}); my $erg = system(sprintf('nice -n 19 %s', $job->{command})); my @images = glob(sprintf('%s/[0-9]*.jpg', $job->{previewdir})); foreach(@images) { @@ -2168,26 +2168,20 @@ sub delete { my @recordings = keys %rec; my $sql = sprintf( -qq|SELECT SQL_CACHE e.vid, r.id,CONCAT_WS('~',e.title,e.subtitle),r.hash +qq|SELECT SQL_CACHE e.vid, r.id,CONCAT_WS('~',e.title,e.subtitle) as title,r.hash FROM RECORDS as r,OLDEPG as e WHERE e.eventid = r.eventid and r.hash IN (%s) ORDER BY e.vid, r.id desc|, join(',' => ('?') x @recordings)); my $sth = $self->{dbh}->prepare($sql); $sth->execute(@recordings) or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr)); - my $data = $sth->fetchall_arrayref(); # Query as array to hold ordering ! - foreach my $recording (@$data) { - # Make hash for better reading - my $r = { - vid => $recording->[0], - Id => $recording->[1], - Title => $recording->[2], - hash => $recording->[3] - }; + while (my $r = $sth->fetchrow_hashref()) { if(ref $console and $console->{TYP} eq 'CONSOLE') { - $console->table($r); + $console->table({ + gettext('Title') => $r->{title} + }); my $confirm = $console->confirm({ typ => 'confirm', def => 'y', @@ -2197,14 +2191,14 @@ qq|SELECT SQL_CACHE e.vid, r.id,CONCAT_WS('~',e.title,e.subtitle),r.hash } debug sprintf('Call delete recording with title "%s", id: %d%s', - $r->{Title}, - $r->{Id}, + $r->{title}, + $r->{id}, ( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" ) ); - $self->{svdrp}->queue_add(sprintf("delr %s",$r->{Id}), $r->{vid}); - push(@{$todelete},$r->{Title}); # Remember title + $self->{svdrp}->queue_add(sprintf("delr %s",$r->{id}), $r->{vid}); + push(@{$todelete},$r->{title}); # Remember title push(@{$hashdelete},$r->{hash}); # Remember hash # Delete recordings from request, if found in database @@ -2969,7 +2963,7 @@ sub recover { my $path = $files->{$hash}->{path}; my $newPath = $path; $newPath =~ s/\.del$/\.rec/g; - lg sprintf("Recover recording, rename '%s' to %s",$path,$newPath); + debug sprintf("Recover recording, rename '%s' to %s",$path,$newPath); if(!move($path,$newPath)) { con_err($console,sprintf(gettext("Recover recording, couldn't rename '%s' to %s : %s"),$path,$newPath,$!)); next; diff --git a/lib/XXV/MODULES/SVDRP.pm b/lib/XXV/MODULES/SVDRP.pm index 99b3a90..d9e9a4a 100644 --- a/lib/XXV/MODULES/SVDRP.pm +++ b/lib/XXV/MODULES/SVDRP.pm @@ -381,7 +381,9 @@ from or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $fields = $sth->{'NAME'}; my $erg = $sth->fetchall_arrayref(); - unshift(@$erg, $fields); + + unshift(@$erg, $fields) + unless($console->typ eq 'AJAX'); $console->table($erg); } diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm index c034f30..61dd7a3 100644 --- a/lib/XXV/MODULES/TIMERS.pm +++ b/lib/XXV/MODULES/TIMERS.pm @@ -853,29 +853,23 @@ sub deleteTimer { my @timers = split(/[^0-9a-f]/, $timerid); - my $sql = sprintf('SELECT SQL_CACHE id,vid,pos,file,channel,starttime,flags & 1 and NOW() between starttime and stoptime FROM TIMERS where id in (%s) ORDER BY pos desc', join(',' => ('?') x @timers)); + my $sql = sprintf(qq| +SELECT SQL_CACHE id, vid, pos, file, channel, starttime, + flags & 1 and NOW() between starttime and stoptime as running +FROM TIMERS where id in (%s) ORDER BY pos desc|, join(',' => ('?') x @timers)); my $sth = $self->{dbh}->prepare($sql); + $sth->execute(@timers) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); - my $data = $sth->fetchall_arrayref(); - my $modC = main::getModule('CHANNELS') or return; - foreach my $d (@$data) { - my $t = { - id => $d->[0], - vid => $d->[1], - pos => $d->[2], - file => $d->[3], - channel => $d->[4], - start => $d->[5], - running => $d->[6] - }; + + while (my $t = $sth->fetchrow_hashref()) { if(ref $console and $console->{TYP} eq 'CONSOLE') { $console->table({ gettext('Title') => $t->{file}, gettext('Channel') => $modC->ChannelToName($t->{channel}), - gettext('Start') => $t->{start}, + gettext('Start') => $t->{starttime}, }); my $confirm = $console->confirm({ typ => 'confirm', @@ -938,28 +932,18 @@ sub toggleTimer { my @timers = split(/[^0-9a-f]/, $timerid); - my $sql = sprintf('SELECT SQL_CACHE id,vid,pos,file,flags,starttime,stoptime FROM TIMERS where id in (%s) ORDER BY pos desc', join(',' => ('?') x @timers)); + my $sql = sprintf('SELECT SQL_CACHE id,vid,pos,file,flags,starttime,stoptime FROM TIMERS where id in (%s) ORDER BY vid, pos desc', join(',' => ('?') x @timers)); my $sth = $self->{dbh}->prepare($sql); $sth->execute(@timers) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); - my $data = $sth->fetchall_arrayref(); my $ref; my @success; - foreach my $d (@$data) { - my $t = { - id => $d->[0], - vid => $d->[1], - pos => $d->[2], - file => $d->[3], - flags => $d->[4], - start => $d->[5], - stop => $d->[6] - }; + while (my $t = $sth->fetchrow_hashref()) { # Build query for all timers with possible collisions - $ref .= " or '$t->{start}' between starttime and stoptime" - . " or '$t->{stop}' between starttime and stoptime"; + $ref .= " or '$t->{starttime}' between starttime and stoptime" + . " or '$t->{stoptime}' between starttime and stoptime"; my $status = (($t->{flags} & 1) ? 'off' : 'on'); @@ -1613,11 +1597,11 @@ sub findOverlapping { $source =~ s/\s+$//; # no trailing white space unshift(@{$CARDS},{ - Source => $source, + source => $source, tid => undef, stoptime => 0, cardID => $cardid ++, - VDR => $vid, + vid => $vid, #CA => '' } ); @@ -1628,29 +1612,15 @@ sub findOverlapping { # dumper($ca); # } - use constant fid => 0; - use constant fstart => 1; - use constant fstop => 2; - use constant fpriority => 3; - use constant fCardOnly => 4; - use constant fVDR => 5; - use constant fSource => 6; - use constant fTID => 7; - use constant fCardUsed => 8; - use constant fCollision => 9; - use constant fFile => 10; - my $sql = qq| SELECT t.id, - UNIX_TIMESTAMP(t.starttime), - UNIX_TIMESTAMP(t.stoptime), + UNIX_TIMESTAMP(t.starttime) as starttime, + UNIX_TIMESTAMP(t.stoptime) as stoptime, t.priority, c.CA, c.vid, c.source, - c.TID, - NULL, - NULL, + c.TID as tid, file FROM TIMERS as t, CHANNELS as c @@ -1666,30 +1636,31 @@ ORDER BY my $sth = $self->{dbh}->prepare($sql); $sth->execute() or return error sprintf("Couldn't execute query: %s.",$sth->errstr); - my $timer = $sth->fetchall_arrayref(); - + my $timer; # try to assign timer to dvb cards - foreach my $ti (@{$timer}) { + while (my $ti = $sth->fetchrow_hashref()) { + push(@{$timer},$ti); + my $CardOnly = 0; - if($ti->[fCardOnly] =~ /^(\d+)$/ && $1 < 16) { + if($ti->{CA} =~ /^(\d+)$/ && $1 < 16) { $CardOnly = $1; } for my $ca (@{$CARDS}) { - my $source = $ca->{Source}; - if(!($ti->[fCardUsed]) # If'nt assign - && $ca->{VDR} eq $ti->[fVDR] # Same host - && $ti->[fSource] =~ /$source/ # Same source + my $source = $ca->{source}; + if(!($ti->{UsedCard}) # If'nt assign + && $ca->{vid} eq $ti->{vid} # Same host + && $ti->{source} =~ /$source/ # Same source && (!$CardOnly || $ca->{cardID} == $CardOnly) # if CA has DVB Card number && (!$ca->{tid} # Unused transponder - || $ca->{tid} eq $ti->[fTID] # or same transponder - || $ti->[fstart] >= $ca->{stoptime})) { # or timer ended and card are free for next timer + || $ca->{tid} eq $ti->{tid} # or same transponder + || $ti->{starttime} >= $ca->{stoptime})) { # or timer ended and card are free for next timer - $ca->{tid} = $ti->[fTID]; - $ca->{stoptime} = $ti->[fstop]; - $ti->[fCardUsed] = $ca->{cardID}; + $ca->{tid} = $ti->{tid}; + $ca->{stoptime} = $ti->{stoptime}; + $ti->{UsedCard} = $ca->{cardID}; } } - #lg sprintf("Title: %s use dvb card %s", $ti->[fFile], $ti->[fCardUsed] || 'none'); + # lg sprintf("%s use dvb card %s", $ti->{file}, $ti->{UsedCard} || '-'); } # check priority and mark collisions @@ -1697,34 +1668,34 @@ ORDER BY do { $rerun = 0; foreach my $ti (@{$timer}) { - unless($ti->[fCardUsed]) { # used card + unless($ti->{UsedCard}) { # used card my $CardOnly = 0; - if($ti->[fCardOnly] =~ /^(\d+)$/ && $1 < 16) { + if($ti->{CA} =~ /^(\d+)$/ && $1 < 16) { $CardOnly = $1; } foreach my $co (@{$timer}) { - if($ti->[fid] ne $co->[fid] - && $co->[fCardUsed] # used card - && ($co->[fVDR] eq $ti->[fVDR]) #Same Host - && ($co->[fSource] eq $ti->[fSource]) #Same Source - && ((($ti->[fstart] >= $co->[fstart]) # start >= start - && ($ti->[fstart] <= $co->[fstop])) # start <= stop - || (($ti->[fstop] >= $co->[fstart]) # stop >= stop - && ($ti->[fstop] <= $co->[fstop])) # stop <= stop + if($ti->{id} ne $co->{id} + && $co->{UsedCard} # used card + && ($co->{vid} eq $ti->{vid}) #Same Host + && ($co->{source} eq $ti->{source}) #Same Source + && ((($ti->{starttime} >= $co->{starttime}) # start >= start + && ($ti->{starttime} <= $co->{stoptime})) # start <= stop + || (($ti->{stoptime} >= $co->{starttime}) # stop >= stop + && ($ti->{stoptime} <= $co->{stoptime})) # stop <= stop ) - && (!$CardOnly || $CardOnly == $co->[fCardUsed]) + && (!$CardOnly || $CardOnly == $co->{UsedCard}) ) { - if($ti->[fpriority] == $co->[fpriority]) { # Same priority - push(@{$ti->[fCollision]},sprintf('%s:%d',$co->[fid],$co->[fpriority])); - push(@{$co->[fCollision]},sprintf('%s:%d',$ti->[fid],$ti->[fpriority])); - } elsif($ti->[fpriority] > $co->[fpriority]) { # bigger priority - $ti->[fCardUsed] = delete $co->[fCardUsed]; - push(@{$co->[fCollision]},sprintf('%s:%d',$ti->[fid],$ti->[fpriority])); + if($ti->{priority} == $co->{priority}) { # Same priority + push(@{$ti->{Collision}},sprintf('%s:%d',$co->{id},$co->{priority})); + push(@{$co->{Collision}},sprintf('%s:%d',$ti->{id},$ti->{priority})); + } elsif($ti->{priority} > $co->{priority}) { # bigger priority + $ti->{UsedCard} = delete $co->{UsedCard}; + push(@{$co->{Collision}},sprintf('%s:%d',$ti->{id},$ti->{priority})); # need rerun $rerun = 1; } else { # lesser priority - push(@{$ti->[fCollision]},sprintf('%s:%d',$co->[fid],$co->[fpriority])); + push(@{$ti->{Collision}},sprintf('%s:%d',$co->{id},$co->{priority})); } } } @@ -1734,9 +1705,9 @@ ORDER BY my $uth = $self->{dbh}->prepare("UPDATE TIMERS SET collision = ? WHERE id = ?"); foreach my $ti (@{$timer}) { - debug sprintf("%s (none free dvb card)", $ti->[fFile]) unless ($ti->[fCardUsed]); - if(!$ti->[fCardUsed] || ($ti->[fCollision] && scalar @{$ti->[fCollision]})) { - $uth->execute($ti->[fCollision] ? join(',',@{$ti->[fCollision]}) : 'None free dvb card',$ti->[fid]) + debug sprintf("%s (none free dvb card)", $ti->{file}) unless ($ti->{UsedCard}); + if(!$ti->{UsedCard} || ($ti->{Collision} && scalar @{$ti->{Collision}})) { + $uth->execute($ti->{Collision} ? join(',',@{$ti->{Collision}}) : 'None free dvb card',$ti->{id}) or return error sprintf("Couldn't execute query: %s.",$sth->errstr); } } diff --git a/lib/XXV/MODULES/USER.pm b/lib/XXV/MODULES/USER.pm index 4846b4e..81af6d9 100644 --- a/lib/XXV/MODULES/USER.pm +++ b/lib/XXV/MODULES/USER.pm @@ -633,7 +633,19 @@ from or return error sprintf("Couldn't execute query: %s.",$sth->errstr); my $fields = $sth->{'NAME'}; my $erg = $sth->fetchall_arrayref(); - unshift(@$erg, $fields); + + my %l = ( + 'admin' => gettext('Administrator'), + 'user' => gettext('User'), + 'guest' => gettext('Guest') + ); + + map { + $_->[2] = $l{$_->[2]} || $_->[2]; + } @$erg; + + unshift(@$erg, $fields) + unless($console->typ eq 'AJAX'); $console->table($erg); } |
