summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2008-12-07 07:53:54 +0000
committerAndreas Brachold <vdr07@deltab.de>2008-12-07 07:53:54 +0000
commitf98ae2c03cd2ab4a47e7335e1adb5a97e4a1ccea (patch)
tree252e3d28ede025d7d6ef0844c2510fed2439b929
parent8c90ecd98b1b26d9728dea5a2ad0d66fa480ec60 (diff)
downloadxxv-f98ae2c03cd2ab4a47e7335e1adb5a97e4a1ccea.tar.gz
xxv-f98ae2c03cd2ab4a47e7335e1adb5a97e4a1ccea.tar.bz2
* RECORDS: New database 31
- support video directory per recorder (REQUEST #4306 ) (this directory should now defined with vdrlist/vdredit) * RECORDS: calc cut marks, display length of by cut recording * update-xxv: add file check, avoid missing upgrade-xxv-db.sql * update locale de
-rwxr-xr-xcontrib/update-xxv20
-rw-r--r--contrib/upgrade-xxv-db.sql7
-rw-r--r--html/rdisplay.tmpl11
-rw-r--r--html/rlist.tmpl2
-rw-r--r--lib/XXV/MODULES/RECORDS.pm523
-rw-r--r--lib/XXV/MODULES/REMOTE.pm2
-rw-r--r--lib/XXV/MODULES/STREAM.pm33
-rw-r--r--lib/XXV/MODULES/SVDRP.pm46
-rw-r--r--lib/XXV/MODULES/TIMERS.pm2
-rw-r--r--locale/de.po755
-rw-r--r--locale/de/LC_MESSAGES/xxv.mobin80662 -> 81332 bytes
11 files changed, 835 insertions, 566 deletions
diff --git a/contrib/update-xxv b/contrib/update-xxv
index a611e4f..8567cd4 100755
--- a/contrib/update-xxv
+++ b/contrib/update-xxv
@@ -18,7 +18,7 @@
# Increment the version number each time the database changes!
#
-actualVersion=30
+actualVersion=31
# Specify tables to export before and import after update
#
@@ -43,6 +43,7 @@ showHelp()
echo '-d <database> : XXV database name (default: xxv)'
echo '-u <user> : Username (default: root)'
echo '-p <password> : Password (default: no password)'
+ echo '-s <sql-file> : Upgrade sql script (default: upgrade-xxv-db.sql)'
echo '-a : Ask for password'
echo '-f : Force upgrade, do not check version'
echo '-v : Display actual version'
@@ -76,6 +77,7 @@ setDefaults()
[ -z $user ] && user='root'
[ -z $isForceUpdate ] && isForceUpdate='false'
[ -z $askPassword ] && askPassword='false'
+ [ -z $upgrade ] && upgrade='upgrade-xxv-db.sql'
}
buildMysqlParams()
@@ -101,6 +103,14 @@ checkXxv()
fi
}
+checkFiles()
+{
+ if [ ! -e "$upgrade" ]; then
+ showError "File '$upgrade' not found!"
+ exit 1
+ fi
+}
+
checkServer()
{
showInfo 'Checking Server'
@@ -157,7 +167,7 @@ importDb()
updateDb()
{
showInfo 'Updating database'
- if ! eval mysql $mysqlParams -f -B $database < upgrade-xxv-db.sql ; then
+ if ! eval mysql $mysqlParams -f -B $database < $upgrade ; then
showError 'Update failed!' ;
exit 1
fi
@@ -235,6 +245,9 @@ while [ $# -ge 1 ] ; do
-p)
password=$2 ; shift
;;
+ -s)
+ $upgrade=$2 ; shift
+ ;;
-a)
askPassword='true'
;;
@@ -261,6 +274,9 @@ checkXxv
setDefaults
buildMysqlParams
+# check needed files
+checkFiles
+
# check the database
checkServer
checkDatabase
diff --git a/contrib/upgrade-xxv-db.sql b/contrib/upgrade-xxv-db.sql
index 5cbf4a4..3251a99 100644
--- a/contrib/upgrade-xxv-db.sql
+++ b/contrib/upgrade-xxv-db.sql
@@ -149,6 +149,7 @@ CREATE TABLE IF NOT EXISTS `RECORDER` (
`host` varchar(100) NOT NULL default 'localhost',
`port` smallint(4) unsigned default '2001',
`cards` varchar(100) default '',
+ `videodirectory` text default '',
PRIMARY KEY (`id`)
);
@@ -159,10 +160,10 @@ CREATE TABLE IF NOT EXISTS `RECORDER` (
CREATE TABLE IF NOT EXISTS `USER` (
`Id` int(11) unsigned NOT NULL auto_increment,
`Name` varchar(100) NOT NULL default '',
- `Password` varchar(100) NOT NULL,
+ `Password` varchar(32) NOT NULL,
`Level` set('admin','user','guest') NOT NULL,
- `Prefs` varchar(100) default '',
- `UserPrefs` varchar(100) default '',
+ `Prefs` text default '',
+ `UserPrefs` text default '',
`Deny` set('tlist','alist','rlist','mlist','tedit','aedit','redit','remote','stream','cedit','media') default NULL,
`MaxLifeTime` tinyint(2) default '0',
`MaxPriority` tinyint(2) default '0',
diff --git a/html/rdisplay.tmpl b/html/rdisplay.tmpl
index 0b35460..122486e 100644
--- a/html/rdisplay.tmpl
+++ b/html/rdisplay.tmpl
@@ -62,7 +62,7 @@
<?% Stunden = d div 3600 %?>
<?% Minuten = d div 60 mod 60 %?>
<?% Sekunden = d mod 60 %?>
- <?% gettext('Duration') %?> : <?% Stunden div 1 %?>:<?% Minuten div 1 | format('%02d') %?>:<?% Sekunden div 1 | format('%02d') %?>
+ <?% Stunden div 1 %?>:<?% Minuten div 1 | format('%02d') %?>:<?% Sekunden div 1 | format('%02d') %?>
<?% END %?>
<?% END %?>
@@ -137,7 +137,10 @@
<td>&nbsp;</td>
<td><?% date.format(data.StartTime,"%A, %x",locale) %?>&nbsp;
&nbsp;&nbsp;&nbsp;<?% date.format(data.StartTime,"%H:%M",locale) %?>&nbsp;-&nbsp;<?% date.format(data.StopTime,"%H:%M",locale) %?>&nbsp;
- (<?% PROCESS dur d=data.Duration IF data.Duration > (60*5)%?>)</td>
+ (<?% gettext('Duration') %?> : <?% PROCESS dur d=data.Duration %?>
+ <?% IF ( data.cutlength + 10 ) < data.Duration %?>&nbsp;<?% gettext("By cut") %?> : <?% PROCESS dur d=data.cutlength %?><?% END %?>
+ )
+ </td>
</tr>
<tr>
<td>&nbsp;</td>
@@ -181,13 +184,13 @@
<tr>
<td>&nbsp;</td>
<td>
- <?% gettext('Lifetime') %?> : <?% data.Lifetime %?>
+ <?% gettext('Lifetime') %?> : <?% data.lifetime %?>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
- <?% gettext('Priority') %?> : <?% data.Prio %?>
+ <?% gettext('Priority') %?> : <?% data.priority %?>
</td>
</tr>
</table>
diff --git a/html/rlist.tmpl b/html/rlist.tmpl
index aec2ecd..10614c9 100644
--- a/html/rlist.tmpl
+++ b/html/rlist.tmpl
@@ -112,7 +112,7 @@
<?% END %?>
<h1><?% gettext("Stored recordings") %?>
<?% IF search.defined %?> : "<?% search %?>" <?% END %?>
- &nbsp;<small>(<?% param.usage %?>)</small>
+ <br /><small>(<?% param.usage %?>)</small>
</h1>
<?% IF data.size %?>
<?% fields = data.shift %?>
diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm
index 325c60f..45ca2be 100644
--- a/lib/XXV/MODULES/RECORDS.pm
+++ b/lib/XXV/MODULES/RECORDS.pm
@@ -51,12 +51,6 @@ sub module {
type => 'integer',
required => gettext("This is required!"),
},
- videodir => {
- description => gettext('Directory where recordings are stored'),
- default => '/var/lib/video',
- type => 'dir',
- required => gettext("This is required!"),
- },
previewbinary => {
description => gettext('Location of used program to produce thumbnails on your system.'),
default => '/usr/bin/mplayer',
@@ -297,7 +291,7 @@ sub _init {
return 0;
}
- my $version = 29; # Must be increment if rows of table changed
+ my $version = 31; # 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($self->{dbh},'RECORDS',$version,1)) {
@@ -311,10 +305,11 @@ sub _init {
RecordId int unsigned not NULL,
RecordMD5 varchar(32) NOT NULL,
Path text NOT NULL,
- Prio tinyint NOT NULL,
- Lifetime tinyint NOT NULL,
+ priority tinyint NOT NULL,
+ lifetime tinyint NOT NULL,
State tinyint NOT NULL,
FileSize int unsigned default '0',
+ cutlength int unsigned default '0',
Marks text,
Type enum('TV', 'RADIO', 'UNKNOWN') default 'TV',
preview text NOT NULL,
@@ -345,27 +340,7 @@ sub _init {
return 0;
}
- my $updatefile = sprintf("%s/.update",$self->{videodir});
- if( -r $updatefile) {
- my $inotify = new Linux::Inotify2
- or panic sprintf("Unable to create new inotify object: %s",$!);
-
- if($inotify) {
- # Bind watch to event::io
- Event->io(
- fd => $inotify->fileno,
- poll => 'r',
- cb => sub { $inotify->poll }
- );
- # watch update file
- $inotify->watch(
- $updatefile,
- IN_ALL_EVENTS,
- sub { my $e = shift; $self->_notify_readData($e); }
- );
- $self->{inotify} = 'active';
- }
- }
+ $self->_watch_updatefile();
# Interval to read recordings and put to DB
Event->timer(
@@ -374,13 +349,13 @@ sub _init {
cb => sub {
my $forceUpdate = ($self->{countReading} % ( $self->{fullreading} * 60 / $self->{reading} ) == 0);
if($forceUpdate || (time - $self->{lastupdate}) > ($self->{reading}/2) ) {
- $self->readData(undef,undef,undef,$forceUpdate);
+ $self->_readData(undef,undef,$forceUpdate);
$self->{lastupdate} = time;
}
$self->{countReading} += 1;
},
);
- $self->readData(undef,undef,undef);
+ $self->_readData(undef,undef,undef);
$self->{countReading} += 1;
$self->{lastupdate} = time;
return 1;
@@ -389,17 +364,59 @@ sub _init {
1;
}
+sub _watch_updatefile {
+ my $self = shift || return error('No object defined!');
+
+ my $hostlist = $self->{svdrp}->list_unique_recording_hosts();
+ foreach my $vid (@$hostlist) {
+
+ next if(exists $self->{inotify}
+ && exists $self->{inotify}->{$vid});
+
+ my $videodirectory = $self->{svdrp}->videodirectory($vid);
+ unless($videodirectory && -d $videodirectory) {
+ my $hostname = $self->{svdrp}->hostname($vid);
+ error(sprintf("Missing video directory on %s!",$hostname));
+ next;
+ }
+ my $updatefile = sprintf("%s/.update",$videodirectory);
+ if( -r $updatefile) {
+ $self->{inotify}->{$vid}->{handle} = new Linux::Inotify2
+ or panic sprintf("Unable to create new inotify object: %s",$!);
+
+ if($self->{inotify}->{$vid}->{handle}) {
+ # Bind watch to event::io
+ $self->{inotify}->{$vid}->{event} = Event->io(
+ fd => $self->{inotify}->{$vid}->{handle}->fileno,
+ poll => 'r',
+ cb => sub { $self->{inotify}->{$vid}->{handle}->poll }
+ );
+ # watch update file
+ $self->{inotify}->{$vid}->{handle}->watch(
+ $updatefile,
+ IN_ALL_EVENTS,
+ sub {
+ my $e = shift;
+ $self->_notify_updatefile($e, $vid);
+ }
+ );
+ }
+ }
+ }
+}
# ------------------
# Callback to reread data if /video/.update changed by VDR
# trigged by file notifcation from inotify
-sub _notify_readData {
+sub _notify_updatefile {
# ------------------
my $self = shift || return error('No object defined!');
my $e = shift;
- lg sprintf "notify events for %s:%d received: %x", $e->fullname, $e->cookie, $e->mask;
+ my $vid = shift;
+
+ lg sprintf "On recorder %d notify events for %s:%d received: %x", $vid, $e->fullname, $e->cookie, $e->mask;
if((time - $self->{lastupdate}) > 3 # Only if last update prior 3 seconds (avoid callback chill)
- && $self->readData()) {
+ && $self->_readData()) {
$self->{lastupdate} = time;
@@ -412,7 +429,7 @@ sub _notify_readData {
after => $after,
cb => sub {
if((time - $self->{lastupdate}) >= ($after - 30)) {
- if($self->readData()) {
+ if($self->_readData(undef, undef, undef, $vid)) {
$self->{lastupdate} = time;
}
$_[0]->w->cancel;
@@ -476,6 +493,7 @@ sub parseData {
sub scandirectory {
# ------------------
my $self = shift || return error('No object defined!');
+ my $directory = shift;
my $typ = shift;
#my $enc = find_encoding($self->{charset});
@@ -506,7 +524,7 @@ sub scandirectory {
# convert path to title
my $title = dirname($path);
- $title =~ s/^$self->{videodir}//g;
+ $title =~ s/^$directory//g;
$title =~ s/^\///g;
# $rec->{title} = $enc->decode($self->converttitle($title));
$rec->{title} = $self->converttitle($title);
@@ -528,61 +546,100 @@ sub scandirectory {
follow => 1,
follow_skip => 2,
},
- $self->{videodir}
+ $directory
);
return $files;
}
# ------------------
-sub readData {
+sub _readData {
# ------------------
- my $self = shift || return error('No object defined!');
- my $console = shift;
- my $config = shift;
- my $waiter = shift;
- # Read manual or Once at day, make full scan
- my $forceUpdate = shift;
-
- # Read recording over SVDRP
- my ($lstr,$error) = $self->{svdrp}->command('lstr');
+ my $self = shift || return error('No object defined!');
+ my $console = shift;
+ my $waiter = shift;
+ my $forceUpdate = shift; # Read manual or Once at day, make full scan
+ my $onlyvid = shift;
+
+ my $outdatedRecordings;
+ if($onlyvid) {
+ my $sth = $self->{dbh}->prepare('SELECT RecordMD5,CONCAT_WS("~",e.title,e.subtitle,UNIX_TIMESTAMP(e.starttime)) as hash FROM RECORDS as r,OLDEPG as e where r.eventid = e.eventid and vid = ?');
+ if(!$sth->execute($onlyvid)) {
+ con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
+ }
+ $outdatedRecordings = $sth->fetchall_hashref('hash');
+ } else {
+ my $sth = $self->{dbh}->prepare('SELECT RecordMD5,CONCAT_WS("~",e.title,e.subtitle,UNIX_TIMESTAMP(e.starttime)) as hash FROM RECORDS as r,OLDEPG as e where r.eventid = e.eventid');
+ if(!$sth->execute()) {
+ con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
+ }
+ $outdatedRecordings = $sth->fetchall_hashref('hash');
+ }
+
+ if($forceUpdate) {
+ $self->{dbh}->do('DELETE FROM RECORDS');
+ $self->{keywords}->removesource('recording');
+ }
+ my $err = [];
+ my $insertedData = 0;
+ my $updatedState = 0;
+ my $removedData = 0;
+ my @todel;
+
+ my $hostlist;
+ $hostlist = [ $onlyvid ] if($onlyvid);
+ $hostlist = $self->{svdrp}->list_unique_recording_hosts() unless($hostlist);
+ # Read recording over SVDRP
+ foreach my $vid (@$hostlist) {
+ my ($lstr,$error) = $self->{svdrp}->command('lstr',$vid);
+ my $hostname = $self->{svdrp}->hostname($vid);
my $vdata = [ grep(/^250/, @$lstr) ];
-
- unless(scalar @$vdata) {
- # Delete old Records
- $self->{dbh}->do('DELETE FROM RECORDS');
- $self->{keywords}->removesource('recording');
-
- my $msg = [gettext('No recordings available!'), $error ];
- $console->err($msg) if($console);
- return;
+ if($error) {
+ if($console) {
+ my $msg = [
+ sprintf(gettext("Can't read recordings from %s !"),$hostname),
+ $error
+ ];
+ $console->err($msg);
+ }
+ next;
}
# Get state from used harddrive (/video)
- my ($disk,$error2) = $self->{svdrp}->command('stat disk');
- my ($total, $totalUnit, $free, $freeUnit, $percent);
- my $totalDuration = 0;
- my $totalSpace = 0;
-
+ my ($disk,$error2) = $self->{svdrp}->command('stat disk',$vid);
if(!$error2 and $disk->[1] and $disk->[1] =~ /^250/s) {
#250 473807MB 98028MB 79%
- ($total, $totalUnit, $free, $freeUnit, $percent)
+ my ($total, $totalUnit, $free, $freeUnit, $percent)
= $disk->[1] =~ /^250[\-|\s](\d+)(\S+)\s+(\d+)(\S+)\s+(\S+)/s;
+ error sprintf("Unsupported unit '%s' to calc free capacity",$freeUnit) unless($freeUnit eq 'MB');
- $self->{CapacityMessage} = sprintf(gettext("Used %s, total %s%s, free %s%s"),$percent, dot1000($total), $totalUnit, dot1000($free), $freeUnit);
- $self->{CapacityPercent} = int($percent);
-
+ $self->{Capacity}->{$vid}->{Message} = sprintf(gettext("Used %s, total %s%s, free %s%s on '%s'"),$percent, dot1000($total), $totalUnit, dot1000($free), $freeUnit, $hostname);
+ $self->{Capacity}->{$vid}->{Free} = $free;
+ $self->{Capacity}->{$vid}->{Duration} = 0;
+ $self->{Capacity}->{$vid}->{FileSize} = 0;
} else {
- error("Couldn't get disc state : ".join("\n", @$disk));
- $self->{CapacityMessage} = gettext("Unknown disc capacity!");
- $self->{CapacityPercent} = 0;
+ error(sprintf("Couldn't get disc state from %s\n%s", $hostname, join("\n", @$disk)));
+ $self->{Capacity}->{$vid}->{Message} = sprintf(gettext("Unknown disc capacity on '%s'!"),$hostname);
+ $self->{Capacity}->{$vid}->{Free} = 0;
+ $self->{Capacity}->{$vid}->{Duration} = 0;
+ $self->{Capacity}->{$vid}->{FileSize} = 0;
+ }
+ # There none recordings present
+ unless(scalar @$vdata) {
+ unless($forceUpdate) {
+ # then delete old recordings
+ my $sth = $self->{dbh}->prepare('DELETE FROM RECORDS as r,OLDEPG as e where e.vid = ? and r.eventid = e.eventid');
+ if(!$sth->execute($vid)) {
+ con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
+ next;
+ }
+ }
+ next;
}
- my @merkMD5;
- my $insertedData = 0;
- my $updatedState = 0;
+
+
my $l = 0;
- my $err = [];
my $vdrData = $self->parseData($vdata);
@@ -591,10 +648,7 @@ sub readData {
if(ref $console && ref $waiter);
my $db_data;
- if($forceUpdate) {
- $self->{dbh}->do('DELETE FROM RECORDS');
- $self->{keywords}->removesource('recording');
- } else {
+ unless($forceUpdate) {
# read database for compare with vdr data
my $sql = qq|SELECT SQL_CACHE r.eventid as eventid, r.RecordId as id,
UNIX_TIMESTAMP(e.starttime) as starttime,
@@ -608,11 +662,17 @@ sub readData {
r.Marks as marks,
r.RecordMD5
from RECORDS as r,OLDEPG as e
- where r.eventid = e.eventid |;
- $db_data = $self->{dbh}->selectall_hashref($sql, 'hash');
-
+ where e.vid = ? and r.eventid = e.eventid |;
+ my $sth = $self->{dbh}->prepare($sql);
+ if(!$sth->execute($vid)) {
+ error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ $console->err(sprintf(gettext("Couldn't query recordings from database!")))
+ if($console);
+ next;
+ }
+ $db_data = $sth->fetchall_hashref('hash');
lg sprintf( 'Compare recording database with data from %s : %d / %d',
- $self->{svdrp}->hostname(),
+ $hostname,
scalar keys %$db_data,scalar keys %$vdrData );
}
@@ -667,11 +727,12 @@ sub readData {
$updatedState++;
}
}
-
- $totalDuration += $db_data->{$h}->{duration};
- $totalSpace += $db_data->{$h}->{FileSize};
- push(@merkMD5,$db_data->{$h}->{RecordMD5});
+
+ $self->{Capacity}->{$vid}->{Duration} += $db_data->{$h}->{duration};
+ $self->{Capacity}->{$vid}->{FileSize} += $db_data->{$h}->{FileSize};
+
+ delete $outdatedRecordings->{$h};
# delete updated rows from hash
delete $db_data->{$h};
@@ -683,19 +744,25 @@ sub readData {
# Read VideoDir only at first call
unless($files) {
- $files = $self->scandirectory('rec');
+ my $videodirectory = $self->{svdrp}->videodirectory($vid);
+ unless($videodirectory && -d $videodirectory) {
+ $console->err(sprintf(gettext("Missing video directory on %s!"),$hostname))
+ if($console);
+ last;
+ }
+ $files = $self->scandirectory( $videodirectory, 'rec');
}
unless($files && keys %{$files}) {
last;
}
- my $info = $self->analyze($files,$event);
+ my $info = $self->analyze($vid,$files,$event);
if(ref $info eq 'HASH') {
- $totalDuration += $info->{Duration};
- $totalSpace += $info->{FileSize};
+ $self->{Capacity}->{$vid}->{Duration} += $info->{Duration};
+ $self->{Capacity}->{$vid}->{FileSize} += $info->{FileSize};
if($self->insert($info)) {
- push(@merkMD5,$info->{RecordMD5});
+ delete $outdatedRecordings->{$h};
$insertedData++;
$self->{keywords}->insert('recording',$info->{RecordMD5},$info->{keywords});
@@ -711,37 +778,63 @@ sub readData {
if($forceUpdate) {
foreach my $md5 (keys %{$files}) {
- push(@{$err},sprintf(gettext("Recording '%s' without id or unique title and date from VDR!"),$files->{$md5}->{title}));
+ push(@{$err},sprintf(gettext("Recording '%s' without id or unique title and date from '%s'!"),$files->{$md5}->{title},$hostname));
}
}
if($db_data && scalar keys %$db_data > 0) {
- my @todel;
foreach my $t (keys %{$db_data}) {
+ delete $outdatedRecordings->{$t};
push(@todel,$db_data->{$t}->{RecordMD5});
}
- my $sql = sprintf('DELETE FROM RECORDS WHERE RecordMD5 IN (%s)', join(',' => ('?') x @todel));
- my $sth = $self->{dbh}->prepare($sql);
- $sth->execute(@todel)
- or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
-
- $self->{keywords}->remove('recording',\@todel);
}
- my $removedData = $db_data ? scalar keys %$db_data : 0;
+ $removedData += $db_data ? scalar keys %$db_data : 0;
+ }
+
debug sprintf 'Finish .. %d recordings inserted, %d recordings updated, %d recordings removed',
$insertedData, $updatedState, $removedData;
- error sprintf("Unsupported unit '%s' to calc free capacity",$freeUnit) unless($freeUnit eq 'MB');
+ map { push(@todel,$outdatedRecordings->{$_}->{RecordMD5}); } keys %{$outdatedRecordings};
+ if(!$forceUpdate && scalar @todel) {
+ my $sql = sprintf('DELETE FROM RECORDS WHERE RecordMD5 IN (%s)', join(',' => ('?') x @todel));
+ my $sth = $self->{dbh}->prepare($sql);
+ $sth->execute(@todel)
+ or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
+
+ $self->{keywords}->remove('recording',\@todel);
+ }
+
# use store capacity and recordings length to calc free capacity
+ my $totalDuration = 0;
+ my $totalSpace = 0;
+ my $totalFree = 0;
+ my $Message;
+
+ foreach my $vid (keys %{$self->{Capacity}}) {
+ push(@$Message,$self->{Capacity}->{$vid}->{Message});
+ $totalDuration += $self->{Capacity}->{$vid}->{Duration};
+ $totalSpace += $self->{Capacity}->{$vid}->{FileSize};
+ $totalFree += $self->{Capacity}->{$vid}->{Free};
+ }
+
+ $self->{CapacityMessage} = join("\n",@$Message);
$self->{CapacityTotal} = $totalDuration;
if($totalSpace > 1) {
- $self->{CapacityFree} = int(($free * $totalDuration) / $totalSpace);
+ $self->{CapacityFree} = int(($totalFree * $totalDuration) / $totalSpace);
} else {
- $self->{CapacityFree} = int($free * 3600 / 2000); # use 2GB at one hour as base
+ $self->{CapacityFree} = int($totalFree * 3600 / 2000); # use 2GB at one hour as base
+ }
+ $self->{CapacityPercent} = ($totalSpace * 100 / ($totalFree + $totalSpace));
+
+
+
+ # alte PreviewDirs loeschen
+ foreach my $md5 (@todel) {
+ my $dir = sprintf('%s/%s_shot', $self->{previewimages} , $md5);
+ lg sprintf("Remove old preview files : '%s'",$dir);
+ deleteDir($dir);
}
- $self->{CapacityPercent} = ($totalSpace * 100 / ($free + $totalSpace))
- unless($self->{CapacityPercent});
# Previews im fork erzeugen
if(scalar @{$self->{JOBS}}) {
@@ -774,15 +867,6 @@ sub readData {
}
}
- # alte PreviewDirs loeschen
- foreach my $dir (glob(sprintf('%s/*_shot', $self->{previewimages}))) {
- my $basedir = basename($dir);
- unless(grep(sprintf('%s_shot',$_) eq $basedir, @merkMD5)) {
- lg sprintf("Remove old preview files : '%s'",$dir);
- deleteDir($dir);
- }
- }
-
# Delete all old EPG entrys
if($forceUpdate || $removedData) {
my $sqldeleteEvents = qq|
@@ -803,9 +887,9 @@ DELETE FROM OLDEPG
$console->start() if(ref $waiter && ref $console);
if(scalar @{$err} == 0) {
- $console->message(sprintf(gettext("Write %d recordings to the database."), scalar @merkMD5)) if(ref $console);
+ $console->message(sprintf(gettext("Write %d recordings to the database."), ($insertedData + $updatedState))) if(ref $console);
} else {
- unshift(@{$err}, sprintf(gettext("Write %d recordings to the database. Couldn't assign %d recordings."), scalar @merkMD5 , scalar @{$err}));
+ unshift(@{$err}, sprintf(gettext("Write %d recordings to the database. Couldn't assign %d recordings."), ($insertedData + $updatedState) , scalar @{$err}));
con_err($console,$err);
}
return (scalar @{$err} == 0);
@@ -847,7 +931,7 @@ sub refresh {
con_msg($console,gettext("Get information on recordings ..."));
}
- if($self->readData($console,$config, $waiter,'force')) {
+ if($self->_readData($console,$waiter,'force')) {
$console->redirect({url => '?cmd=rlist', wait => 1})
if(ref $console and $console->typ eq 'HTML');
@@ -866,8 +950,8 @@ sub insert {
my $sth = $self->{dbh}->prepare(
qq|
REPLACE INTO RECORDS
- (eventid, RecordId, RecordMD5, Path, Prio, Lifetime, State, FileSize, Marks, Type, preview, aux, addtime )
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,NOW())
+ (eventid, RecordId, RecordMD5, Path, priority, lifetime, State, FileSize, cutlength, Marks, Type, preview, aux, addtime )
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())
|);
$attr->{Marks} = ""
@@ -878,10 +962,11 @@ sub insert {
$attr->{RecordId},
$attr->{RecordMD5},
$attr->{Path},
- $attr->{Prio},
- $attr->{Lifetime},
+ $attr->{priority},
+ $attr->{lifetime},
$attr->{State},
$attr->{FileSize},
+ $attr->{cutlength},
$attr->{Marks},
$attr->{Type},
$attr->{preview},
@@ -939,6 +1024,7 @@ sub _updateFileSize {
sub analyze {
# ------------------
my $self = shift || return error('No object defined!');
+ my $vid = shift; # ID of Video disk recorder
my $files = shift; # Hash with md5 and path to recording
my $recattr = shift;
@@ -950,7 +1036,7 @@ sub analyze {
return 0;
}
- my $event = $self->SearchEpgId( $recattr->{starttime}, $info->{duration}, $recattr->{title}, $info->{channel} );
+ my $event = $self->SearchEpgId( $vid, $recattr->{starttime}, $info->{duration}, $recattr->{title}, $info->{channel} );
if($event) {
my $id = $event->{eventid};
$event->{addtime} = time;
@@ -972,7 +1058,7 @@ sub analyze {
$title = join('~',@t);
}
- $event = $self->createOldEventId($recattr->{id}, $recattr->{starttime}, $info->{duration}, $title, $subtitle, $info);
+ $event = $self->createOldEventId($vid, $recattr->{id}, $recattr->{starttime}, $info->{duration}, $title, $subtitle, $info);
unless($event) {
error sprintf("Couldn't create event!: '%s' !",$recattr->{id});
return 0;
@@ -990,12 +1076,13 @@ sub analyze {
Duration => $info->{duration},
Start => $recattr->{starttime},
Path => $info->{path},
- Prio => $info->{Prio},
- Lifetime => $info->{Lifetime},
+ priority => $info->{priority},
+ lifetime => $info->{lifetime},
eventid => $event->{eventid},
Type => $info->{type} || 'UNKNOWN',
State => $recattr->{state},
FileSize => $info->{FileSize},
+ cutlength => $info->{cutlength},
aux => $info->{aux},
keywords => $info->{keywords}
};
@@ -1034,14 +1121,15 @@ sub videoInfo {
$info->{RecordMD5} = $md5;
$info->{path} = $rec->{path};
- $info->{Prio} = $rec->{priority};
- $info->{Lifetime} = $rec->{lifetime};
+ $info->{priority} = $rec->{priority};
+ $info->{lifetime} = $rec->{lifetime};
$info->{duration} = $self->_recordinglength($rec->{path});
$info->{FileSize} = $self->_recordingCapacity($rec->{files},
($info->{duration} * 8 * $self->{framerate}));
- my $marks = $self->readmarks($rec->{path});
+ my $marks = $self->_readmarks($rec->{path});
map { $info->{$_} = $marks->{$_}; } keys %{$marks};
+ $info->{cutlength} = $self->_calcmarks($info->{marks} , $info->{duration});
delete $files->{$md5}; # remove from hash, avoid double lookup
return $info;
@@ -1054,7 +1142,7 @@ sub videoInfo {
#-------------------------------------------------------------------------------
# get cut marks from marks.vdr
-sub readmarks {
+sub _readmarks {
my $self = shift || return error('No object defined!');
my $path = shift || return error ('No recording path defined!');
@@ -1076,6 +1164,35 @@ sub readmarks {
return $status;
}
+
+sub _calcmarks {
+ my $self = shift;
+ my $marks = shift;
+ my $duration = shift;
+
+ unless ($marks) {
+ return $duration;
+ }
+
+ my $frames = 0;
+ for (my $i = 0; $i < (scalar(@$marks)); $i += 2) {
+ my ($h,$m,$s,$f) = split /[:.]/,$marks->[$i];
+ my $startframe = ($h * 3600 + $m * 60 + $s)* ($self->{framerate}) + $f;
+
+ if ($marks->[$i+1]) {
+ my ($h,$m,$s,$f) = split /[:.]/,$marks->[$i + 1];
+ my $endframe = ($h * 3600 + $m * 60 + $s)* ($self->{framerate}) + $f;
+ $frames += $endframe - $startframe;
+ } else {
+ $frames += ($duration * ($self->{framerate})) - $startframe;
+ last;
+ }
+ }
+
+ return $frames / $self->{framerate};
+
+}
+
#-------------------------------------------------------------------------------
# get information about recording from info.vdr
sub readinfo {
@@ -1397,6 +1514,7 @@ sub _mark2frames{
sub SearchEpgId {
# ------------------
my $self = shift || return error('No object defined!');
+ my $vid = shift; # ID of Video disk recorder
my $start = shift || return error('No start time defined!');
my $dur = shift || return 0;
my $title = shift || return error('No title defined!');
@@ -1407,19 +1525,21 @@ sub SearchEpgId {
if($channel && $channel ne "") {
$sth = $self->{dbh}->prepare(
qq|SELECT SQL_CACHE * FROM OLDEPG WHERE
- UNIX_TIMESTAMP(starttime) >= ?
+ vid = ?
+ AND UNIX_TIMESTAMP(starttime) >= ?
AND UNIX_TIMESTAMP(starttime)+duration <= ?
AND CONCAT_WS("~",title,subtitle) = ?
AND channel_id = ?|);
- $sth->execute($start,$bis,$title,$channel)
+ $sth->execute($vid,$start,$bis,$title,$channel)
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
} else {
$sth = $self->{dbh}->prepare(
qq|SELECT SQL_CACHE * FROM OLDEPG WHERE
- UNIX_TIMESTAMP(starttime) >= ?
+ vid = ?
+ AND UNIX_TIMESTAMP(starttime) >= ?
AND UNIX_TIMESTAMP(starttime)+duration <= ?
AND CONCAT_WS("~",title,subtitle) = ?|);
- $sth->execute($start,$bis,$title)
+ $sth->execute($vid,$start,$bis,$title)
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
}
return 0 if(!$sth);
@@ -1432,6 +1552,7 @@ qq|SELECT SQL_CACHE * FROM OLDEPG WHERE
sub createOldEventId {
# ------------------
my $self = shift || return error('No object defined!');
+ my $vid = shift; # ID of Video disk recorder
my $id = shift || return error('No eventid defined!');
my $start = shift || return error('No start time defined!');
my $duration = shift || 0;
@@ -1457,11 +1578,12 @@ sub createOldEventId {
lg sprintf('Create event "%s" into OLDEPG', $subtitle ? $title .'~'. $subtitle : $title);
my $sth = $self->{dbh}->prepare(
-q|REPLACE INTO OLDEPG(eventid, title, subtitle, description, channel_id,
+q|REPLACE INTO OLDEPG(vid, eventid, title, subtitle, description, channel_id,
duration, tableid, starttime, vpstime, video, audio, addtime)
- VALUES (?,?,?,?,?,?,?,FROM_UNIXTIME(?),FROM_UNIXTIME(?),?,?,NOW())|);
+ VALUES (?,?,?,?,?,?,?,?,FROM_UNIXTIME(?),FROM_UNIXTIME(?),?,?,NOW())|);
$sth->execute(
+ $vid,
$attr->{eventid},
$attr->{title},
$attr->{subtitle},
@@ -1497,8 +1619,8 @@ SELECT SQL_CACHE
r.eventid,
e.Duration,
r.Marks,
- r.Prio,
- r.Lifetime,
+ r.priority,
+ r.lifetime,
UNIX_TIMESTAMP(e.starttime) as StartTime,
UNIX_TIMESTAMP(e.starttime) + e.duration as StopTime,
e.title as Title,
@@ -1510,7 +1632,8 @@ SELECT SQL_CACHE
FROM CHANNELS as c
WHERE e.channel_id = c.Id
LIMIT 1) as Channel,
- preview
+ preview,
+ cutlength
from
RECORDS as r,OLDEPG as e
where
@@ -1557,8 +1680,9 @@ sub play {
my $recordid = shift || return con_err($console,gettext("No recording defined for playback! Please use rplay 'rid'."));
my $params = shift;
- my $sql = qq|SELECT SQL_CACHE r.RecordID,r.RecordMD5,e.duration as duration FROM
- RECORDS as r, OLDEPG as e WHERE e.eventid = r.eventid and r.RecordMD5 = ?|;
+ my $sql = qq|SELECT SQL_CACHE vid, RecordID, RecordMD5, duration
+ FROM RECORDS as r, OLDEPG as e
+ WHERE e.eventid = r.eventid and RecordMD5 = ?|;
my $sth = $self->{dbh}->prepare($sql);
my $rec;
if(!$sth->execute($recordid)
@@ -1580,9 +1704,13 @@ sub play {
$start = 'begin';
}
+ my $vdr = $rec->{vid};
+ if($params && exists $params->{vdr}) {
+ $vdr = $params->{vdr};
+ }
my $cmd = sprintf('PLAY %d %s', $rec->{RecordID}, $start);
- if($self->{svdrp}->scommand($console, $config, $cmd)) {
+ if($self->{svdrp}->scommand($console, $config, $cmd, $vdr)) {
$console->redirect({url => sprintf('?cmd=rdisplay&data=%s',$rec->{RecordMD5}), wait => 1})
if(ref $console and $console->typ eq 'HTML');
@@ -1599,8 +1727,11 @@ sub cut {
my $console = shift || return error('No console defined!');
my $config = shift || return error('No config defined!');
my $recordid = shift || return con_err($console,gettext("No recording defined for playback! Please use rplay 'rid'."));
+ my $params = shift;
- my $sql = qq|SELECT SQL_CACHE RecordID,RecordMD5 FROM RECORDS WHERE RecordMD5 = ?|;
+ my $sql = qq|SELECT SQL_CACHE vid, RecordID, RecordMD5
+ FROM RECORDS as r, OLDEPG as e
+ WHERE e.eventid = r.eventid and r.RecordMD5 = ?|;
my $sth = $self->{dbh}->prepare($sql);
my $rec;
if(!$sth->execute($recordid)
@@ -1608,8 +1739,13 @@ sub cut {
return con_err($console,sprintf(gettext("Recording '%s' does not exist in the database!"),$recordid));
}
+ my $vdr = $rec->{vid};
+ if($params && exists $params->{vdr}) {
+ $vdr = $params->{vdr};
+ }
+
my $cmd = sprintf('EDIT %d', $rec->{RecordID});
- if($self->{svdrp}->scommand($console, $cmd)) {
+ if($self->{svdrp}->scommand($console, $cmd, $vdr)) {
$console->redirect({url => sprintf('?cmd=rdisplay&data=%s',$rec->{RecordMD5}), wait => 1})
if(ref $console and $console->typ eq 'HTML');
@@ -1629,14 +1765,11 @@ sub list {
my $params = shift;
my $deep = 1;
- my $folder = scalar (my @a = split('/',$self->{videodir})) + 1;
my $term;
- my $where = "e.eventid = r.eventid";
+ my $where = "";
if($text) {
- $deep = scalar (my @c = split('~',$text));
- $folder += $deep;
- $deep += 1;
+ $deep += scalar (my @c = split('~',$text));
$text =~ s/\'/\\\'/sg;
$text =~ s/%/\\%/sg;
@@ -1673,15 +1806,17 @@ SELECT SQL_CACHE
SUBSTRING_INDEX(CONCAT_WS('~',e.title,e.subtitle), '~', $deep) as __fulltitle,
IF(COUNT(*)>1,0,1) as __IsRecording,
e.description as __description,
- preview as __preview
+ preview as __preview,
+ cutlength as __cutlength
FROM
RECORDS as r,
OLDEPG as e
WHERE
+ e.eventid = r.eventid
$where
GROUP BY
- SUBSTRING_INDEX(r.Path, '/', IF(Length(e.subtitle)<=0, $folder + 1, $folder))
-ORDER BY __IsRecording asc,
+ SUBSTRING_INDEX(CONCAT_WS('~',e.title,e.subtitle,RecordMD5), '~', $deep)
+ORDER BY __IsRecording asc,
|;
@@ -1810,7 +1945,8 @@ SELECT SQL_CACHE
CONCAT_WS('~',e.title,e.subtitle) as __fulltitle,
1 as __IsRecording,
e.description as __description,
- preview as __preview
+ preview as __preview,
+ cutlength as __cutlength
FROM
RECORDS as r,
OLDEPG as e
@@ -1925,7 +2061,11 @@ sub delete {
}
my @recordings = keys %rec;
- my $sql = sprintf("SELECT SQL_CACHE r.RecordId,CONCAT_WS('~',e.title,e.subtitle),r.RecordMD5 FROM RECORDS as r,OLDEPG as e WHERE e.eventid = r.eventid and r.RecordMD5 IN (%s) ORDER BY r.RecordId desc", join(',' => ('?') x @recordings));
+ my $sql = sprintf(
+qq|SELECT SQL_CACHE e.vid, r.RecordId,CONCAT_WS('~',e.title,e.subtitle),r.RecordMD5
+ FROM RECORDS as r,OLDEPG as e
+ WHERE e.eventid = r.eventid and r.RecordMD5 IN (%s)
+ ORDER BY e.vid, r.RecordId 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));
@@ -1934,9 +2074,10 @@ sub delete {
foreach my $recording (@$data) {
# Make hash for better reading
my $r = {
- Id => $recording->[0],
- Title => $recording->[1],
- MD5 => $recording->[2]
+ vid => $recording->[0],
+ Id => $recording->[1],
+ Title => $recording->[2],
+ MD5 => $recording->[3]
};
if(ref $console and $console->{TYP} eq 'CONSOLE') {
@@ -1956,14 +2097,14 @@ sub delete {
);
- $self->{svdrp}->queue_add(sprintf("delr %s",$r->{Id}));
+ $self->{svdrp}->queue_add(sprintf("delr %s",$r->{Id}), $r->{vid});
push(@{$todelete},$r->{Title}); # Remember title
push(@{$md5delete},$r->{MD5}); # Remember hash
# Delete recordings from request, if found in database
my $i = 0;
for my $x (@recordings) {
- if ( $x eq $recording->[2] ) { # Remove known MD5 from user request
+ if ( $x eq $r->{MD5} ) { # Remove known MD5 from user request
splice @recordings, $i, 1;
} else {
$i++;
@@ -2001,7 +2142,7 @@ sub delete {
$self->{keywords}->remove('recording',$md5delete);
}
- $self->readData($console,$waiter)
+ $self->_readData($console,$waiter)
unless($self->{inotify});
if(ref $console && $console->typ eq 'HTML') {
@@ -2046,12 +2187,13 @@ sub redit {
my $rec;
if($recordid) {
my $sql = qq|
-SELECT SQL_CACHE
+SELECT SQL_CACHE
+ e.vid,
CONCAT_WS('~',e.title,e.subtitle) as title,
e.eventid as EventId,
r.Path,
- r.Prio,
- r.Lifetime
+ r.priority,
+ r.lifetime
FROM
RECORDS as r,
OLDEPG as e
@@ -2086,7 +2228,7 @@ WHERE
'lifetime' => {
typ => 'integer',
msg => sprintf(gettext('Lifetime (%d ... %d)'),0,99),
- def => int($rec->{Lifetime}),
+ def => int($rec->{lifetime}),
check => sub{
my $value = shift || 0;
if($value >= 0 and $value < 100) {
@@ -2100,7 +2242,7 @@ WHERE
'priority' => {
typ => 'integer',
msg => sprintf(gettext('Priority (%d ... %d)'),0,99),
- def => int($rec->{Prio}),
+ def => int($rec->{priority}),
check => sub{
my $value = shift || 0;
if($value >= 0 and $value < 100) {
@@ -2167,6 +2309,13 @@ WHERE
my $dropEPGEntry = 0;
my $ChangeRecordingData = 0;
+ my $videodirectory = $self->{svdrp}->videodirectory($rec->{vid});
+ unless($videodirectory && -d $videodirectory) {
+ my $hostname = $self->{svdrp}->hostname($rec->{vid});
+ $console->err(sprintf(gettext("Missing video directory on %s!"),$hostname))
+ if($console);
+ return;
+ }
$data->{title} =~s#~+#~#g;
$data->{title} =~s#^~##g;
@@ -2206,16 +2355,16 @@ WHERE
}
- if($data->{lifetime} ne $rec->{Lifetime}
- or $data->{priority} ne $rec->{Prio}) {
+ if($data->{lifetime} ne $rec->{lifetime}
+ or $data->{priority} ne $rec->{priority}) {
my @options = split('\.', $rec->{Path});
$options[-2] = sprintf("%02d",$data->{lifetime})
- if($data->{lifetime} ne $rec->{Lifetime});
+ if($data->{lifetime} ne $rec->{lifetime});
$options[-3] = sprintf("%02d",$data->{priority})
- if($data->{priority} ne $rec->{Prio});
+ if($data->{priority} ne $rec->{priority});
my $newPath = join('.', @options);
@@ -2229,7 +2378,7 @@ WHERE
if($data->{title} ne $rec->{title}) {
# Rename auf der Platte
- my $newPath = sprintf('%s/%s/%s', $self->{videodir}, $self->translate($data->{title}),basename($rec->{Path}));
+ my $newPath = sprintf('%s/%s/%s', $videodirectory, $self->translate($data->{title}),basename($rec->{Path}));
my $parentnew = dirname($newPath);
unless( -d $parentnew) {
@@ -2241,7 +2390,7 @@ WHERE
or return con_err($console,sprintf(gettext("Recording: '%s', couldn't move to '%s' : %s"),$rec->{title},$data->{title},$!));
my $parentold = dirname($rec->{Path});
- if($self->{videodir} ne $parentold
+ if($videodirectory ne $parentold
and -d $parentold
and is_empty_dir($parentold)) {
rmdir($parentold)
@@ -2270,7 +2419,7 @@ WHERE
}
if($dropEPGEntry || $ChangeRecordingData) {
$self->{lastupdate} = 0;
- touch($self->{videodir}."/.update");
+ touch($videodirectory."/.update");
}
if($dropEPGEntry || $ChangeRecordingData) {
my $waiter;
@@ -2282,7 +2431,7 @@ WHERE
}
sleep(1);
- $self->readData($console,$waiter)
+ $self->_readData($console,$waiter)
unless($self->{inotify});
} else {
@@ -2449,10 +2598,7 @@ sub getGroupIds {
}
my $text = $data->{title};
- my $folder = scalar (my @a = split('/',$self->{videodir})) + 1;
- my $deep = scalar (my @c = split('~',$text));
- $folder += $deep;
- $deep += 1;
+ my $deep = ( scalar (my @c = split('~',$text)) ) + 1;
$text =~ s/\'/\\\'/sg;
$text =~ s/%/\\%/sg;
@@ -2471,7 +2617,7 @@ AND (
SUBSTRING_INDEX(CONCAT_WS('~',e.title,e.subtitle), '~', $deep) LIKE ?
)
GROUP BY
- SUBSTRING_INDEX(r.Path, '/', IF(Length(e.subtitle)<=0, $folder + 1, $folder))
+ SUBSTRING_INDEX(CONCAT_WS('~',e.title,e.subtitle,RecordMD5), '~', $deep)
|;
my $sth = $self->{dbh}->prepare($sql);
@@ -2652,7 +2798,24 @@ sub recover {
my $recordid = shift || 0;
my $data = shift || 0;
- my $files = $self->scandirectory('del');
+ my $files;
+ my $directories;
+
+ my $hostlist = $self->{svdrp}->list_unique_recording_hosts();
+ foreach my $vid (@$hostlist) {
+ my $videodirectory = $self->{svdrp}->videodirectory($vid);
+ unless($videodirectory && -d $videodirectory) {
+ my $hostname = $self->{svdrp}->hostname($vid);
+ $console->err(sprintf(gettext("Missing video directory on %s!"),$hostname))
+ if($console);
+ next;
+ }
+ my $f = $self->scandirectory($videodirectory, 'del');
+ if($f) {
+ map { $files->{$_} = $f->{$_}; } keys %{$f};
+ push(@$directories, $videodirectory);
+ }
+ }
return con_msg($console,gettext("There none recoverable recordings!"))
unless($files and keys %{$files});
@@ -2709,7 +2872,9 @@ sub recover {
my $waiter;
$self->{lastupdate} = 0;
- touch($self->{videodir}."/.update");
+ foreach my $d (@$directories) {
+ touch($d."/.update");
+ }
if(ref $console && $console->typ eq 'HTML' && !($self->{inotify})) {
$waiter = $console->wait(gettext('Recording recovered!'),0,1000,'no');
@@ -2718,7 +2883,7 @@ sub recover {
}
sleep(1);
- $self->readData($console,$waiter)
+ $self->_readData($console,$waiter)
unless($self->{inotify});
} else {
diff --git a/lib/XXV/MODULES/REMOTE.pm b/lib/XXV/MODULES/REMOTE.pm
index caf09f9..42ca655 100644
--- a/lib/XXV/MODULES/REMOTE.pm
+++ b/lib/XXV/MODULES/REMOTE.pm
@@ -28,7 +28,7 @@ sub module {
required => gettext('This is required!'),
},
monitor => {
- description => gettext('Grab video framebuffer, as preview on remotecontrol.'),
+ description => gettext('Show grabbed video framebuffer in addition to remote control.'),
default => 'y',
type => 'confirm',
required => gettext('This is required!'),
diff --git a/lib/XXV/MODULES/STREAM.pm b/lib/XXV/MODULES/STREAM.pm
index d6e3407..4d58234 100644
--- a/lib/XXV/MODULES/STREAM.pm
+++ b/lib/XXV/MODULES/STREAM.pm
@@ -180,6 +180,13 @@ sub init {
# ------------------
my $self = shift || return error('No object defined!');
+ main::after(sub{
+ $self->{svdrp} = main::getModule('SVDRP');
+ unless($self->{svdrp}) {
+ return 0;
+ }
+ }, "STREAM: Prepare streaming ...");
+
1;
}
@@ -277,7 +284,7 @@ sub playrecord {
unless($console->can('stream'));
my $rmod = main::getModule('RECORDS');
- my $result = $rmod->IdToData($recid)
+ my $rec = $rmod->IdToData($recid)
or return $console->err(sprintf(gettext("Couldn't find recording: '%s'"), $recid));
my $start = 0;
@@ -291,20 +298,20 @@ sub playrecord {
$data .= sprintf("&__start=%d", $start) if($start);
my $param = {
- title => $result->{title},
+ title => $rec->{title},
widget => $self->{widget},
width => $self->{width},
height => $self->{height},
};
- $param->{title} .= '~' . $result->{subtitle} if($result->{subtitle});
+ $param->{title} .= '~' . $rec->{subtitle} if($rec->{subtitle});
return $console->player($data, $param);
}
return $console->err(sprintf(gettext("Couldn't find recording: '%s'"), $recid))
- unless $result->{Path};
+ unless $rec->{Path};
- my $path = $result->{Path};
+ my $path = $rec->{Path};
my @files = bsd_glob("$path/[0-9][0-9][0-9].vdr");
return $console->err(sprintf(gettext("Couldn't find recording: '%s'"), $recid))
@@ -325,7 +332,13 @@ sub playrecord {
return $console->stream(\@files, $self->{mimetyp}, $offset);
} else {
- my $videopath = $rmod->{videodir};
+ my $videodirectory = $self->{svdrp}->videodirectory($rec->{vid});
+ unless($videodirectory && -d $videodirectory) {
+ my $hostname = $self->{svdrp}->hostname($rec->{vid});
+ $console->err(sprintf(gettext("Missing video directory on %s!"),$hostname))
+ if($console);
+ return;
+ }
my $data;
$data = "#EXTM3U\r\n";
@@ -333,7 +346,7 @@ sub playrecord {
foreach my $file (@files) {
my $fstat = stat($file);
- $file =~ s/^$videopath//si;
+ $file =~ s/^$videodirectory//si;
$file =~ s/^[\/|\\]//si;
my $URL = sprintf("%s/%s\r\n", $self->{netvideo}, $file);
$URL =~s/\//\\/g
@@ -343,10 +356,10 @@ sub playrecord {
if($fstat) {
# estimate duration of file in seconds ( filesize * totaltime / totalsize )
- my $duration = CORE::int($fstat->size * $result->{duration} / ($result->{FileSize} * 1024 * 1024));
+ my $duration = CORE::int($fstat->size * $rec->{duration} / ($rec->{FileSize} * 1024 * 1024));
# add duration and title as extended infomations
- $data .= "#EXTINF:". $duration ."," . $result->{title};
- $data .= "~" . $result->{subtitle} if($result->{subtitle});
+ $data .= "#EXTINF:". $duration ."," . $rec->{title};
+ $data .= "~" . $rec->{subtitle} if($rec->{subtitle});
$data .= "\r\n";
}
$data .= $URL;
diff --git a/lib/XXV/MODULES/SVDRP.pm b/lib/XXV/MODULES/SVDRP.pm
index 716b834..f435597 100644
--- a/lib/XXV/MODULES/SVDRP.pm
+++ b/lib/XXV/MODULES/SVDRP.pm
@@ -141,6 +141,7 @@ sub _init {
host varchar(100) NOT NULL default 'localhost',
port smallint unsigned default 2001,
cards varchar(100) default '',
+ videodirectory text default '',
PRIMARY KEY (id)
) COMMENT = '$version'
|);
@@ -153,7 +154,8 @@ sub _init {
master => 'y',
host => 'localhost',
port => 2001,
- cards => ''
+ cards => '',
+ videodirectory => '/var/lib/video'
});
}
@@ -166,14 +168,15 @@ sub _insert {
my $self = shift || return error('No object defined!');
my $data = shift || return;
- my $sth = $self->{dbh}->prepare('REPLACE INTO RECORDER VALUES (?,?,?,?,?,?)');
+ my $sth = $self->{dbh}->prepare('REPLACE INTO RECORDER VALUES (?,?,?,?,?,?,?)');
$sth->execute(
$data->{id} || 0,
$data->{active},
$data->{master},
$data->{host},
$data->{port},
- $data->{cards}
+ $data->{cards},
+ $data->{videodirectory}
) or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
}
@@ -241,6 +244,12 @@ sub edit {
msg => gettext("List of present source of DVB cards. (eg. S19.2E,S19.2E,T,T )"),
def => $default->{cards} || main::getModule('CHANNELS')->buildSourceList($id || $self->primary_hosts()),
},
+ 'videodirectory' => {
+ msg => gettext("Directory where recordings are stored"),
+ def => $default->{videodirectory},
+ req => gettext('This is required!'),
+ typ => 'dir',
+ },
];
@@ -321,7 +330,8 @@ sub list {
'active' => gettext('Active'),
'master' => gettext('Primary'),
'host' => gettext('Host'),
- 'cards' => gettext('Typ of Cards')
+ 'cards' => gettext('Typ of Cards'),
+ 'videodirectory' => gettext('Video directory')
);
my $sql = qq|
@@ -330,7 +340,8 @@ SELECT SQL_CACHE
active as \'$f{active}\',
master as \'$f{master}\',
host as \'$f{host}\',
- cards as \'$f{cards}\'
+ cards as \'$f{cards}\',
+ videodirectory as \'$f{videodirectory}\'
from
RECORDER
|;
@@ -460,6 +471,31 @@ sub enum_hosts {
return $sth->fetchall_arrayref();
}
+sub list_unique_recording_hosts() {
+ my $self = shift || return error('No object defined!');
+
+ my $sth = $self->{dbh}->prepare("SELECT SQL_CACHE id from RECORDER where active = 'y' GROUP BY videodirectory");
+ $sth->execute()
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ my $result = $sth->fetchall_hashref('id');
+ return undef unless($result);
+
+ my $hosts;
+ foreach my $id (keys %{$result}) {
+ push(@$hosts,$id);
+ }
+
+ return $hosts;
+}
+
+sub videodirectory {
+ my $self = shift || return error('No object defined!');
+ my $vdrid = shift;
+
+ my $vdr = $self->_gethost($vdrid);
+ return $vdr ? $vdr->{videodirectory} : undef;
+}
+
# ------------------
sub IDfromHostname {
# ------------------
diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm
index 8037820..c034f30 100644
--- a/lib/XXV/MODULES/TIMERS.pm
+++ b/lib/XXV/MODULES/TIMERS.pm
@@ -1008,7 +1008,7 @@ sub toggleTimer {
$sth->execute(@success)
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
my $erg = $sth->fetchall_arrayref();
- $console->table($erg);
+ $console->table($erg,{state => 'success'});
}
return 1;
diff --git a/locale/de.po b/locale/de.po
index b384609..8353e84 100644
--- a/locale/de.po
+++ b/locale/de.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: XXV 1.3\n"
"POT-Creation-Date: 2005-01-12 18:55\n"
-"PO-Revision-Date: 2008-11-24 13:11+0100\n"
+"PO-Revision-Date: 2008-12-06 18:11+0100\n"
"Last-Translator: Andreas Brachold <anbr at users.berlios.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -49,7 +49,7 @@ msgid "Data source for the connection to the database"
msgstr "Name der Datenquelle für die Verbindung zur Datenbank"
#--------------------
-#: ../bin/xxvd:682 ../bin/xxvd:688 ../bin/xxvd:694 ../lib/XXV/MODULES/AUTOTIMER.pm:30 ../lib/XXV/MODULES/AUTOTIMER.pm:682 ../lib/XXV/MODULES/CHANNELS.pm:1103 ../lib/XXV/MODULES/CHANNELS.pm:1129 ../lib/XXV/MODULES/CHANNELS.pm:1142 ../lib/XXV/MODULES/CHANNELS.pm:1181 ../lib/XXV/MODULES/CHANNELS.pm:1207 ../lib/XXV/MODULES/CHANNELS.pm:28 ../lib/XXV/MODULES/CHRONICLE.pm:27 ../lib/XXV/MODULES/EPG.pm:34 ../lib/XXV/MODULES/EPG.pm:40 ../lib/XXV/MODULES/EPG.pm:47 ../lib/XXV/MODULES/EVENTS.pm:33 ../lib/XXV/MODULES/GRAB.pm:30 ../lib/XXV/MODULES/GRAB.pm:44 ../lib/XXV/MODULES/HTTPD.pm:62 ../lib/XXV/MODULES/HTTPD.pm:68 ../lib/XXV/MODULES/HTTPD.pm:74 ../lib/XXV/MODULES/HTTPD.pm:80 ../lib/XXV/MODULES/HTTPD.pm:86 ../lib/XXV/MODULES/HTTPD.pm:94 ../lib/XXV/MODULES/INTERFACE.pm:32 ../lib/XXV/MODULES/INTERFACE.pm:38 ../lib/XXV/MODULES/INTERFACE.pm:44 ../lib/XXV/MODULES/KEYWORDS.pm:28 ../lib/XXV/MODULES/LOGREAD.pm:31 ../lib/XXV/MODULES/LOGREAD.pm:37 ../lib/XXV/MODULES/LOGREAD.pm:43 ../lib/XXV/MODULES/LOGREAD.pm:49 ../lib/XXV/MODULES/MEDIALIB.pm:32 ../lib/XXV/MODULES/MEDIALIB.pm:38 ../lib/XXV/MODULES/MEDIALIB.pm:44 ../lib/XXV/MODULES/MOVETIMER.pm:26 ../lib/XXV/MODULES/MOVETIMER.pm:417 ../lib/XXV/MODULES/MOVETIMER.pm:420 ../lib/XXV/MODULES/MOVETIMER.pm:440 ../lib/XXV/MODULES/MOVETIMER.pm:443 ../lib/XXV/MODULES/MUSIC.pm:39 ../lib/XXV/MODULES/MUSIC.pm:45 ../lib/XXV/MODULES/MUSIC.pm:51 ../lib/XXV/MODULES/MUSIC.pm:57 ../lib/XXV/MODULES/MUSIC.pm:68 ../lib/XXV/MODULES/MUSIC.pm:74 ../lib/XXV/MODULES/RECORDS.pm:103 ../lib/XXV/MODULES/RECORDS.pm:2084 ../lib/XXV/MODULES/RECORDS.pm:2098 ../lib/XXV/MODULES/RECORDS.pm:2112 ../lib/XXV/MODULES/RECORDS.pm:2668 ../lib/XXV/MODULES/RECORDS.pm:2680 ../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:41 ../lib/XXV/MODULES/REPORT.pm:29 ../lib/XXV/MODULES/REPORT.pm:35 ../lib/XXV/MODULES/ROBOT.pm:29 ../lib/XXV/MODULES/SHARE.pm:64 ../lib/XXV/MODULES/SHARE.pm:81 ../lib/XXV/MODULES/SHARE.pm:87 ../lib/XXV/MODULES/STATUS.pm:31 ../lib/XXV/MODULES/STATUS.pm:37 ../lib/XXV/MODULES/STATUS.pm:42 ../lib/XXV/MODULES/STREAM.pm:108 ../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:88 ../lib/XXV/MODULES/STREAM.pm:94 ../lib/XXV/MODULES/SVDRP.pm:218 ../lib/XXV/MODULES/SVDRP.pm:224 ../lib/XXV/MODULES/SVDRP.pm:30 ../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:628 ../lib/XXV/MODULES/TIMERS.pm:641 ../lib/XXV/MODULES/TIMERS.pm:644 ../lib/XXV/MODULES/TIMERS.pm:669 ../lib/XXV/MODULES/USER.pm:283 ../lib/XXV/MODULES/USER.pm:428 ../lib/XXV/MODULES/USER.pm:434 ../lib/XXV/MODULES/USER.pm:459 ../lib/XXV/MODULES/USER.pm:68 ../lib/XXV/MODULES/VTX.pm:33 ../lib/XXV/MODULES/VTX.pm:39 ../lib/XXV/MODULES/WAPD.pm:42 ../lib/XXV/MODULES/WAPD.pm:48 ../lib/XXV/MODULES/WAPD.pm:54 ../lib/XXV/MODULES/WAPD.pm:60 ../lib/XXV/MODULES/WAPD.pm:66 ../lib/XXV/MODULES/WAPD.pm:73 ../lib/XXV/MODULES/XMLTV.pm:32 ../lib/XXV/MODULES/XMLTV.pm:520 ../lib/XXV/MODULES/XMLTV.pm:539 ../lib/XXV/MODULES/XMLTV.pm:542 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:113 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:119 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:125 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:69 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:95 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:102 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:33 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:59 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:77 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:91 ../lib/XXV/OUTPUT/NEWS/RSS.pm:33 ../lib/XXV/OUTPUT/NEWS/RSS.pm:59 ../lib/XXV/OUTPUT/NEWS/VDR.pm:30 ../lib/XXV/OUTPUT/NEWS/VDR.pm:56
+#: ../bin/xxvd:682 ../bin/xxvd:688 ../bin/xxvd:694 ../lib/XXV/MODULES/AUTOTIMER.pm:30 ../lib/XXV/MODULES/AUTOTIMER.pm:682 ../lib/XXV/MODULES/CHANNELS.pm:1103 ../lib/XXV/MODULES/CHANNELS.pm:1129 ../lib/XXV/MODULES/CHANNELS.pm:1142 ../lib/XXV/MODULES/CHANNELS.pm:1181 ../lib/XXV/MODULES/CHANNELS.pm:1207 ../lib/XXV/MODULES/CHANNELS.pm:28 ../lib/XXV/MODULES/CHRONICLE.pm:27 ../lib/XXV/MODULES/EPG.pm:34 ../lib/XXV/MODULES/EPG.pm:40 ../lib/XXV/MODULES/EPG.pm:47 ../lib/XXV/MODULES/EVENTS.pm:33 ../lib/XXV/MODULES/GRAB.pm:30 ../lib/XXV/MODULES/GRAB.pm:44 ../lib/XXV/MODULES/HTTPD.pm:62 ../lib/XXV/MODULES/HTTPD.pm:68 ../lib/XXV/MODULES/HTTPD.pm:74 ../lib/XXV/MODULES/HTTPD.pm:80 ../lib/XXV/MODULES/HTTPD.pm:86 ../lib/XXV/MODULES/HTTPD.pm:94 ../lib/XXV/MODULES/INTERFACE.pm:32 ../lib/XXV/MODULES/INTERFACE.pm:38 ../lib/XXV/MODULES/INTERFACE.pm:44 ../lib/XXV/MODULES/KEYWORDS.pm:28 ../lib/XXV/MODULES/LOGREAD.pm:31 ../lib/XXV/MODULES/LOGREAD.pm:37 ../lib/XXV/MODULES/LOGREAD.pm:43 ../lib/XXV/MODULES/LOGREAD.pm:49 ../lib/XXV/MODULES/MEDIALIB.pm:32 ../lib/XXV/MODULES/MEDIALIB.pm:38 ../lib/XXV/MODULES/MEDIALIB.pm:44 ../lib/XXV/MODULES/MOVETIMER.pm:26 ../lib/XXV/MODULES/MOVETIMER.pm:417 ../lib/XXV/MODULES/MOVETIMER.pm:420 ../lib/XXV/MODULES/MOVETIMER.pm:440 ../lib/XXV/MODULES/MOVETIMER.pm:443 ../lib/XXV/MODULES/MUSIC.pm:39 ../lib/XXV/MODULES/MUSIC.pm:45 ../lib/XXV/MODULES/MUSIC.pm:51 ../lib/XXV/MODULES/MUSIC.pm:57 ../lib/XXV/MODULES/MUSIC.pm:68 ../lib/XXV/MODULES/MUSIC.pm:74 ../lib/XXV/MODULES/RECORDS.pm:2226 ../lib/XXV/MODULES/RECORDS.pm:2240 ../lib/XXV/MODULES/RECORDS.pm:2254 ../lib/XXV/MODULES/RECORDS.pm:2831 ../lib/XXV/MODULES/RECORDS.pm:2843 ../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:70 ../lib/XXV/MODULES/RECORDS.pm:86 ../lib/XXV/MODULES/RECORDS.pm:97 ../lib/XXV/MODULES/REMOTE.pm:28 ../lib/XXV/MODULES/REMOTE.pm:34 ../lib/XXV/MODULES/REMOTE.pm:41 ../lib/XXV/MODULES/REPORT.pm:29 ../lib/XXV/MODULES/REPORT.pm:35 ../lib/XXV/MODULES/ROBOT.pm:29 ../lib/XXV/MODULES/SHARE.pm:64 ../lib/XXV/MODULES/SHARE.pm:81 ../lib/XXV/MODULES/SHARE.pm:87 ../lib/XXV/MODULES/STATUS.pm:31 ../lib/XXV/MODULES/STATUS.pm:37 ../lib/XXV/MODULES/STATUS.pm:42 ../lib/XXV/MODULES/STREAM.pm:108 ../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:88 ../lib/XXV/MODULES/STREAM.pm:94 ../lib/XXV/MODULES/SVDRP.pm:221 ../lib/XXV/MODULES/SVDRP.pm:227 ../lib/XXV/MODULES/SVDRP.pm:250 ../lib/XXV/MODULES/SVDRP.pm:30 ../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:630 ../lib/XXV/MODULES/TIMERS.pm:643 ../lib/XXV/MODULES/TIMERS.pm:646 ../lib/XXV/MODULES/TIMERS.pm:671 ../lib/XXV/MODULES/USER.pm:283 ../lib/XXV/MODULES/USER.pm:431 ../lib/XXV/MODULES/USER.pm:437 ../lib/XXV/MODULES/USER.pm:460 ../lib/XXV/MODULES/USER.pm:68 ../lib/XXV/MODULES/VTX.pm:33 ../lib/XXV/MODULES/VTX.pm:39 ../lib/XXV/MODULES/WAPD.pm:42 ../lib/XXV/MODULES/WAPD.pm:48 ../lib/XXV/MODULES/WAPD.pm:54 ../lib/XXV/MODULES/WAPD.pm:60 ../lib/XXV/MODULES/WAPD.pm:66 ../lib/XXV/MODULES/WAPD.pm:73 ../lib/XXV/MODULES/XMLTV.pm:32 ../lib/XXV/MODULES/XMLTV.pm:520 ../lib/XXV/MODULES/XMLTV.pm:539 ../lib/XXV/MODULES/XMLTV.pm:542 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:113 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:119 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:125 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:69 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:95 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:102 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:33 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:59 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:77 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:91 ../lib/XXV/OUTPUT/NEWS/RSS.pm:33 ../lib/XXV/OUTPUT/NEWS/RSS.pm:59 ../lib/XXV/OUTPUT/NEWS/VDR.pm:30 ../lib/XXV/OUTPUT/NEWS/VDR.pm:56
msgid "This is required!"
msgstr "Das ist erforderlich!"
@@ -59,17 +59,17 @@ msgid "Password for database access"
msgstr "Passwort für Datenbankzugriff"
#--------------------
-#: ../bin/xxvd:699 ../lib/XXV/MODULES/USER.pm:291 ../lib/XXV/MODULES/USER.pm:442 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:133 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:120
+#: ../bin/xxvd:702 ../lib/XXV/MODULES/USER.pm:293 ../lib/XXV/MODULES/USER.pm:447 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:134 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:120
msgid "The fields with the 1st and the 2nd password must match!"
msgstr "Das Feld mit 1. und 2. Passwort muß gleich sein, um es zu bestätigen!"
#--------------------
-#: ../bin/xxvd:708
+#: ../bin/xxvd:711
msgid "Generate the documentation into the doc directory."
msgstr "Generiere die Dokumentation ins doc Verzeichnis."
#--------------------
-#: ../bin/xxvd:714
+#: ../bin/xxvd:717
msgid "Display program information."
msgstr "Zeigt Textdateien."
@@ -179,7 +179,7 @@ msgid "Delete channels"
msgstr "Kanäle löschen"
#--------------------
-#: ../html/clist.tmpl:134 ../lib/XXV/MODULES/CHANNELS.pm:1097 ../lib/XXV/MODULES/CHANNELS.pm:1370 ../lib/XXV/MODULES/CHANNELS.pm:602 ../lib/XXV/MODULES/USER.pm:599 ../lib/XXV/OUTPUT/Console.pm:170 ../lib/XXV/OUTPUT/Console.pm:233
+#: ../html/clist.tmpl:134 ../lib/XXV/MODULES/CHANNELS.pm:1097 ../lib/XXV/MODULES/CHANNELS.pm:1370 ../lib/XXV/MODULES/CHANNELS.pm:602 ../lib/XXV/MODULES/USER.pm:614 ../lib/XXV/OUTPUT/Console.pm:170 ../lib/XXV/OUTPUT/Console.pm:233
msgid "Name"
msgstr "Name"
@@ -266,12 +266,12 @@ msgid "Percent"
msgstr "Prozent"
#--------------------
-#: ../html/display.tmpl:25 ../html/rdisplay.tmpl:158 ../html/search.tmpl:54 ../lib/XXV/MODULES/AUTOTIMER.pm:157 ../lib/XXV/MODULES/AUTOTIMER.pm:432 ../lib/XXV/MODULES/CHRONICLE.pm:176 ../lib/XXV/MODULES/CHRONICLE.pm:257 ../lib/XXV/MODULES/EPG.pm:1076 ../lib/XXV/MODULES/EPG.pm:1199 ../lib/XXV/MODULES/EPG.pm:695 ../lib/XXV/MODULES/EPG.pm:932 ../lib/XXV/MODULES/RECORDS.pm:2122 ../lib/XXV/MODULES/SHARE.pm:354 ../lib/XXV/MODULES/TIMERS.pm:1256 ../lib/XXV/MODULES/TIMERS.pm:875 ../lib/XXV/MODULES/XMLTV.pm:692
+#: ../html/display.tmpl:25 ../html/rdisplay.tmpl:161 ../html/search.tmpl:54 ../lib/XXV/MODULES/AUTOTIMER.pm:157 ../lib/XXV/MODULES/AUTOTIMER.pm:432 ../lib/XXV/MODULES/CHRONICLE.pm:176 ../lib/XXV/MODULES/CHRONICLE.pm:257 ../lib/XXV/MODULES/EPG.pm:1076 ../lib/XXV/MODULES/EPG.pm:1199 ../lib/XXV/MODULES/EPG.pm:695 ../lib/XXV/MODULES/EPG.pm:932 ../lib/XXV/MODULES/RECORDS.pm:2264 ../lib/XXV/MODULES/SHARE.pm:354 ../lib/XXV/MODULES/TIMERS.pm:1258 ../lib/XXV/MODULES/TIMERS.pm:877 ../lib/XXV/MODULES/XMLTV.pm:692
msgid "Channel"
msgstr "Kanal"
#--------------------
-#: ../html/display.tmpl:27 ../html/movetimerlist.tmpl:81 ../lib/XXV/MODULES/AUTOTIMER.pm:1141 ../lib/XXV/MODULES/CHANNELS.pm:601 ../lib/XXV/MODULES/CHRONICLE.pm:174 ../lib/XXV/MODULES/CHRONICLE.pm:255 ../lib/XXV/MODULES/EPG.pm:1074 ../lib/XXV/MODULES/EPG.pm:1197 ../lib/XXV/MODULES/EPG.pm:693 ../lib/XXV/MODULES/EPG.pm:820 ../lib/XXV/MODULES/EPG.pm:929 ../lib/XXV/MODULES/MOVETIMER.pm:576 ../lib/XXV/MODULES/MUSIC.pm:614 ../lib/XXV/MODULES/SHARE.pm:352 ../lib/XXV/MODULES/SVDRP.pm:320 ../lib/XXV/MODULES/TIMERS.pm:1253 ../lib/XXV/MODULES/USER.pm:598 ../lib/XXV/MODULES/XMLTV.pm:690
+#: ../html/display.tmpl:27 ../html/movetimerlist.tmpl:81 ../lib/XXV/MODULES/AUTOTIMER.pm:1141 ../lib/XXV/MODULES/CHANNELS.pm:601 ../lib/XXV/MODULES/CHRONICLE.pm:174 ../lib/XXV/MODULES/CHRONICLE.pm:255 ../lib/XXV/MODULES/EPG.pm:1074 ../lib/XXV/MODULES/EPG.pm:1197 ../lib/XXV/MODULES/EPG.pm:693 ../lib/XXV/MODULES/EPG.pm:820 ../lib/XXV/MODULES/EPG.pm:929 ../lib/XXV/MODULES/MOVETIMER.pm:576 ../lib/XXV/MODULES/MUSIC.pm:614 ../lib/XXV/MODULES/SHARE.pm:352 ../lib/XXV/MODULES/SVDRP.pm:329 ../lib/XXV/MODULES/TIMERS.pm:1255 ../lib/XXV/MODULES/USER.pm:613 ../lib/XXV/MODULES/XMLTV.pm:690
msgid "Service"
msgstr "Service"
@@ -301,12 +301,12 @@ msgid "Search with OFDb"
msgstr "Suche mit OFDb"
#--------------------
-#: ../html/display.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:441 ../lib/XXV/MODULES/AUTOTIMER.pm:644 ../lib/XXV/MODULES/EPG.pm:935 ../lib/XXV/MODULES/RECORDS.pm:2135 ../lib/XXV/MODULES/RECORDS.pm:2336 ../lib/XXV/MODULES/TIMERS.pm:773 ../lib/XXV/OUTPUT/Console.pm:171
+#: ../html/display.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:441 ../lib/XXV/MODULES/AUTOTIMER.pm:644 ../lib/XXV/MODULES/EPG.pm:935 ../lib/XXV/MODULES/RECORDS.pm:2277 ../lib/XXV/MODULES/RECORDS.pm:2485 ../lib/XXV/MODULES/TIMERS.pm:775 ../lib/XXV/OUTPUT/Console.pm:171
msgid "Description"
msgstr "Beschreibung"
#--------------------
-#: ../html/display.tmpl:69 ../lib/XXV/MODULES/AUTOTIMER.pm:158 ../lib/XXV/MODULES/AUTOTIMER.pm:435 ../lib/XXV/MODULES/AUTOTIMER.pm:438 ../lib/XXV/MODULES/CHRONICLE.pm:178 ../lib/XXV/MODULES/CHRONICLE.pm:259 ../lib/XXV/MODULES/EPG.pm:1077 ../lib/XXV/MODULES/EPG.pm:1200 ../lib/XXV/MODULES/EPG.pm:696 ../lib/XXV/MODULES/EPG.pm:822 ../lib/XXV/MODULES/EPG.pm:933 ../lib/XXV/MODULES/SHARE.pm:355 ../lib/XXV/MODULES/TIMERS.pm:1257 ../lib/XXV/MODULES/TIMERS.pm:876
+#: ../html/display.tmpl:69 ../lib/XXV/MODULES/AUTOTIMER.pm:158 ../lib/XXV/MODULES/AUTOTIMER.pm:435 ../lib/XXV/MODULES/AUTOTIMER.pm:438 ../lib/XXV/MODULES/CHRONICLE.pm:178 ../lib/XXV/MODULES/CHRONICLE.pm:259 ../lib/XXV/MODULES/EPG.pm:1077 ../lib/XXV/MODULES/EPG.pm:1200 ../lib/XXV/MODULES/EPG.pm:696 ../lib/XXV/MODULES/EPG.pm:822 ../lib/XXV/MODULES/EPG.pm:933 ../lib/XXV/MODULES/SHARE.pm:355 ../lib/XXV/MODULES/TIMERS.pm:1259 ../lib/XXV/MODULES/TIMERS.pm:878
msgid "Start"
msgstr "Start"
@@ -316,7 +316,7 @@ msgid "PDC"
msgstr "VPS"
#--------------------
-#: ../html/display.tmpl:75 ../html/widgets/player.tmpl:100 ../html/widgets/player.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:159 ../lib/XXV/MODULES/AUTOTIMER.pm:436 ../lib/XXV/MODULES/AUTOTIMER.pm:439 ../lib/XXV/MODULES/CHRONICLE.pm:179 ../lib/XXV/MODULES/CHRONICLE.pm:260 ../lib/XXV/MODULES/EPG.pm:1078 ../lib/XXV/MODULES/EPG.pm:1201 ../lib/XXV/MODULES/EPG.pm:697 ../lib/XXV/MODULES/EPG.pm:823 ../lib/XXV/MODULES/EPG.pm:934 ../lib/XXV/MODULES/SHARE.pm:356 ../lib/XXV/MODULES/TIMERS.pm:1258
+#: ../html/display.tmpl:75 ../html/widgets/player.tmpl:100 ../html/widgets/player.tmpl:60 ../lib/XXV/MODULES/AUTOTIMER.pm:159 ../lib/XXV/MODULES/AUTOTIMER.pm:436 ../lib/XXV/MODULES/AUTOTIMER.pm:439 ../lib/XXV/MODULES/CHRONICLE.pm:179 ../lib/XXV/MODULES/CHRONICLE.pm:260 ../lib/XXV/MODULES/EPG.pm:1078 ../lib/XXV/MODULES/EPG.pm:1201 ../lib/XXV/MODULES/EPG.pm:697 ../lib/XXV/MODULES/EPG.pm:823 ../lib/XXV/MODULES/EPG.pm:934 ../lib/XXV/MODULES/SHARE.pm:356 ../lib/XXV/MODULES/TIMERS.pm:1260
msgid "Stop"
msgstr "Stopp"
@@ -356,7 +356,7 @@ msgid "Administration"
msgstr "Administration"
#--------------------
-#: ../html/help.tmpl:114 ../lib/XXV/MODULES/USER.pm:417
+#: ../html/help.tmpl:114 ../lib/XXV/MODULES/USER.pm:420
msgid "User"
msgstr "Anwender"
@@ -371,7 +371,7 @@ msgid "Reload"
msgstr "Erneut laden"
#--------------------
-#: ../html/help.tmpl:120 ../lib/XXV/MODULES/USER.pm:601
+#: ../html/help.tmpl:120 ../lib/XXV/MODULES/USER.pm:616
msgid "Preferences"
msgstr "Einstellungen"
@@ -443,7 +443,7 @@ msgid "Recordings"
msgstr "Aufnahmen"
#--------------------
-#: ../html/help.tmpl:73 ../lib/XXV/MODULES/HTTPD.pm:644 ../lib/XXV/MODULES/MEDIALIB.pm:1231 ../lib/XXV/MODULES/WAPD.pm:80
+#: ../html/help.tmpl:73 ../lib/XXV/MODULES/HTTPD.pm:644 ../lib/XXV/MODULES/MEDIALIB.pm:1230 ../lib/XXV/MODULES/WAPD.pm:80
#. (12)
msgid "Music"
msgstr "Musik"
@@ -485,27 +485,27 @@ msgid "Commands"
msgstr "Kommandos"
#--------------------
-#: ../html/help.tmpl:87 ../html/widgets/player.tmpl:105 ../html/widgets/player.tmpl:69 ../lib/XXV/MODULES/HTTPD.pm:647 ../lib/XXV/MODULES/TIMERS.pm:1254 ../lib/XXV/MODULES/WAPD.pm:83
+#: ../html/help.tmpl:87 ../html/widgets/player.tmpl:105 ../html/widgets/player.tmpl:69 ../lib/XXV/MODULES/HTTPD.pm:647 ../lib/XXV/MODULES/TIMERS.pm:1256 ../lib/XXV/MODULES/WAPD.pm:83
msgid "Status"
msgstr "Status"
#--------------------
-#: ../html/help.tmpl:88 ../lib/XXV/MODULES/STATUS.pm:213
+#: ../html/help.tmpl:88 ../lib/XXV/MODULES/STATUS.pm:218
msgid "Vitals"
msgstr "Wichtiges"
#--------------------
-#: ../html/help.tmpl:89 ../lib/XXV/MODULES/STATUS.pm:277
+#: ../html/help.tmpl:89 ../lib/XXV/MODULES/STATUS.pm:282
msgid "Memory"
msgstr "Speicher"
#--------------------
-#: ../html/help.tmpl:90 ../lib/XXV/MODULES/STATUS.pm:713
+#: ../html/help.tmpl:90 ../lib/XXV/MODULES/STATUS.pm:718
msgid "Filesystem"
msgstr "Filesystem"
#--------------------
-#: ../html/help.tmpl:91 ../lib/XXV/MODULES/STATUS.pm:231
+#: ../html/help.tmpl:91 ../lib/XXV/MODULES/STATUS.pm:236
msgid "Network"
msgstr "Netzwerk"
@@ -525,7 +525,7 @@ msgid "News"
msgstr "Neuigkeiten"
#--------------------
-#: ../html/help.tmpl:98 ../lib/XXV/MODULES/MEDIALIB.pm:1239
+#: ../html/help.tmpl:98 ../lib/XXV/MODULES/MEDIALIB.pm:1238
msgid "History"
msgstr "Geschichte"
@@ -590,7 +590,7 @@ msgid "TV-Episode"
msgstr "TV-Episode"
#--------------------
-#: ../html/mlcopy.tmpl:115 ../html/mldisplay.tmpl:115 ../html/mledit.tmpl:115 ../html/mlimport.tmpl:115 ../lib/XXV/MODULES/MEDIALIB.pm:1305
+#: ../html/mlcopy.tmpl:115 ../html/mldisplay.tmpl:115 ../html/mledit.tmpl:115 ../html/mlimport.tmpl:115 ../lib/XXV/MODULES/MEDIALIB.pm:1304
msgid "Seen"
msgstr "Gesehen"
@@ -600,7 +600,7 @@ msgid "Runtime"
msgstr "Laufzeit"
#--------------------
-#: ../html/mlcopy.tmpl:128 ../html/mldisplay.tmpl:30 ../html/mledit.tmpl:128 ../html/mlimport.tmpl:128 ../html/mlist.tmpl:75 ../lib/XXV/MODULES/MEDIALIB.pm:1280 ../lib/XXV/MODULES/MUSIC.pm:619
+#: ../html/mlcopy.tmpl:128 ../html/mldisplay.tmpl:30 ../html/mledit.tmpl:128 ../html/mlimport.tmpl:128 ../html/mlist.tmpl:75 ../lib/XXV/MODULES/MEDIALIB.pm:1279 ../lib/XXV/MODULES/MUSIC.pm:619
msgid "Year"
msgstr "Jahr"
@@ -610,7 +610,7 @@ msgid "Filename"
msgstr "Dateiname"
#--------------------
-#: ../html/mlcopy.tmpl:140 ../html/mldisplay.tmpl:209 ../html/mledit.tmpl:140 ../html/mlimport.tmpl:140 ../lib/XXV/MODULES/MEDIALIB.pm:1278
+#: ../html/mlcopy.tmpl:140 ../html/mldisplay.tmpl:209 ../html/mledit.tmpl:140 ../html/mlimport.tmpl:140 ../lib/XXV/MODULES/MEDIALIB.pm:1277
msgid "Actors"
msgstr "Schauspieler"
@@ -640,7 +640,7 @@ msgid "Size"
msgstr "Größe"
#--------------------
-#: ../html/mlcopy.tmpl:187 ../html/mldisplay.tmpl:201 ../html/mledit.tmpl:187 ../html/mlimport.tmpl:187 ../html/mlist.tmpl:77 ../lib/XXV/MODULES/MEDIALIB.pm:1285
+#: ../html/mlcopy.tmpl:187 ../html/mldisplay.tmpl:201 ../html/mledit.tmpl:187 ../html/mlimport.tmpl:187 ../html/mlist.tmpl:77 ../lib/XXV/MODULES/MEDIALIB.pm:1284
msgid "Comment"
msgstr "Kommentar"
@@ -660,7 +660,7 @@ msgid "Save"
msgstr "Speichern"
#--------------------
-#: ../html/mlcopy.tmpl:23 ../html/mledit.tmpl:23 ../html/mlimport.tmpl:23 ../lib/XXV/MODULES/AUTOTIMER.pm:155 ../lib/XXV/MODULES/AUTOTIMER.pm:429 ../lib/XXV/MODULES/AUTOTIMER.pm:642 ../lib/XXV/MODULES/CHRONICLE.pm:175 ../lib/XXV/MODULES/CHRONICLE.pm:256 ../lib/XXV/MODULES/EPG.pm:1075 ../lib/XXV/MODULES/EPG.pm:1198 ../lib/XXV/MODULES/EPG.pm:694 ../lib/XXV/MODULES/EPG.pm:821 ../lib/XXV/MODULES/EPG.pm:930 ../lib/XXV/MODULES/EVENTS.pm:349 ../lib/XXV/MODULES/MEDIALIB.pm:1275 ../lib/XXV/MODULES/MUSIC.pm:617 ../lib/XXV/MODULES/RECORDS.pm:1656 ../lib/XXV/MODULES/RECORDS.pm:1793 ../lib/XXV/MODULES/SHARE.pm:353 ../lib/XXV/MODULES/TIMERS.pm:1259 ../lib/XXV/MODULES/TIMERS.pm:874
+#: ../html/mlcopy.tmpl:23 ../html/mledit.tmpl:23 ../html/mlimport.tmpl:23 ../lib/XXV/MODULES/AUTOTIMER.pm:155 ../lib/XXV/MODULES/AUTOTIMER.pm:429 ../lib/XXV/MODULES/AUTOTIMER.pm:642 ../lib/XXV/MODULES/CHRONICLE.pm:175 ../lib/XXV/MODULES/CHRONICLE.pm:256 ../lib/XXV/MODULES/EPG.pm:1075 ../lib/XXV/MODULES/EPG.pm:1198 ../lib/XXV/MODULES/EPG.pm:694 ../lib/XXV/MODULES/EPG.pm:821 ../lib/XXV/MODULES/EPG.pm:930 ../lib/XXV/MODULES/EVENTS.pm:349 ../lib/XXV/MODULES/MEDIALIB.pm:1274 ../lib/XXV/MODULES/MUSIC.pm:617 ../lib/XXV/MODULES/RECORDS.pm:1789 ../lib/XXV/MODULES/RECORDS.pm:1928 ../lib/XXV/MODULES/SHARE.pm:353 ../lib/XXV/MODULES/TIMERS.pm:1261 ../lib/XXV/MODULES/TIMERS.pm:876
msgid "Title"
msgstr "Titel"
@@ -670,7 +670,7 @@ msgid "Search at"
msgstr "Suche bei"
#--------------------
-#: ../html/mlcopy.tmpl:36 ../html/mledit.tmpl:36 ../html/mlimport.tmpl:36 ../lib/XXV/MODULES/AUTOTIMER.pm:430 ../lib/XXV/MODULES/AUTOTIMER.pm:643 ../lib/XXV/MODULES/EPG.pm:931 ../lib/XXV/MODULES/MEDIALIB.pm:1276 ../lib/XXV/MODULES/RECORDS.pm:1657 ../lib/XXV/MODULES/RECORDS.pm:1794
+#: ../html/mlcopy.tmpl:36 ../html/mledit.tmpl:36 ../html/mlimport.tmpl:36 ../lib/XXV/MODULES/AUTOTIMER.pm:430 ../lib/XXV/MODULES/AUTOTIMER.pm:643 ../lib/XXV/MODULES/EPG.pm:931 ../lib/XXV/MODULES/MEDIALIB.pm:1275 ../lib/XXV/MODULES/RECORDS.pm:1790 ../lib/XXV/MODULES/RECORDS.pm:1929
msgid "Subtitle"
msgstr "Serientitel"
@@ -680,7 +680,7 @@ msgid "Create Media"
msgstr "Medium erstellen"
#--------------------
-#: ../html/mlcopy.tmpl:42 ../html/mldisplay.tmpl:78 ../html/mledit.tmpl:42 ../html/mlimport.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1281
+#: ../html/mlcopy.tmpl:42 ../html/mldisplay.tmpl:78 ../html/mledit.tmpl:42 ../html/mlimport.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1280
msgid "Country"
msgstr "Land"
@@ -690,12 +690,12 @@ msgid "Cover URL"
msgstr "Cover URL"
#--------------------
-#: ../html/mlcopy.tmpl:56 ../html/mldisplay.tmpl:48 ../html/mledit.tmpl:56 ../html/mlimport.tmpl:56 ../lib/XXV/MODULES/MEDIALIB.pm:1277
+#: ../html/mlcopy.tmpl:56 ../html/mldisplay.tmpl:48 ../html/mledit.tmpl:56 ../html/mlimport.tmpl:56 ../lib/XXV/MODULES/MEDIALIB.pm:1276
msgid "Director"
msgstr "Regisseur"
#--------------------
-#: ../html/mlcopy.tmpl:64 ../html/mldisplay.tmpl:62 ../html/mledit.tmpl:64 ../html/mlimport.tmpl:64 ../lib/XXV/MODULES/MEDIALIB.pm:1284
+#: ../html/mlcopy.tmpl:64 ../html/mldisplay.tmpl:62 ../html/mledit.tmpl:64 ../html/mlimport.tmpl:64 ../lib/XXV/MODULES/MEDIALIB.pm:1283
msgid "Language"
msgstr "Spache"
@@ -720,17 +720,17 @@ msgid "spanish"
msgstr "spanisch"
#--------------------
-#: ../html/mlcopy.tmpl:82 ../html/mldisplay.tmpl:193 ../html/mledit.tmpl:82 ../html/mlimport.tmpl:82 ../lib/XXV/MODULES/MEDIALIB.pm:1279
+#: ../html/mlcopy.tmpl:82 ../html/mldisplay.tmpl:193 ../html/mledit.tmpl:82 ../html/mlimport.tmpl:82 ../lib/XXV/MODULES/MEDIALIB.pm:1278
msgid "Plot"
msgstr "Handlung"
#--------------------
-#: ../html/mlcopy.tmpl:90 ../html/mldisplay.tmpl:102 ../html/mledit.tmpl:90 ../html/mlimport.tmpl:90 ../lib/XXV/MODULES/MEDIALIB.pm:1282
+#: ../html/mlcopy.tmpl:90 ../html/mldisplay.tmpl:102 ../html/mledit.tmpl:90 ../html/mlimport.tmpl:90 ../lib/XXV/MODULES/MEDIALIB.pm:1281
msgid "DiskID"
msgstr "DiskID"
#--------------------
-#: ../html/mlcopy.tmpl:95 ../html/mldisplay.tmpl:92 ../html/mledit.tmpl:95 ../html/mlimport.tmpl:95 ../lib/XXV/MODULES/MEDIALIB.pm:1283
+#: ../html/mlcopy.tmpl:95 ../html/mldisplay.tmpl:92 ../html/mledit.tmpl:95 ../html/mlimport.tmpl:95 ../lib/XXV/MODULES/MEDIALIB.pm:1282
msgid "Mediatype"
msgstr "Medientyp"
@@ -1019,32 +1019,37 @@ msgid "New recording"
msgstr "Neue Aufnahme"
#--------------------
-#: ../html/rdisplay.tmpl:167 ../lib/XXV/MODULES/RECORDS.pm:2144
+#: ../html/rdisplay.tmpl:140 ../html/rlist.tmpl:102 ../lib/XXV/MODULES/RECORDS.pm:1791 ../lib/XXV/MODULES/RECORDS.pm:1930
+msgid "Duration"
+msgstr "Dauer"
+
+#--------------------
+#: ../html/rdisplay.tmpl:141
+msgid "By cut"
+msgstr "Geschnitten"
+
+#--------------------
+#: ../html/rdisplay.tmpl:170 ../lib/XXV/MODULES/RECORDS.pm:2286
msgid "Keywords"
msgstr "Stichwörter"
#--------------------
-#: ../html/rdisplay.tmpl:184
+#: ../html/rdisplay.tmpl:187
msgid "Lifetime"
msgstr "Lebenszeit"
#--------------------
-#: ../html/rdisplay.tmpl:190 ../lib/XXV/MODULES/AUTOTIMER.pm:160 ../lib/XXV/MODULES/TIMERS.pm:1260
+#: ../html/rdisplay.tmpl:193 ../lib/XXV/MODULES/AUTOTIMER.pm:160 ../lib/XXV/MODULES/TIMERS.pm:1262
msgid "Priority"
msgstr "Priorität"
#--------------------
-#: ../html/rdisplay.tmpl:65 ../html/rlist.tmpl:102 ../lib/XXV/MODULES/RECORDS.pm:1658 ../lib/XXV/MODULES/RECORDS.pm:1795
-msgid "Duration"
-msgstr "Dauer"
-
-#--------------------
#: ../html/rdisplay.tmpl:76
msgid "Recording list"
msgstr "Aufnahmeliste"
#--------------------
-#: ../html/rdisplay.tmpl:78 ../lib/XXV/MODULES/RECORDS.pm:1947
+#: ../html/rdisplay.tmpl:78 ../lib/XXV/MODULES/RECORDS.pm:2088
msgid "Would you like to delete this recording?"
msgstr "Wollen Sie diese Aufnahme löschen?"
@@ -1059,7 +1064,7 @@ msgid "Cut recording"
msgstr "Aufnahme schneiden"
#--------------------
-#: ../html/rdisplay.tmpl:86 ../lib/XXV/MODULES/RECORDS.pm:2164
+#: ../html/rdisplay.tmpl:86 ../lib/XXV/MODULES/RECORDS.pm:2306
msgid "Edit recording"
msgstr "Aufnahme bearbeiten"
@@ -1089,7 +1094,7 @@ msgid "Stored recordings"
msgstr "Gespeicherte Aufnahmen"
#--------------------
-#: ../html/rlist.tmpl:120 ../lib/XXV/MODULES/RECORDS.pm:134
+#: ../html/rlist.tmpl:120 ../lib/XXV/MODULES/RECORDS.pm:128
msgid "Update recordings"
msgstr "Lese die Aufnahmeliste neu ein"
@@ -1104,7 +1109,7 @@ msgid "Delete recordings"
msgstr "Aufnahmen löschen"
#--------------------
-#: ../html/rlist.tmpl:127 ../lib/XXV/MODULES/RECORDS.pm:148
+#: ../html/rlist.tmpl:127 ../lib/XXV/MODULES/RECORDS.pm:142
msgid "Recover deleted recordings"
msgstr "Gelöschte Aufnahmen wiederherstellen"
@@ -1169,7 +1174,7 @@ msgid "Search in fields"
msgstr "Suchfelder"
#--------------------
-#: ../html/search.tmpl:27 ../html/search.tmpl:35 ../html/search.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1304
+#: ../html/search.tmpl:27 ../html/search.tmpl:35 ../html/search.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1303
msgid "All"
msgstr "Alle"
@@ -1281,7 +1286,7 @@ msgid "Planned recordings"
msgstr "Geplante Aufnahmen"
#--------------------
-#: ../html/tlist.tmpl:86 ../lib/XXV/MODULES/TIMERS.pm:881
+#: ../html/tlist.tmpl:86 ../lib/XXV/MODULES/TIMERS.pm:883
msgid "Would you like to delete this timer?"
msgstr "Wollen Sie diesen Timer löschen?"
@@ -1421,7 +1426,7 @@ msgid "Mute"
msgstr "Mute"
#--------------------
-#: ../html/widgets/player.tmpl:106 ../html/widgets/player.tmpl:70 ../lib/XXV/MODULES/SVDRP.pm:744
+#: ../html/widgets/player.tmpl:106 ../html/widgets/player.tmpl:70 ../lib/XXV/MODULES/SVDRP.pm:780
msgid "Unknown"
msgstr "Unbekannt"
@@ -1566,12 +1571,12 @@ msgid "Autotimer %s is activated."
msgstr "Autotimer %s ist aktiviert."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1142 ../lib/XXV/MODULES/SVDRP.pm:321 ../lib/XXV/MODULES/XMLTV.pm:691
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1142 ../lib/XXV/MODULES/SVDRP.pm:330 ../lib/XXV/MODULES/XMLTV.pm:691
msgid "Active"
msgstr "Aktiv"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1145 ../lib/XXV/MODULES/RECORDS.pm:1659 ../lib/XXV/MODULES/RECORDS.pm:1796
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1145 ../lib/XXV/MODULES/RECORDS.pm:1792 ../lib/XXV/MODULES/RECORDS.pm:1931
msgid "Start time"
msgstr "Startzeit"
@@ -1601,7 +1606,7 @@ msgid "Autotimer '%s' found: %s"
msgstr "Autotimer '%s' hat gefunden: %s"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:156 ../lib/XXV/MODULES/CHRONICLE.pm:177 ../lib/XXV/MODULES/CHRONICLE.pm:258 ../lib/XXV/MODULES/EPG.pm:698 ../lib/XXV/MODULES/EPG.pm:824 ../lib/XXV/MODULES/SHARE.pm:357 ../lib/XXV/MODULES/TIMERS.pm:1255
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:156 ../lib/XXV/MODULES/CHRONICLE.pm:177 ../lib/XXV/MODULES/CHRONICLE.pm:258 ../lib/XXV/MODULES/EPG.pm:698 ../lib/XXV/MODULES/EPG.pm:824 ../lib/XXV/MODULES/SHARE.pm:357 ../lib/XXV/MODULES/TIMERS.pm:1257
msgid "Day"
msgstr "Datum"
@@ -1771,7 +1776,7 @@ msgid "Search for autotimer with text 'aid'"
msgstr "Suche nach Autotimer mit Text 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:700 ../lib/XXV/MODULES/AUTOTIMER.pm:750 ../lib/XXV/MODULES/AUTOTIMER.pm:827 ../lib/XXV/MODULES/USER.pm:466 ../lib/XXV/MODULES/USER.pm:473 ../lib/XXV/MODULES/USER.pm:489
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:700 ../lib/XXV/MODULES/AUTOTIMER.pm:750 ../lib/XXV/MODULES/AUTOTIMER.pm:827 ../lib/XXV/MODULES/USER.pm:467 ../lib/XXV/MODULES/USER.pm:474 ../lib/XXV/MODULES/USER.pm:490
msgid "You can choose: %s!"
msgstr "Sie können wählen: %s!"
@@ -1796,7 +1801,7 @@ msgid "Show autotimer 'aid'"
msgstr "Zeige Autotimer 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:766 ../lib/XXV/MODULES/TIMERS.pm:697
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:766 ../lib/XXV/MODULES/TIMERS.pm:699
msgid "Start time in format 'HH:MM'"
msgstr "Startzeit im Format 'HH:MM'"
@@ -1806,12 +1811,12 @@ msgid "You set a start time without an end time!"
msgstr "Startzeitpunkt ohne Stoppzeitpunkt definiert!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:773 ../lib/XXV/MODULES/AUTOTIMER.pm:779 ../lib/XXV/MODULES/AUTOTIMER.pm:796 ../lib/XXV/MODULES/AUTOTIMER.pm:802 ../lib/XXV/MODULES/TIMERS.pm:701 ../lib/XXV/MODULES/TIMERS.pm:707 ../lib/XXV/MODULES/TIMERS.pm:720 ../lib/XXV/MODULES/TIMERS.pm:726
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:773 ../lib/XXV/MODULES/AUTOTIMER.pm:779 ../lib/XXV/MODULES/AUTOTIMER.pm:796 ../lib/XXV/MODULES/AUTOTIMER.pm:802 ../lib/XXV/MODULES/TIMERS.pm:703 ../lib/XXV/MODULES/TIMERS.pm:709 ../lib/XXV/MODULES/TIMERS.pm:722 ../lib/XXV/MODULES/TIMERS.pm:728
msgid "The time is incorrect!"
msgstr "Die Zeit ist nicht korrekt!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:789 ../lib/XXV/MODULES/TIMERS.pm:716
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:789 ../lib/XXV/MODULES/TIMERS.pm:718
msgid "End time in format 'HH:MM'"
msgstr "Endzeit im Format 'HH:MM'"
@@ -1841,7 +1846,7 @@ 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:852 ../lib/XXV/MODULES/AUTOTIMER.pm:866 ../lib/XXV/MODULES/AUTOTIMER.pm:879 ../lib/XXV/MODULES/AUTOTIMER.pm:895 ../lib/XXV/MODULES/AUTOTIMER.pm:911 ../lib/XXV/MODULES/CHANNELS.pm:1085 ../lib/XXV/MODULES/CHANNELS.pm:1116 ../lib/XXV/MODULES/CHANNELS.pm:1155 ../lib/XXV/MODULES/CHANNELS.pm:1168 ../lib/XXV/MODULES/CHANNELS.pm:1194 ../lib/XXV/MODULES/CHANNELS.pm:1220 ../lib/XXV/MODULES/CHANNELS.pm:1233 ../lib/XXV/MODULES/CHANNELS.pm:1246 ../lib/XXV/MODULES/CHANNELS.pm:1259 ../lib/XXV/MODULES/GRAB.pm:105 ../lib/XXV/MODULES/GRAB.pm:249 ../lib/XXV/MODULES/GRAB.pm:257 ../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:109 ../lib/XXV/MODULES/RECORDS.pm:2095 ../lib/XXV/MODULES/RECORDS.pm:2109 ../lib/XXV/MODULES/STREAM.pm:100 ../lib/XXV/MODULES/STREAM.pm:114 ../lib/XXV/MODULES/SVDRP.pm:231 ../lib/XXV/MODULES/TIMERS.pm:35 ../lib/XXV/MODULES/TIMERS.pm:48 ../lib/XXV/MODULES/TIMERS.pm:62 ../lib/XXV/MODULES/TIMERS.pm:742 ../lib/XXV/MODULES/TIMERS.pm:758 ../lib/XXV/MODULES/TIMERS.pm:76 ../lib/XXV/MODULES/TIMERS.pm:89
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:852 ../lib/XXV/MODULES/AUTOTIMER.pm:866 ../lib/XXV/MODULES/AUTOTIMER.pm:879 ../lib/XXV/MODULES/AUTOTIMER.pm:895 ../lib/XXV/MODULES/AUTOTIMER.pm:911 ../lib/XXV/MODULES/CHANNELS.pm:1085 ../lib/XXV/MODULES/CHANNELS.pm:1116 ../lib/XXV/MODULES/CHANNELS.pm:1155 ../lib/XXV/MODULES/CHANNELS.pm:1168 ../lib/XXV/MODULES/CHANNELS.pm:1194 ../lib/XXV/MODULES/CHANNELS.pm:1220 ../lib/XXV/MODULES/CHANNELS.pm:1233 ../lib/XXV/MODULES/CHANNELS.pm:1246 ../lib/XXV/MODULES/CHANNELS.pm:1259 ../lib/XXV/MODULES/GRAB.pm:105 ../lib/XXV/MODULES/GRAB.pm:249 ../lib/XXV/MODULES/GRAB.pm:257 ../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:103 ../lib/XXV/MODULES/RECORDS.pm:2237 ../lib/XXV/MODULES/RECORDS.pm:2251 ../lib/XXV/MODULES/STREAM.pm:100 ../lib/XXV/MODULES/STREAM.pm:114 ../lib/XXV/MODULES/SVDRP.pm:234 ../lib/XXV/MODULES/TIMERS.pm:35 ../lib/XXV/MODULES/TIMERS.pm:48 ../lib/XXV/MODULES/TIMERS.pm:62 ../lib/XXV/MODULES/TIMERS.pm:744 ../lib/XXV/MODULES/TIMERS.pm:76 ../lib/XXV/MODULES/TIMERS.pm:760 ../lib/XXV/MODULES/TIMERS.pm:89
msgid "Value incorrect!"
msgstr "Der Wert ist nicht korrekt!"
@@ -1861,22 +1866,22 @@ msgid "Toggle autotimer on or off 'aid'"
msgstr "Umschalten der Autotimer zwischen Ein und Aus 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:885 ../lib/XXV/MODULES/RECORDS.pm:2102 ../lib/XXV/MODULES/TIMERS.pm:732
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:885 ../lib/XXV/MODULES/RECORDS.pm:2244 ../lib/XXV/MODULES/TIMERS.pm:734
msgid "Priority (%d ... %d)"
msgstr "Priorität (%d ... %d)"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:891 ../lib/XXV/MODULES/TIMERS.pm:738
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:891 ../lib/XXV/MODULES/TIMERS.pm:740
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:901 ../lib/XXV/MODULES/RECORDS.pm:2088 ../lib/XXV/MODULES/TIMERS.pm:748
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:901 ../lib/XXV/MODULES/RECORDS.pm:2230 ../lib/XXV/MODULES/TIMERS.pm:750
msgid "Lifetime (%d ... %d)"
msgstr "Lebenszeit (%d ... %d)"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:907 ../lib/XXV/MODULES/TIMERS.pm:754
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:907 ../lib/XXV/MODULES/TIMERS.pm:756
msgid "Sorry, but the maximum life time is limited to %d!"
msgstr "Entschuldigung, aber die maximale Lebenszeit ist auf %d begrenzt!"
@@ -1896,12 +1901,12 @@ msgid "Start date as YYYY-MM-DD HH:MM:SS."
msgstr "Startdatum als DD.MM.YYYY HH:MM:SS."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:943 ../lib/XXV/MODULES/AUTOTIMER.pm:975 ../lib/XXV/MODULES/TIMERS.pm:674
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:943 ../lib/XXV/MODULES/AUTOTIMER.pm:975 ../lib/XXV/MODULES/TIMERS.pm:676
msgid "Language=English"
msgstr "Language=German,DateFormat=non-US"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:950 ../lib/XXV/MODULES/AUTOTIMER.pm:982 ../lib/XXV/MODULES/TIMERS.pm:688
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:950 ../lib/XXV/MODULES/AUTOTIMER.pm:982 ../lib/XXV/MODULES/TIMERS.pm:690
msgid "The day is incorrect or was in a wrong format!"
msgstr "Das eingegebene Datum ist nicht korrekt oder hatte ein falsches Format!"
@@ -1911,7 +1916,7 @@ msgid "Stop date as YYYY-MM-DD HH:MM:SS."
msgstr "Enddatum als DD.MM.YYYY HH:MM:SS."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:988 ../lib/XXV/MODULES/TIMERS.pm:765
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:988 ../lib/XXV/MODULES/TIMERS.pm:767
msgid "Add keywords to recording"
msgstr "Stichwörter zur Aufnahme hinzufügen"
@@ -2270,7 +2275,7 @@ msgid "EPG table contains %d entries and since the last login on %s %d new entri
msgstr "Die EPG Tabelle enthält %d Einträge und seit dem letzten Anmeldung am %s, %d neue Einträge"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:1700 ../lib/XXV/MODULES/GRAB.pm:241 ../lib/XXV/MODULES/RECORDS.pm:2794 ../lib/XXV/MODULES/VTX.pm:1457
+#: ../lib/XXV/MODULES/EPG.pm:1700 ../lib/XXV/MODULES/GRAB.pm:241 ../lib/XXV/MODULES/RECORDS.pm:2959 ../lib/XXV/MODULES/VTX.pm:1457
msgid "Sorry, get image is'nt supported"
msgstr "Entschuldigung, Bilder werden nicht unterstützt!"
@@ -2670,7 +2675,7 @@ msgid "Delete media"
msgstr "Medium löschen"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1035
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1034
msgid "wanted"
msgstr "Wunschliste"
@@ -2685,92 +2690,92 @@ msgid "Get image from media cache"
msgstr "Hole Bild aus dem Medien Cache"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1151
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1150
msgid "Action"
msgstr "Action"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1155
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1154
msgid "Adventure"
msgstr "Abenteuer"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1159
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1158
msgid "Animation"
msgstr "Animation"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1163
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1162
msgid "Comedy"
msgstr "Komödie"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1167
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1166
msgid "Crime"
msgstr "Krimi"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1171
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1170
msgid "Documentary"
msgstr "Dokumentation"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1175
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1174
msgid "Drama"
msgstr "Drama"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1179
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1178
msgid "Family"
msgstr "Familie"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1183
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1182
msgid "Fantasy"
msgstr "Fantasy"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1187
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1186
msgid "Film-Noir"
msgstr "Film-Noir"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1191
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1190
msgid "Horror"
msgstr "Horror"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1195
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1194
msgid "Musical"
msgstr "Musical"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1199
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1198
msgid "Mystery"
msgstr "Mystery"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1203
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1202
msgid "Romance"
msgstr "Romanze"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1207
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1206
msgid "Sci-Fi"
msgstr "Sci-Fi"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1211
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1210
msgid "Short"
msgstr "Kurzfilm"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1215
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1214
msgid "Thriller"
msgstr "Thriller"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1219
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1218
msgid "War"
msgstr "Krieg"
@@ -2780,27 +2785,27 @@ msgid "Save media"
msgstr "Medium speichern"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1223
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1222
msgid "Western"
msgstr "Western"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1227
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1226
msgid "Adult"
msgstr "Adult"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1235
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1234
msgid "Biography"
msgstr "Biography"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1243
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1242
msgid "Childs"
msgstr "Kinder"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1247
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1246
msgid "Splatter"
msgstr "Splatter"
@@ -2810,57 +2815,57 @@ msgid "Import media"
msgstr "Medium importieren"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1295
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1294
msgid "#"
msgstr "#"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1296
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1295
msgid "ABC"
msgstr "ABC"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1297
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1296
msgid "DEF"
msgstr "DEF"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1298
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1297
msgid "GHI"
msgstr "GHI"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1299
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1298
msgid "JKL"
msgstr "JKL"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1300
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1299
msgid "MNO"
msgstr "MNO"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1301
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1300
msgid "PQRS"
msgstr "PQRS"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1302
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1301
msgid "TUV"
msgstr "TUV"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1303
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1302
msgid "WXYZ"
msgstr "WXYZ"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1306
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1305
msgid "Unseen"
msgstr "Ungesehen"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1307
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1306
msgid "Wanted"
msgstr "Wunschliste"
@@ -2885,7 +2890,7 @@ msgid "Cache images"
msgstr "Bilder zwischenspeichern"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:361 ../lib/XXV/MODULES/MEDIALIB.pm:552 ../lib/XXV/MODULES/MEDIALIB.pm:658 ../lib/XXV/MODULES/MEDIALIB.pm:742
+#: ../lib/XXV/MODULES/MEDIALIB.pm:360 ../lib/XXV/MODULES/MEDIALIB.pm:551 ../lib/XXV/MODULES/MEDIALIB.pm:657 ../lib/XXV/MODULES/MEDIALIB.pm:741
msgid "Media with ID '%s' does not exist in the database!"
msgstr "Medium mit der ID '%s' existiert nicht in der Datenbank!"
@@ -2910,7 +2915,7 @@ msgid "Default range"
msgstr "Standardbereich"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:715
+#: ../lib/XXV/MODULES/MEDIALIB.pm:714
msgid "Media %s saved!"
msgstr "Medium %s gespeichert!"
@@ -2920,12 +2925,12 @@ msgid "List medias"
msgstr "Medien auflisten"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:752
+#: ../lib/XXV/MODULES/MEDIALIB.pm:751
msgid "Genres for Media with ID '%s' does not exist in the database!"
msgstr "Genres für Medium mit der ID '%s' existieren nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:757
+#: ../lib/XXV/MODULES/MEDIALIB.pm:756
msgid "Media %s is deleted."
msgstr "Medium %s wurde gelöscht."
@@ -2985,7 +2990,7 @@ msgid "Which channel should used as source?"
msgstr "Welcher Kanal soll als Quelle verwendet werden?"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:424 ../lib/XXV/MODULES/MOVETIMER.pm:447 ../lib/XXV/MODULES/TIMERS.pm:648 ../lib/XXV/MODULES/XMLTV.pm:546
+#: ../lib/XXV/MODULES/MOVETIMER.pm:424 ../lib/XXV/MODULES/MOVETIMER.pm:447 ../lib/XXV/MODULES/TIMERS.pm:650 ../lib/XXV/MODULES/XMLTV.pm:546
msgid "Channel '%s' does not exist on video disk recorder %s!"
msgstr "Kanal '%s' existiert nicht auf Video Disk Rekorder %s!"
@@ -3230,237 +3235,237 @@ msgid "Please wait, search for new covers ..."
msgstr "Bitte warten, suche nach neuen Plattenhüllen ..."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:100
-msgid "Preview image width"
-msgstr "Breite der Vorschaubilder"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:116
+#: ../lib/XXV/MODULES/RECORDS.pm:110
msgid "Display recording 'rid'"
msgstr "Zeige Aufnahme 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:122
+#: ../lib/XXV/MODULES/RECORDS.pm:116
msgid "List of recordings"
msgstr "Aufnahmenliste"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:128
+#: ../lib/XXV/MODULES/RECORDS.pm:122
msgid "Search recordings 'text'"
msgstr "Sucht Aufnahmen 'text'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:141
+#: ../lib/XXV/MODULES/RECORDS.pm:135
msgid "Delete recording 'rid'"
msgstr "Aufnahme löschen 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1490
-msgid "No recording defined for display! Please use rdisplay 'rid'"
-msgstr "Keine Aufnahme zum Anzeigen definiert! Bitte verwende rdisplay 'rid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1527 ../lib/XXV/MODULES/RECORDS.pm:1566 ../lib/XXV/MODULES/RECORDS.pm:1608 ../lib/XXV/MODULES/RECORDS.pm:1975 ../lib/XXV/MODULES/RECORDS.pm:2065 ../lib/XXV/MODULES/RECORDS.pm:2345
-msgid "Recording '%s' does not exist in the database!"
-msgstr "Aufnahme '%s' existiert nicht in der Datenbank!"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:155
+#: ../lib/XXV/MODULES/RECORDS.pm:149
msgid "Edit recording 'rid'"
msgstr "Aufnahme bearbeiten 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1557 ../lib/XXV/MODULES/RECORDS.pm:1601
-msgid "No recording defined for playback! Please use rplay 'rid'."
-msgstr "Keine Aufnahme zum Wiedergabe definiert! Bitte verwende rplay 'rid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:162
+#: ../lib/XXV/MODULES/RECORDS.pm:156
msgid "Convert recording 'rid'"
msgstr "Aufnahme konvertieren 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1655 ../lib/XXV/MODULES/RECORDS.pm:1792
-msgid "Index"
-msgstr "Index"
+#: ../lib/XXV/MODULES/RECORDS.pm:1612
+msgid "No recording defined for display! Please use rdisplay 'rid'"
+msgstr "Keine Aufnahme zum Anzeigen definiert! Bitte verwende rdisplay 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:169
+#: ../lib/XXV/MODULES/RECORDS.pm:163
msgid "Play recording 'rid' in the VDR."
msgstr "Spiele Aufnahme 'rid' im VDR"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:176
+#: ../lib/XXV/MODULES/RECORDS.pm:1650 ../lib/XXV/MODULES/RECORDS.pm:1690 ../lib/XXV/MODULES/RECORDS.pm:1739 ../lib/XXV/MODULES/RECORDS.pm:2116 ../lib/XXV/MODULES/RECORDS.pm:2207 ../lib/XXV/MODULES/RECORDS.pm:2494
+msgid "Recording '%s' does not exist in the database!"
+msgstr "Aufnahme '%s' existiert nicht in der Datenbank!"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:1680 ../lib/XXV/MODULES/RECORDS.pm:1729
+msgid "No recording defined for playback! Please use rplay 'rid'."
+msgstr "Keine Aufnahme zum Wiedergabe definiert! Bitte verwende rplay 'rid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:170
msgid "Cut recording 'rid' in vdr"
msgstr "Schneide Aufnahme 'rid' im VDR"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1908
-msgid "No recording defined for deletion! Please use rdelete 'id'."
-msgstr "Keine Aufnahme zum Löschen definiert! Bitte verwende rdelete 'rid'."
+#: ../lib/XXV/MODULES/RECORDS.pm:1788 ../lib/XXV/MODULES/RECORDS.pm:1927
+msgid "Index"
+msgstr "Index"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:196
+#: ../lib/XXV/MODULES/RECORDS.pm:190
msgid "Create event entries if a recording has been deleted."
msgstr "Erzeuge Eventeinträge, wenn eine Aufnahme gelöscht wurde."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1981
+#: ../lib/XXV/MODULES/RECORDS.pm:2044
+msgid "No recording defined for deletion! Please use rdelete 'id'."
+msgstr "Keine Aufnahme zum Löschen definiert! Bitte verwende rdelete 'rid'."
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:2122
msgid "Recording '%s' to delete"
msgstr "Aufnahme '%s' wird gelöscht"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2017
+#: ../lib/XXV/MODULES/RECORDS.pm:2158
msgid "No recording to delete!"
msgstr "Keine Aufnahme zum Löschen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2043
+#: ../lib/XXV/MODULES/RECORDS.pm:216
+msgid "Recording deleted: %s"
+msgstr "Aufnahme gelöscht: %s"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:2184
msgid "No recording defined for editing!"
msgstr "Keine Aufnahme-ID zum Bearbeiten!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2082 ../lib/XXV/MODULES/RECORDS.pm:2667 ../lib/XXV/MODULES/TIMERS.pm:626
+#: ../lib/XXV/MODULES/RECORDS.pm:220
+msgid "Subtitle: %s"
+msgstr "Serientitel: %s"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:2224 ../lib/XXV/MODULES/RECORDS.pm:2830 ../lib/XXV/MODULES/TIMERS.pm:628
msgid "Title of recording"
msgstr "Titel der Aufnahme"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2119
+#: ../lib/XXV/MODULES/RECORDS.pm:2261
msgid "Undefined"
msgstr "Unbestimmt"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2129 ../lib/XXV/MODULES/STREAM.pm:208
+#: ../lib/XXV/MODULES/RECORDS.pm:2271 ../lib/XXV/MODULES/STREAM.pm:215
msgid "This channel '%s' does not exist!"
msgstr "Dieser Kanal '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2149
+#: ../lib/XXV/MODULES/RECORDS.pm:2291
msgid "Video"
msgstr "Video"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2154
+#: ../lib/XXV/MODULES/RECORDS.pm:2296
msgid "Audio"
msgstr "Audio"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2159
+#: ../lib/XXV/MODULES/RECORDS.pm:2301
msgid "Cut marks"
msgstr "Schnittmarken"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2196 ../lib/XXV/MODULES/RECORDS.pm:2204
-msgid "Couldn't write file '%s' : %s"
-msgstr "Konnte Datei '%s' nicht schreiben : %s"
+#: ../lib/XXV/MODULES/RECORDS.pm:2315 ../lib/XXV/MODULES/RECORDS.pm:2809 ../lib/XXV/MODULES/RECORDS.pm:749 ../lib/XXV/MODULES/STREAM.pm:338
+msgid "Missing video directory on %s!"
+msgstr "Kein Videoverzeichnis auf %s gefunden!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:222
-msgid "Recording deleted: %s"
-msgstr "Aufnahme gelöscht: %s"
+#: ../lib/XXV/MODULES/RECORDS.pm:2345 ../lib/XXV/MODULES/RECORDS.pm:2353
+msgid "Couldn't write file '%s' : %s"
+msgstr "Konnte Datei '%s' nicht schreiben : %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2223 ../lib/XXV/MODULES/RECORDS.pm:2241
+#: ../lib/XXV/MODULES/RECORDS.pm:2372 ../lib/XXV/MODULES/RECORDS.pm:2390
msgid "Recording: '%s', couldn't move to '%s' : %s"
msgstr "Aufnahme: '%s', konnte nicht nach '%s' verschoben werden : %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2237
+#: ../lib/XXV/MODULES/RECORDS.pm:2386
msgid "Recording: '%s', couldn't mkpath: '%s' : %s"
msgstr "Aufnahme: '%s', konnte nicht Verzeichnis '%s' nicht erstellen : %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2248
+#: ../lib/XXV/MODULES/RECORDS.pm:2397
msgid "Recording: '%s', couldn't remove '%s' : %s"
msgstr "Aufnahme: '%s', konnte nicht '%s' nicht entfernen : %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:226
-msgid "Subtitle: %s"
-msgstr "Serientitel: %s"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2279 ../lib/XXV/MODULES/RECORDS.pm:2281
+#: ../lib/XXV/MODULES/RECORDS.pm:2428 ../lib/XXV/MODULES/RECORDS.pm:2430
msgid "Recording edited!"
msgstr "Aufnahme wurde bearbeitet!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2289
+#: ../lib/XXV/MODULES/RECORDS.pm:2438
msgid "Recording was'nt changed!"
msgstr "Aufnahme wurde nicht verändert!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2328
+#: ../lib/XXV/MODULES/RECORDS.pm:2477
msgid "No reccmds.conf on your system!"
msgstr "Keine reccmds.conf auf dem System!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2333
+#: ../lib/XXV/MODULES/RECORDS.pm:2482
msgid "Please use rconvert 'cmdid_rid'"
msgstr "Bitte verwende rconvert 'cmdid_rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2337
+#: ../lib/XXV/MODULES/RECORDS.pm:2486
msgid "Command"
msgstr "Kommando"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2344
+#: ../lib/XXV/MODULES/RECORDS.pm:2493
msgid "Couldn't find this command ID!"
msgstr "Kann diese Kommando-ID nicht finden!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2358
+#: ../lib/XXV/MODULES/RECORDS.pm:2507
msgid "Call %s '%s', standard error output :"
msgstr "Aufruf %s '%s', Standardfehlerausgabe :"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2361
+#: ../lib/XXV/MODULES/RECORDS.pm:2510
msgid "Call %s '%s', standard output :"
msgstr "Aufruf %s '%s', Ausgabe :"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2365
+#: ../lib/XXV/MODULES/RECORDS.pm:2514
msgid "Sorry! Couldn't call %s '%s'! %s"
msgstr "Entschuldigung! Konnte %s '%s' nicht aufrufen! %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2369
+#: ../lib/XXV/MODULES/RECORDS.pm:2518
msgid "Back to recording list"
msgstr "Zurück zur Aufnahmeliste"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2406
+#: ../lib/XXV/MODULES/RECORDS.pm:2555
msgid "%d new recordings since last report time %s"
msgstr "%d neue Aufnahmen seit der letzten Reportzeit %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2657
+#: ../lib/XXV/MODULES/RECORDS.pm:2820
msgid "There none recoverable recordings!"
msgstr "Es sind keine wiederherstellbaren Aufnahmen vorhanden!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2687
+#: ../lib/XXV/MODULES/RECORDS.pm:2850
msgid "Recover recording"
msgstr "Aufnahme wiederherstellen"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2693
+#: ../lib/XXV/MODULES/RECORDS.pm:2856
msgid "Can't recover recording, maybe was this in the meantime deleted!"
msgstr "Aufnahme konnte nicht wiederhergestellt werden, möglicherweise wurde sie in der zwischenzeit gelöscht!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2702
+#: ../lib/XXV/MODULES/RECORDS.pm:2865
msgid "Recover recording, couldn't rename '%s' to %s : %s"
msgstr "Wiederhergestellen der Aufnahme, konnte '%s' nicht in %s umbenennen : %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2715 ../lib/XXV/MODULES/RECORDS.pm:2717
+#: ../lib/XXV/MODULES/RECORDS.pm:2880 ../lib/XXV/MODULES/RECORDS.pm:2882
msgid "Recording recovered!"
msgstr "Aufnahme wiederhergestellt!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2725
+#: ../lib/XXV/MODULES/RECORDS.pm:2890
msgid "None recording was'nt recovered!"
msgstr "Keine Aufnahme wurde wiederhergestellt!"
@@ -3481,98 +3486,103 @@ msgstr "Wie oft sollen Aufnahmen vollständig eingelesen werden (in Stunden)"
#--------------------
#: ../lib/XXV/MODULES/RECORDS.pm:55
-msgid "Directory where recordings are stored"
-msgstr "Verzeichnis, wo die vdr Aufnahmen gespeichert sind"
+msgid "Location of used program to produce thumbnails on your system."
+msgstr "Position des verwendeten Programms, zum Erzeugen der Vorschaubildern."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:555
-msgid "No recordings available!"
-msgstr "Keine Aufnahmen verfügbar!"
+#: ../lib/XXV/MODULES/RECORDS.pm:599
+msgid "Can't read recordings from %s !"
+msgstr "Konnte keine Aufnahmen auf %s einlesen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:571
-msgid "Used %s, total %s%s, free %s%s"
-msgstr "Genutzt %s, Gesamt %s%s, Frei %s%s"
+#: ../lib/XXV/MODULES/RECORDS.pm:61
+msgid "The program used to create thumbnails"
+msgstr "Das verwendete Programm, um Vorschaubildern zu erzeugen"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:576
-msgid "Unknown disc capacity!"
-msgstr "Unbekannte Festplattenkapazität!"
+#: ../lib/XXV/MODULES/RECORDS.pm:615
+msgid "Used %s, total %s%s, free %s%s on '%s'"
+msgstr "Genutzt %s, Gesamt %s%s, Frei %s%s auf '%s'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:61
-msgid "Location of used program to produce thumbnails on your system."
-msgstr "Position des verwendeten Programms, zum Erzeugen der Vorschaubildern."
+#: ../lib/XXV/MODULES/RECORDS.pm:621
+msgid "Unknown disc capacity on '%s'!"
+msgstr "Unbekannte Speicherkapazität auf '%s'!"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:64
+msgid "None"
+msgstr "Keines"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:628
+#: ../lib/XXV/MODULES/RECORDS.pm:669
+msgid "Couldn't query recordings from database!"
+msgstr "Konnte keine Aufnahmen aus der Datenbank abfragen!"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:688
msgid "Update recording '%s'"
msgstr "Aktualisiere Aufnahme '%s'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:67
-msgid "The program used to create thumbnails"
-msgstr "Das verwendete Programm, um Vorschaubildern zu erzeugen"
+#: ../lib/XXV/MODULES/RECORDS.pm:73
+msgid "Produce how many thumbnails"
+msgstr "Wieviele Vorschaubildern erzeugen?"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:680
+#: ../lib/XXV/MODULES/RECORDS.pm:741
msgid "Analyze recording '%s'"
msgstr "Untersuche Aufnahme '%s'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:70
-msgid "None"
-msgstr "Keines"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:704
+#: ../lib/XXV/MODULES/RECORDS.pm:771
msgid "Can't add recording '%s' into database!"
msgstr "Konnte Aufnahme '%s' nicht in Datenbank einfügen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:707
+#: ../lib/XXV/MODULES/RECORDS.pm:774
msgid "Can't assign recording '%s' to file!"
msgstr "Kann Aufnahme '%s' keiner Datei zuordnen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:714
-msgid "Recording '%s' without id or unique title and date from VDR!"
-msgstr "Aufnahme '%s' ohne ID oder eindeutigen Titel und Datum vom VDR!"
+#: ../lib/XXV/MODULES/RECORDS.pm:78
+msgid "Display recording list with thumbnails?"
+msgstr "Zeige Aufnahmeliste mit Vorschaubildern?"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:79
-msgid "Produce how many thumbnails"
-msgstr "Wieviele Vorschaubildern erzeugen?"
+#: ../lib/XXV/MODULES/RECORDS.pm:781
+msgid "Recording '%s' without id or unique title and date from '%s'!"
+msgstr "Aufnahme '%s' ohne ID oder eindeutigen Titel und Datum auf '%s'!"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:83
+msgid "Common directory for preview images"
+msgstr "Gemeinsames Verzeichnis für Vorschaubilder"
+
+#--------------------
+#: ../lib/XXV/MODULES/RECORDS.pm:89
+msgid "VDR compiled for VFAT system (VFAT=1)"
+msgstr "Setze auf ja, wenn dein vdr kompiliert wurde für das VFAT System (VFAT=1)"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:806
+#: ../lib/XXV/MODULES/RECORDS.pm:890
msgid "Write %d recordings to the database."
msgstr "Schreibe %d Aufnahmen in die Datenbank."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:808
+#: ../lib/XXV/MODULES/RECORDS.pm:892
msgid "Write %d recordings to the database. Couldn't assign %d recordings."
msgstr "Schreibe nur %d Aufnahmen in die Datenbank. Kann %d Aufnahmen nicht zuordnen."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:84
-msgid "Display recording list with thumbnails?"
-msgstr "Zeige Aufnahmeliste mit Vorschaubildern?"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:845 ../lib/XXV/MODULES/RECORDS.pm:847
+#: ../lib/XXV/MODULES/RECORDS.pm:929 ../lib/XXV/MODULES/RECORDS.pm:931
msgid "Get information on recordings ..."
msgstr "Hole Informationen über Aufnahmen ..."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:89
-msgid "Common directory for preview images"
-msgstr "Gemeinsames Verzeichnis für Vorschaubilder"
-
-#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:95
-msgid "VDR compiled for VFAT system (VFAT=1)"
-msgstr "Setze auf ja, wenn dein vdr kompiliert wurde für das VFAT System (VFAT=1)"
+#: ../lib/XXV/MODULES/RECORDS.pm:94
+msgid "Preview image width"
+msgstr "Breite der Vorschaubilder"
#--------------------
#: ../lib/XXV/MODULES/REMOTE.pm:17
@@ -3591,8 +3601,8 @@ msgstr "Versuche Start des Kommando: %s mit cmd: %s "
#--------------------
#: ../lib/XXV/MODULES/REMOTE.pm:31
-msgid "Grab video framebuffer, as preview on remotecontrol."
-msgstr "Speichert den Videoframebuffer, als Vorschau innerhalb der Fernbedienung."
+msgid "Show grabbed video framebuffer in addition to remote control."
+msgstr "Anzeige des Videomonitorbild, parallel zur Fernbedienung."
#--------------------
#: ../lib/XXV/MODULES/REMOTE.pm:46
@@ -3666,16 +3676,21 @@ msgstr "Zeigt die Liste der besten zehn Timer an."
#--------------------
#: ../lib/XXV/MODULES/STATUS.pm:102
+msgid "Displays network information"
+msgstr "Zeigt die Informationen des Netzwerks"
+
+#--------------------
+#: ../lib/XXV/MODULES/STATUS.pm:107
msgid "Displays hardware information"
msgstr "Zeigt die Informationen der Hardware"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:107
+#: ../lib/XXV/MODULES/STATUS.pm:112
msgid "Displays memory information"
msgstr "Zeigt die Informationen des Speichers"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:112
+#: ../lib/XXV/MODULES/STATUS.pm:117
msgid "Display the file system informations"
msgstr "Zeigt die Informationen des Dateisystems"
@@ -3685,102 +3700,102 @@ msgid "This module analyzes your system and displays the result."
msgstr "Dieses Modul analysieren Ihr System und zeigt das Resultat an."
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:259
+#: ../lib/XXV/MODULES/STATUS.pm:264
msgid "CPU"
msgstr "CPU"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:260
+#: ../lib/XXV/MODULES/STATUS.pm:265
msgid "PCI"
msgstr "PCI"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:262
+#: ../lib/XXV/MODULES/STATUS.pm:267
msgid "IDE"
msgstr "IDE"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:264
+#: ../lib/XXV/MODULES/STATUS.pm:269
msgid "SCSI"
msgstr "SCSI"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:295
+#: ../lib/XXV/MODULES/STATUS.pm:300
msgid "Filesystems"
msgstr "Dateisysteme"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:377
+#: ../lib/XXV/MODULES/STATUS.pm:382
msgid "day"
msgstr "Tag"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:383
+#: ../lib/XXV/MODULES/STATUS.pm:388
msgid "days"
msgstr "Tage"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:391
+#: ../lib/XXV/MODULES/STATUS.pm:396
msgid "hour"
msgstr "Stunde"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:397
+#: ../lib/XXV/MODULES/STATUS.pm:402
msgid "hours"
msgstr "Stunden"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:405
+#: ../lib/XXV/MODULES/STATUS.pm:410
msgid "minute"
msgstr "Minute"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:411
+#: ../lib/XXV/MODULES/STATUS.pm:416
msgid "minutes"
msgstr "Minuten"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:426
+#: ../lib/XXV/MODULES/STATUS.pm:431
msgid "Interface"
msgstr "Schnittstelle"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:427
+#: ../lib/XXV/MODULES/STATUS.pm:432
msgid "RxBytes"
msgstr "RxBytes"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:428
+#: ../lib/XXV/MODULES/STATUS.pm:433
msgid "RxPackets"
msgstr "RxPackets"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:429
+#: ../lib/XXV/MODULES/STATUS.pm:434
msgid "RxErrs"
msgstr "RxErrs"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:430
+#: ../lib/XXV/MODULES/STATUS.pm:435
msgid "RxDrop"
msgstr "RxDrop"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:431
+#: ../lib/XXV/MODULES/STATUS.pm:436
msgid "TxBytes"
msgstr "TxBytes"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:432
+#: ../lib/XXV/MODULES/STATUS.pm:437
msgid "TxPackets"
msgstr "TxPackets"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:433
+#: ../lib/XXV/MODULES/STATUS.pm:438
msgid "TxErrs"
msgstr "TxErrs"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:434
+#: ../lib/XXV/MODULES/STATUS.pm:439
msgid "TxDrop"
msgstr "TxDrop"
@@ -3790,7 +3805,7 @@ msgid "Interval in seconds to save data"
msgstr "Abstand in den Sekunden, zum sich an die Daten zu erinnern"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:501
+#: ../lib/XXV/MODULES/STATUS.pm:506
msgid "No on-chip cache."
msgstr "Kein On-Chip Cache."
@@ -3800,22 +3815,22 @@ msgid "Save historical data, in hours"
msgstr "Wie lang an die historischen Daten erinnert, in Stunden"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:590
+#: ../lib/XXV/MODULES/STATUS.pm:595
msgid "Device"
msgstr "Gerät"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:591
+#: ../lib/XXV/MODULES/STATUS.pm:596
msgid "Model"
msgstr "Modell"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:592 ../lib/XXV/MODULES/STATUS.pm:718
+#: ../lib/XXV/MODULES/STATUS.pm:597 ../lib/XXV/MODULES/STATUS.pm:723
msgid "Capacity"
msgstr "Kapazität"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:593
+#: ../lib/XXV/MODULES/STATUS.pm:598
msgid "Cache"
msgstr "Cache"
@@ -3825,56 +3840,56 @@ msgid "Show collected data as diagram?"
msgstr "Zeige gesammelte Daten als Diagramm?"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:69
-msgid "Display all relevant informations about this system"
-msgstr "Zeigt alle relevanten Informationen über dieses System an"
+#: ../lib/XXV/MODULES/STATUS.pm:67
+msgid "Warning level, if volume filled more then this level"
+msgstr "Warnschwelle, wenn das Speichermedium den Füllstand übersteigt"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:714
+#: ../lib/XXV/MODULES/STATUS.pm:719
msgid "Typ"
msgstr "Type"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:715
+#: ../lib/XXV/MODULES/STATUS.pm:720
msgid "Space"
msgstr "Verfügbar"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:716
+#: ../lib/XXV/MODULES/STATUS.pm:721
msgid "Used"
msgstr "Benutzt"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:717
+#: ../lib/XXV/MODULES/STATUS.pm:722
msgid "Free"
msgstr "Frei"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:719
+#: ../lib/XXV/MODULES/STATUS.pm:724
msgid "Mount"
msgstr "Eingehängt auf"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:794
+#: ../lib/XXV/MODULES/STATUS.pm:74
+msgid "Display all relevant informations about this system"
+msgstr "Zeigt alle relevanten Informationen über dieses System an"
+
+#--------------------
+#: ../lib/XXV/MODULES/STATUS.pm:799
msgid "PANIC! Only %s%% space left on device %s"
msgstr "PANIK! Nur noch %s%% freier Platz auf Gerät %s"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:795
+#: ../lib/XXV/MODULES/STATUS.pm:800
msgid "Device has space %s from %s used!"
msgstr "Gerät hat Platz %s von %s verwendet!"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:92
+#: ../lib/XXV/MODULES/STATUS.pm:97
msgid "Display the vitals informations"
msgstr "Zeigt die wichtigen Informationen"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:97
-msgid "Displays network information"
-msgstr "Zeigt die Informationen des Netzwerks"
-
-#--------------------
#: ../lib/XXV/MODULES/STREAM.pm:105
msgid "Stream widget height"
msgstr "Streaming Widgethöhe"
@@ -3890,12 +3905,12 @@ msgid "Stream a channel 'cid'. This required the streamdev plugin!"
msgstr "Stream eines Kanales 'cid'. Dies erfordert das Streamdev Plugin!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:193
+#: ../lib/XXV/MODULES/STREAM.pm:200
msgid "No channel defined for streaming!"
msgstr "Kein Kanal für Streaming definiert!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:196 ../lib/XXV/MODULES/STREAM.pm:276
+#: ../lib/XXV/MODULES/STREAM.pm:203 ../lib/XXV/MODULES/STREAM.pm:283
msgid "Can't stream files!"
msgstr "Kann Datei nicht streamen!"
@@ -3905,17 +3920,17 @@ msgid "This module generate streams from recordings."
msgstr "Dieses Modul erzeugt Streams von Aufnahmen."
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:263
+#: ../lib/XXV/MODULES/STREAM.pm:270
msgid "Unknown access method!"
msgstr "Unbekannte Methode des Zugriffs!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:273
+#: ../lib/XXV/MODULES/STREAM.pm:280
msgid "No recording defined for streaming!"
msgstr "Keine Aufnahme für Streaming definiert!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:281 ../lib/XXV/MODULES/STREAM.pm:304 ../lib/XXV/MODULES/STREAM.pm:310
+#: ../lib/XXV/MODULES/STREAM.pm:288 ../lib/XXV/MODULES/STREAM.pm:311 ../lib/XXV/MODULES/STREAM.pm:317
msgid "Couldn't find recording: '%s'"
msgstr "Konnte Aufnahme '%s' nicht finden"
@@ -4030,81 +4045,91 @@ msgid "This module module manages connection to video disk recorder."
msgstr "Das Modul verwaltet die Verbindung zu den Video Disk Rekordern."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:201 ../lib/XXV/MODULES/SVDRP.pm:284
+#: ../lib/XXV/MODULES/SVDRP.pm:204 ../lib/XXV/MODULES/SVDRP.pm:293
msgid "Definition of video disk recorder '%s' does not exist in the database!"
msgstr "Definition '%s' des Video Disk Rekorder existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:213
+#: ../lib/XXV/MODULES/SVDRP.pm:216
msgid "Activate this definition"
msgstr "Aktiviere diese Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:217
+#: ../lib/XXV/MODULES/SVDRP.pm:220
msgid "Host or IP address of video disk recorder"
msgstr "Host bzw. IP-Adresse des Video Disk Rekorder"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:223
+#: ../lib/XXV/MODULES/SVDRP.pm:226
msgid "Used Port of SVDRP"
msgstr "Verwendeter SVDRP Port"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:238
+#: ../lib/XXV/MODULES/SVDRP.pm:241
msgid "Use as primary video disk recorder"
msgstr "Verwende als primären Video Disk Rekorder"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:241
+#: ../lib/XXV/MODULES/SVDRP.pm:244
msgid "List of present source of DVB cards. (eg. S19.2E,S19.2E,T,T )"
msgstr "Liste der vorhandenen Quellen der DVB Karten. (z.B. S19.2E,S19.2E,T,T )"
#--------------------
#: ../lib/XXV/MODULES/SVDRP.pm:248
+msgid "Directory where recordings are stored"
+msgstr "Verzeichnis, wo die vdr Aufnahmen gespeichert sind"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:257
msgid "Edit video disk recorder definition"
msgstr "Bearbeiten der Video Disk Rekorder Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:249
+#: ../lib/XXV/MODULES/SVDRP.pm:258
msgid "Create new video disk recorder definition"
msgstr "Erzeuge neue Video Disk Rekorder Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:268
-msgid "Video disk recorder definition saved!"
-msgstr "Video Disk Rekorder Definition wurde gespeichert!"
-
-#--------------------
#: ../lib/XXV/MODULES/SVDRP.pm:27
msgid "Connection timeout defines after how many seconds an unrequited connection is terminated."
msgstr "Nach wievielen Sekunden wird eine unerwiderte Verbindung beendet."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:280
+#: ../lib/XXV/MODULES/SVDRP.pm:277
+msgid "Video disk recorder definition saved!"
+msgstr "Video Disk Rekorder Definition wurde gespeichert!"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:289
msgid "No definition of video disk recorder for deletion! Please use sdelete 'id'."
msgstr "Keine Definition eines Video Disk Rekorder zum Löschen! Bitte verwende sdelete 'id'."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:290
+#: ../lib/XXV/MODULES/SVDRP.pm:299
msgid "Definition of video disk recorder are %s deleted."
msgstr "Definition '%s' des Video Disk Rekorder wurde gelöscht."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:322
+#: ../lib/XXV/MODULES/SVDRP.pm:331
msgid "Primary"
msgstr "Primär"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:323
+#: ../lib/XXV/MODULES/SVDRP.pm:332
msgid "Host"
msgstr "Host"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:324
+#: ../lib/XXV/MODULES/SVDRP.pm:333
msgid "Typ of Cards"
msgstr "Art von Karten"
#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:334
+msgid "Video directory"
+msgstr "Videoverzeichnis"
+
+#--------------------
#: ../lib/XXV/MODULES/SVDRP.pm:35
msgid "List defined video disk recorder."
msgstr "Zeige Definition der Video Disk Rekorder"
@@ -4125,7 +4150,7 @@ msgid "Edit video disk recorder definition 'id'"
msgstr "Bearbeiten Video Disk Rekorder Definition 'id'"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:549
+#: ../lib/XXV/MODULES/SVDRP.pm:585
msgid "None video disk recorder defined in the database."
msgstr "Kein Video Disk Rekorder in der Datenbank definiert."
@@ -4135,42 +4160,42 @@ msgid "Status from video disk recorder."
msgstr "Status des Video Disk Rekorder."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:642
-msgid "Error at command '%s' to %s:%s! %s"
-msgstr "Fehler im Kommando '%s' %s:%s! %s"
-
-#--------------------
#: ../lib/XXV/MODULES/SVDRP.pm:66
msgid "Send a command to video disk recorder."
msgstr "Sende Befehl an Video Disk Rekorder."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:696
+#: ../lib/XXV/MODULES/SVDRP.pm:678
+msgid "Error at command '%s' to %s:%s! %s"
+msgstr "Fehler im Kommando '%s' %s:%s! %s"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:732
msgid "No command defined! Please use scommand 'cmd'."
msgstr "Kein Kommando definiert! Bitte verwende scommand 'cmd'"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:718
+#: ../lib/XXV/MODULES/SVDRP.pm:754
msgid "Recorder"
msgstr "Rekorder"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:719
+#: ../lib/XXV/MODULES/SVDRP.pm:755
msgid "State"
msgstr "Status"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:739
+#: ../lib/XXV/MODULES/SVDRP.pm:775
msgid "Online"
msgstr "Verbunden"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:741
+#: ../lib/XXV/MODULES/SVDRP.pm:777
msgid "Offline"
msgstr "Keine Verbindung"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:750
+#: ../lib/XXV/MODULES/SVDRP.pm:786
msgid "%d active recorder"
msgstr "%d aktive Rekorder"
@@ -4224,7 +4249,7 @@ msgid "Change timers if EPG entries change"
msgstr "Timer justieren, wenn EPG Eintrag verändert wurde"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1014
+#: ../lib/XXV/MODULES/TIMERS.pm:1016
msgid "No timer to toggle!"
msgstr "Kein Timer zum Umschalten!"
@@ -4239,7 +4264,7 @@ msgid "Search timers 'text'"
msgstr "Suche Timer 'text'"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1163
+#: ../lib/XXV/MODULES/TIMERS.pm:1165
msgid "%d timer written to database."
msgstr "%d Timer in Datenbank geschrieben."
@@ -4269,12 +4294,12 @@ msgid "Activate/Deactive timer 'tid'"
msgstr "Aktiviere/Deaktiviere Timer 'tid'"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1546
+#: ../lib/XXV/MODULES/TIMERS.pm:1548
msgid "Adjust timer : %s"
msgstr "Anpassen des Timer : %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1548
+#: ../lib/XXV/MODULES/TIMERS.pm:1550
msgid "Adjust times from %s to %s"
msgstr "Anpassen der Zeiten von %s nach %s"
@@ -4289,12 +4314,12 @@ msgid "New timer: %s"
msgstr "Neuer Timer: %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:2071
+#: ../lib/XXV/MODULES/TIMERS.pm:2073
msgid "Channel: %s"
msgstr "Kanal: %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:2076
+#: ../lib/XXV/MODULES/TIMERS.pm:2078
msgid "On: %s to %s"
msgstr "Um: %s bis %s"
@@ -4324,47 +4349,47 @@ msgid "%d timer exists."
msgstr "Es exisiteren %d Timer."
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:522
+#: ../lib/XXV/MODULES/TIMERS.pm:524
msgid "Event '%s' does not exist in the database!"
msgstr "Sendung '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:538 ../lib/XXV/MODULES/TIMERS.pm:782
+#: ../lib/XXV/MODULES/TIMERS.pm:540 ../lib/XXV/MODULES/TIMERS.pm:784
msgid "New timer"
msgstr "Neuer Timer"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:588 ../lib/XXV/MODULES/TIMERS.pm:907 ../lib/XXV/MODULES/TIMERS.pm:986
+#: ../lib/XXV/MODULES/TIMERS.pm:590 ../lib/XXV/MODULES/TIMERS.pm:909 ../lib/XXV/MODULES/TIMERS.pm:988
msgid "Timer '%s' does not exist in the database!"
msgstr "Timer '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:618
+#: ../lib/XXV/MODULES/TIMERS.pm:620
msgid "Enable this timer"
msgstr "Aktiviere diesen Timer"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:623
+#: ../lib/XXV/MODULES/TIMERS.pm:625
msgid "Use PDC time to control timer"
msgstr "Verwende VPS Zeit zum Überwachen des Timers"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:634 ../lib/XXV/MODULES/XMLTV.pm:532
+#: ../lib/XXV/MODULES/TIMERS.pm:636 ../lib/XXV/MODULES/XMLTV.pm:532
msgid "Which video disk recorder should record"
msgstr "Welcher Video Disk Recorder soll aufzeichen"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:640
+#: ../lib/XXV/MODULES/TIMERS.pm:642
msgid "Which channel should recorded"
msgstr "Welcher Kanal soll aufgezeichnet werden"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:662
+#: ../lib/XXV/MODULES/TIMERS.pm:664
msgid "%Y-%m-%d"
msgstr "%d.%m.%Y"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:668
+#: ../lib/XXV/MODULES/TIMERS.pm:670
msgid "Enter a day or weekday in format 'MTWTFSS'."
msgstr "Datum oder Wochentag im Format 'MDMDFSS' eingeben."
@@ -4374,7 +4399,7 @@ msgid "Priority of a timer for recordings when creating a new timer"
msgstr "Die Priorität eines Timers für Aufnahmen, bei Erzeugen eines neuen Timer"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:781
+#: ../lib/XXV/MODULES/TIMERS.pm:783
msgid "Edit timer"
msgstr "Timer bearbeiten"
@@ -4384,17 +4409,17 @@ msgid "The guaranteed lifetime (in days) of a recording created by this timer"
msgstr "Die garantierte Lebenszeit (in Tagen) einer Aufnahme, die durch diesen Timer erzeugt wurde"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:849
+#: ../lib/XXV/MODULES/TIMERS.pm:851
msgid "No timer defined for deletion! Please use tdelete 'tid'."
msgstr "Kein Timer zum Löschen definiert! Bitte verwende tdelete 'tid'."
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:923
+#: ../lib/XXV/MODULES/TIMERS.pm:925
msgid "No timer to delete!"
msgstr "Kein Timer zum Löschen!"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:935
+#: ../lib/XXV/MODULES/TIMERS.pm:937
msgid "No timer defined to toggle! Please use ttoggle 'id'."
msgstr "Kein Timer zum Umschalten definiert! Bitte verwende ttoggle 'tid'"
@@ -4437,12 +4462,12 @@ msgid "You are not authorized for change external account preferences!"
msgstr "Sie sind nicht berechtigt, fremde Einstellungen zu ändern!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:271 ../lib/XXV/MODULES/USER.pm:407 ../lib/XXV/MODULES/USER.pm:576
+#: ../lib/XXV/MODULES/USER.pm:271 ../lib/XXV/MODULES/USER.pm:410 ../lib/XXV/MODULES/USER.pm:591
msgid "User account '%s' does not exist in the database!"
msgstr "Account für Benutzer '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:282 ../lib/XXV/MODULES/USER.pm:433
+#: ../lib/XXV/MODULES/USER.pm:282 ../lib/XXV/MODULES/USER.pm:436
msgid "Password for this account"
msgstr "Passwort für diesen Anwenderzugang"
@@ -4452,7 +4477,7 @@ msgid "Enable user authentication"
msgstr "Aktiviert die Anwenderauthentifizierung"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:347
+#: ../lib/XXV/MODULES/USER.pm:350
msgid "Edit preferences: %s"
msgstr "Einstellungen für diese Anwender bearbeiten: %s"
@@ -4462,27 +4487,27 @@ msgid "IP addresses with user authentification"
msgstr "IP Adressen mit Benutzer-Authentifizierung"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:381 ../lib/XXV/MODULES/USER.pm:556
+#: ../lib/XXV/MODULES/USER.pm:384 ../lib/XXV/MODULES/USER.pm:571
msgid "User account saved!"
msgstr "Anwenderzugang wurde gespeichert!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:384
+#: ../lib/XXV/MODULES/USER.pm:387
msgid "Please wait ... refreshing interface!"
msgstr "Bitte warten ... die Anwenderoberfläche wird aktualisiert!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:416
+#: ../lib/XXV/MODULES/USER.pm:419
msgid "Administrator"
msgstr "Verwalter"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:418
+#: ../lib/XXV/MODULES/USER.pm:421
msgid "Guest"
msgstr "Gast"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:427
+#: ../lib/XXV/MODULES/USER.pm:430
msgid "Name of user account"
msgstr "Name für diesen Anwenderzugang"
@@ -4492,19 +4517,24 @@ msgid "Your IP number (%s) is wrong! You need an IP in range (xxx.xxx.xxx.xxx/xx
msgstr "Ihr IP Number (%s) ist falsch! Sie benötigen ein IP mit Bereich (xxx.xxx.xxx.xxx/xx)"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:457
+#: ../lib/XXV/MODULES/USER.pm:458
msgid "Level for this account"
msgstr "Berechtigungen für diesen Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:477
+#: ../lib/XXV/MODULES/USER.pm:478
msgid "Deny class of commands"
msgstr "Verweigere Gruppierung von Kommandos"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:500
-msgid "Preferences for this User: ModName::Param=value, "
-msgstr "Präferenzen für diesen Benutzer: ModName::Param=value, "
+#: ../lib/XXV/MODULES/USER.pm:499
+msgid "None own settings"
+msgstr "Keine eigenen Einstellungen"
+
+#--------------------
+#: ../lib/XXV/MODULES/USER.pm:503
+msgid "Preferences selected by user own settings"
+msgstr "Einstellung, die der Benutzer gewählt hat"
#--------------------
#: ../lib/XXV/MODULES/USER.pm:51
@@ -4512,52 +4542,57 @@ msgid "IP addresses without user authentification"
msgstr "IP Adressen ohne Benutzer-Authentifizierung"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:510
+#: ../lib/XXV/MODULES/USER.pm:514
+msgid "Overwrite preferences for this user: ModName::Param=value, "
+msgstr "Überschreiben der Einstellung für diesen Benutzer: ModName::Param=value"
+
+#--------------------
+#: ../lib/XXV/MODULES/USER.pm:524
msgid "The parameter '%s' in module '%s' does not exist!"
msgstr "Der Parameter '%s' in Modul '%s' existiert nicht!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:518
+#: ../lib/XXV/MODULES/USER.pm:532
msgid "Maximum permitted value for lifetime with timers"
msgstr "Maximal erlaubter Wert für Lebenszeit bei Timern"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:524 ../lib/XXV/MODULES/USER.pm:536
+#: ../lib/XXV/MODULES/USER.pm:538 ../lib/XXV/MODULES/USER.pm:550
msgid "This value is not an integer or not between 0 and 100"
msgstr "Dieser Wert ist keine Zahl oder liegt nicht zwischen 0 und 100"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:530
+#: ../lib/XXV/MODULES/USER.pm:544
msgid "Maximum permitted value for priority with timers"
msgstr "Maximal erlaubter Wert für Priorität bei Timern"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:544
+#: ../lib/XXV/MODULES/USER.pm:558
msgid "Edit user account"
msgstr "Bearbeiten des Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:545 ../lib/XXV/MODULES/USER.pm:73
+#: ../lib/XXV/MODULES/USER.pm:559 ../lib/XXV/MODULES/USER.pm:73
msgid "Create new user account"
msgstr "Erzeugt einen neuen Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:572
+#: ../lib/XXV/MODULES/USER.pm:587
msgid "No user account defined for deletion! Please use udelete 'uid'."
msgstr "Keine ID eines Anwenderzuganges zum Löschen definiert! Bitte verwende udelete 'uid'"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:577
+#: ../lib/XXV/MODULES/USER.pm:592
msgid "User account %s deleted."
msgstr "Anwenderzugang %s wurde gelöscht"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:600
+#: ../lib/XXV/MODULES/USER.pm:615
msgid "Level"
msgstr "Ebene"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:602
+#: ../lib/XXV/MODULES/USER.pm:617
msgid "User preferences"
msgstr "Anwendereinstellungen"
@@ -4572,17 +4607,17 @@ msgid "Delete user account 'uid'"
msgstr "Lösche eine Anwenderzugang 'uid'"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:810
+#: ../lib/XXV/MODULES/USER.pm:826
msgid "Sorry, but the module %s is inactive! Enable it with %s:Preferences:active = y"
msgstr "Entschuldigung, aber das Modul %s ist inaktiv! Aktiviere es mit %s:Preferences:active = y"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:818
+#: ../lib/XXV/MODULES/USER.pm:834
msgid "You are not authorized for this function!"
msgstr "Sie sind nicht berechtigt, diese Funktion auszuführen!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:825
+#: ../lib/XXV/MODULES/USER.pm:841
msgid "Sorry, couldn't understand command '%s'!\n"
msgstr "Entschuldigung, der Befehl '%s' konnte nicht verstanden werden!\n"
@@ -5026,7 +5061,7 @@ msgid "Password for Jabber account"
msgstr "Passwort des Jabberzuganges"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/JABBER.pm:280
+#: ../lib/XXV/OUTPUT/NEWS/JABBER.pm:281
msgid "The module NEWS::JABBER is not active!"
msgstr "Das Modul NEWS::JABBER ist nicht aktiv!"
@@ -5056,22 +5091,22 @@ msgid "This NEWS module generate mails for news."
msgstr "Dieses Nachrichten Modul erzeugen Mails für Nachrichten."
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:245
+#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:250
msgid "News from your XXV System!"
msgstr "Meldungen von XXV System!"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:315
+#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:320
msgid "A mail with the following content has been sent to your mail account!"
msgstr "Eine Mail mit dem folgenden Inhalt, wurde an Ihrem Mailaccount gesendet!"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:319
+#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:324
msgid "Mail with the following content could'nt sent to your mail account!"
msgstr "Mail mit folgenden Inhalt erstellt, konnte aber nicht an den Mailaccount übermittelt werden!"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:332
+#: ../lib/XXV/OUTPUT/NEWS/MAIL.pm:337
msgid "The module NEWS::Mail is not active!"
msgstr "Das Modul NEWS::Mail ist nicht aktiv!"
@@ -5096,27 +5131,27 @@ msgid "SMTP mail server host name"
msgstr "Hostname des SMTP Mail-Server"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:158
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:159
msgid "XXV RSS 1.0"
msgstr "XXV RSS 1.0"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:160 ../lib/XXV/OUTPUT/NEWS/RSS.pm:183
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:161 ../lib/XXV/OUTPUT/NEWS/RSS.pm:186
msgid "Messages from your VDR/XXV"
msgstr "Meldungen von VDR/XXV"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:163
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:164
msgid "XXV messages"
msgstr "XXV Meldungen"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:181
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:184
msgid "XXV RSS 2.0"
msgstr "XXV RSS 2.0"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:210
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:213
msgid "The module NEWS::RSS is not active!"
msgstr "Das Modul NEWS::RSS ist nicht aktiv!"
diff --git a/locale/de/LC_MESSAGES/xxv.mo b/locale/de/LC_MESSAGES/xxv.mo
index c1be9f1..95db76c 100644
--- a/locale/de/LC_MESSAGES/xxv.mo
+++ b/locale/de/LC_MESSAGES/xxv.mo
Binary files differ