summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2009-01-01 10:11:56 +0000
committerAndreas Brachold <vdr07@deltab.de>2009-01-01 10:11:56 +0000
commitf3fbf13880739f68242f41fc166be28f2cba8c32 (patch)
treee1598a9650608fe0830b570f253e33205cd1b72c /lib
parentf08caeba615e92e258d8284516778ccf2f06f0d9 (diff)
downloadxxv-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.pm42
-rw-r--r--lib/XXV/MODULES/CHANNELS.pm11
-rw-r--r--lib/XXV/MODULES/RECORDS.pm32
-rw-r--r--lib/XXV/MODULES/SVDRP.pm4
-rw-r--r--lib/XXV/MODULES/TIMERS.pm135
-rw-r--r--lib/XXV/MODULES/USER.pm14
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);
}