summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2008-11-24 16:39:09 +0000
committerAndreas Brachold <vdr07@deltab.de>2008-11-24 16:39:09 +0000
commit8c42985fd234e2a993b3f01416941f4b371d1a92 (patch)
tree917e47097785386fa27a0c29f6ab8f83a950b872
parentffb81caa20a1dbede72f8a45299af87f8ab049e2 (diff)
downloadxxv-8c42985fd234e2a993b3f01416941f4b371d1a92.tar.gz
xxv-8c42985fd234e2a993b3f01416941f4b371d1a92.tar.bz2
* Add Data::COW (Copy on write handling for user own config profile)
* USER: Reimplement user own config profiles * MEDIALIB: Remove fix number of columns, use now floating layout * SVDRP: Add status message * xxvd: Change password failed, on none HTML-Consoles * AUTOTIMER: remove astatus (wrong callback) * XMLTV: fix import, add multi recorder capability * REPORT: clean up some routines * STATUS: remove usage of /bin/wc, use native perl code * CHANNELS: Fix hang at read channels, if recorder offline * TELNET: remove 'quit' command do same like 'exit' * RECORDS: clone database handle for preview image generation * TIMERS: add more parameter check * xxvd: disable mysql_enable_utf8
-rwxr-xr-xbin/xxvd7
-rw-r--r--html/help.tmpl4
-rw-r--r--html/mldisplay.tmpl16
-rw-r--r--html/mllistmedias.tmpl10
-rw-r--r--html/report.tmpl9
-rw-r--r--lib/Data/COW.pm332
-rw-r--r--lib/XXV/MODULES/AUTOTIMER.pm22
-rw-r--r--lib/XXV/MODULES/CHANNELS.pm12
-rw-r--r--lib/XXV/MODULES/CHRONICLE.pm5
-rw-r--r--lib/XXV/MODULES/CONFIG.pm12
-rw-r--r--lib/XXV/MODULES/EPG.pm25
-rw-r--r--lib/XXV/MODULES/EVENTS.pm3
-rw-r--r--lib/XXV/MODULES/GRAB.pm1
-rw-r--r--lib/XXV/MODULES/HTTPD.pm69
-rw-r--r--lib/XXV/MODULES/KEYWORDS.pm3
-rw-r--r--lib/XXV/MODULES/LOGREAD.pm1
-rw-r--r--lib/XXV/MODULES/MEDIALIB.pm59
-rw-r--r--lib/XXV/MODULES/MOVETIMER.pm9
-rw-r--r--lib/XXV/MODULES/MUSIC.pm12
-rw-r--r--lib/XXV/MODULES/RECORDS.pm39
-rw-r--r--lib/XXV/MODULES/REMOTE.pm5
-rw-r--r--lib/XXV/MODULES/REPORT.pm5
-rw-r--r--lib/XXV/MODULES/ROBOT.pm25
-rw-r--r--lib/XXV/MODULES/SHARE.pm1
-rw-r--r--lib/XXV/MODULES/STATUS.pm33
-rw-r--r--lib/XXV/MODULES/STREAM.pm2
-rw-r--r--lib/XXV/MODULES/SVDRP.pm85
-rw-r--r--lib/XXV/MODULES/TELNET.pm16
-rw-r--r--lib/XXV/MODULES/TIMERS.pm81
-rw-r--r--lib/XXV/MODULES/USER.pm417
-rw-r--r--lib/XXV/MODULES/VTX.pm11
-rw-r--r--lib/XXV/MODULES/XMLTV.pm144
-rw-r--r--lib/XXV/OUTPUT/Console.pm4
-rw-r--r--lib/XXV/OUTPUT/Html.pm39
-rw-r--r--lib/XXV/OUTPUT/NEWS/JABBER.pm3
-rw-r--r--lib/XXV/OUTPUT/Wml.pm7
-rw-r--r--locale/de.po1630
-rw-r--r--locale/de/LC_MESSAGES/xxv.mobin80738 -> 80662 bytes
38 files changed, 1875 insertions, 1283 deletions
diff --git a/bin/xxvd b/bin/xxvd
index 2d58ff8..dc8e52a 100755
--- a/bin/xxvd
+++ b/bin/xxvd
@@ -324,7 +324,7 @@ sub getDbh {
my $dbh = DBI->connect($dsn, $usr, $pwd,{
PrintError => 1,
AutoCommit => 1,
- mysql_enable_utf8 => ($charset =~ m/UTF-8/ ? 1 : 0),
+# mysql_enable_utf8 => (($charset =~ m/UTF-8/) ? 1 : 0),
mysql_auto_reconnect => 1
});
@@ -452,6 +452,7 @@ sub quit {
sub docu {
# ------------------
my $console = shift;
+ my $config = shift;
my $name = shift || 0;
my $HTTPD = getModule("HTTPD");
@@ -491,6 +492,7 @@ sub docu {
sub more {
# ------------------
my $console = shift;
+ my $config = shift;
my $name = shift || return error('No text file defined!');
my $param = shift || {};
@@ -692,6 +694,9 @@ sub module {
required => gettext("This is required!"),
check => sub{
my $value = shift || return;
+
+ return $value unless(ref $value eq 'ARRAY');
+
# If no password given the take the old password as default
if($value->[0] and $value->[0] ne $value->[1]) {
return undef, gettext("The fields with the 1st and the 2nd password must match!");
diff --git a/html/help.tmpl b/html/help.tmpl
index d7a8c72..3889c07 100644
--- a/html/help.tmpl
+++ b/html/help.tmpl
@@ -111,8 +111,8 @@ logger.add(new WebFXTreeItem("<?% gettext("Syslog") %?>", "?cmd=logger&data=s
var admin = new WebFXTreeItem("<?% gettext("Administration") %?>",0,tree);
<?% IF allow('vl') %?>admin.add(new WebFXTreeItem("<?% gettext("Video disk recorder",12) %?>", "?cmd=vl"));<?% END %?>
<?% IF allow('cl') %?>admin.add(new WebFXTreeItem("<?% gettext("Channels",12) %?>", "?cmd=cl"));<?% END %?>
-<?% IF allow('ul') %?>admin.add(new WebFXTreeItem("<?% gettext("User") %?>","?cmd=ul"));
-<?% ELSIF allow('uprefs') %?>admin.add(new WebFXTreeItem("<?% gettext("Personality") %?>","?cmd=uprefs"));<?% END %?>
+<?% IF allow('ul') %?>admin.add(new WebFXTreeItem("<?% gettext("User") %?>","?cmd=ul"));<?% END %?>
+<?% IF allow('uprefs') %?>admin.add(new WebFXTreeItem("<?% gettext("Own settings") %?>","?cmd=uprefs"));<?% END %?>
<?% IF allow('rel') %?>admin.add(new WebFXTreeItem("<?% gettext("Reload") %?>","?cmd=rel"));<?% END %?>
<?% END %?>
diff --git a/html/mldisplay.tmpl b/html/mldisplay.tmpl
index 01a125e..c2680f7 100644
--- a/html/mldisplay.tmpl
+++ b/html/mldisplay.tmpl
@@ -207,21 +207,17 @@
<tr>
<td colspan="5">
<b><?% gettext("Actors") %?>:</b><br>
- <table width="100%">
+ <div>
<?% WHILE param.actors.size %?>
- <tr>
- <?% FOREACH [ 1 .. param.actorcols ] %?>
<?% actor = param.actors.shift %?>
- <td width="<?% (100 - (100 mod param.actorcols)) / param.actorcols %?>%" valign="top">
+ <div style="float:left;height:60px;width:160px;overflow:hidden">
<?% IF actor.0 %?>
- <img src='?cmd=mlcache&__source=<?% actor.1 %?>' alt="" border="0" width="44" height="60" />
- &nbsp;<a href="?cmd=mlsearch&__search&__selfields=actors&__searchitem=<?% actor.0 %?>"><?% actor.0 %?></a>
+ <img style="float:left;margin-right:10px" src='?cmd=mlcache&__source=<?% actor.1 %?>' alt="" border="0" width="44" height="60" />
+ <a href="?cmd=mlsearch&__search&__selfields=actors&__searchitem=<?% actor.0 %?>"><?% actor.0 %?></a>
<?% END %?>
- </td>
- <?% END %?>
- </tr>
+ </div>
<?% END %?>
- </table>
+ </div>
</td>
</tr>
<?% END %?>
diff --git a/html/mllistmedias.tmpl b/html/mllistmedias.tmpl
index e85f8be..123d2ff 100644
--- a/html/mllistmedias.tmpl
+++ b/html/mllistmedias.tmpl
@@ -1,12 +1,9 @@
<?% IF data.size %?>
<!-- TableTemplate -->
-<table width="100%">
<?% WHILE data.size %?>
-<tr>
- <?% FOREACH [ 1 .. param.cols ] %?>
<?% fields = data.shift %?>
- <td width="<?% (100 - (100 mod param.cols)) / param.cols %?>%">
<?% IF fields.0 %?>
+ <div style="float:left;height:150px;width:325px;overflow:hidden">
<table width="100%">
<tr>
<td>
@@ -46,10 +43,7 @@
</td>
</tr>
</table>
+ </div>
<?% END %?>
- </td>
<?% END %?>
-</tr>
<?% END %?>
-</table>
-<?% END %?> \ No newline at end of file
diff --git a/html/report.tmpl b/html/report.tmpl
index 974148b..8b5c0b0 100644
--- a/html/report.tmpl
+++ b/html/report.tmpl
@@ -7,6 +7,10 @@
link = '?cmd=rdisplay&data=';
ELSIF name == 'AUTOTIMER';
link = '?cmd=tedit&data=';
+ ELSIF name == 'SVDRP';
+ link = '?cmd=vdredit&data=';
+ ELSE;
+ link = '';
END;
%?>
@@ -32,7 +36,10 @@
<?% FOREACH field = zeile %?>
<?% c = c + 1 %?>
<?% NEXT IF fields.$c.match('^__') %?>
- <td><a href='<?% link %?><?% zeile.first %?>'><?% field %?></a></td>
+ <td><?% IF link %?><a href="<?% link %?><?% zeile.first %?>"><?% END %?>
+ <?% field %?>
+ <?% IF link %?></a><?% END %?>
+ </td>
<?% END %?>
</tr>
<?% END %?>
diff --git a/lib/Data/COW.pm b/lib/Data/COW.pm
new file mode 100644
index 0000000..55ae9b4
--- /dev/null
+++ b/lib/Data/COW.pm
@@ -0,0 +1,332 @@
+package Data::COW;
+
+use 5.006001;
+use strict;
+no warnings;
+
+use Exporter;
+use Scalar::Util qw<reftype blessed>;
+use overload (); # we're not overloading anything, but we'd like to
+ # check if they're already implementing a value type
+
+use base 'Exporter';
+
+our @EXPORT = qw<make_cow_ref>;
+
+our $VERSION = '0.02';
+
+sub tied_any {
+ my ($ref) = @_;
+ if (ref $ref) {
+ if (reftype($ref) eq 'SCALAR') {
+ tied $$ref;
+ }
+ elsif (reftype($ref) eq 'ARRAY') {
+ tied @$ref;
+ }
+ elsif (reftype($ref) eq 'HASH') {
+ tied %$ref;
+ }
+ }
+
+}
+
+sub cow_object {
+ my ($ref) = @_;
+ my $tied = tied_any $ref;
+ $tied && $tied->isa('Data::COW') && $tied;
+}
+
+sub make_cow_ref {
+ my ($ref, $parent, $key) = @_;
+
+ make_cow_ref_nocheck($ref, $parent, $key);
+}
+
+sub make_temp_cow_ref {
+ my ($ref, $parent, $key) = @_;
+
+ if (my $obj = cow_object $ref) {
+ if ($obj->{parent} == $parent) {
+ $ref;
+ }
+ else {
+ make_cow_ref_nocheck($ref, $parent, $key);
+ }
+ }
+ else {
+ make_cow_ref_nocheck($ref, $parent, $key);
+ }
+}
+
+sub make_cow_ref_nocheck {
+ my ($ref, $parent, $key) = @_;
+
+ if (ref $ref &&
+ # check if they already think they're a value type
+ !(overload::Overloaded($ref) && overload::Method($ref, '=')))
+ {
+ my $ret;
+ if (reftype($ref) eq 'SCALAR') {
+ tie my $it => 'Data::COW::Scalar', $ref, $parent, $key;
+ $ret = \$it;
+ }
+ elsif (reftype($ref) eq 'ARRAY') {
+ tie my @it => 'Data::COW::Array', $ref, $parent, $key;
+ $ret = \@it;
+ }
+ elsif (reftype($ref) eq 'HASH') {
+ tie my %it => 'Data::COW::Hash', $ref, $parent, $key;
+ $ret = \%it;
+ }
+ else {
+ # code and glob are not aggregates that we can take control
+ # of, so punt and just return them like anything else
+ return $ref;
+ }
+
+ if (blessed($ref)) {
+ bless $ret => blessed($ref);
+ }
+
+ return $ret;
+ }
+ else {
+ return $ref;
+ }
+}
+
+sub clone_using {
+ my ($self, $copier) = @_;
+
+ return unless $self->{const};
+ my $old = $self->{ref};
+ my $new = $copier->($old);
+
+ if (blessed $old) {
+ bless $new => blessed $old;
+ }
+ if ($self->{parent}) {
+ my $cnew = make_cow_ref $new, $self->{parent}, undef;
+ tied_any($cnew)->{const} = 0;
+ $self->{parent}->clone($self->{key} => $cnew);
+ }
+ $self->{ref} = $new;
+ $self->{const} = 0;
+}
+
+package Data::COW::Scalar;
+
+use Tie::Scalar;
+use base 'Tie::Scalar';
+use base 'Data::COW';
+
+sub TIESCALAR {
+ my ($class, $ref, $parent, $key) = @_;
+ bless {
+ ref => $ref,
+ parent => $parent,
+ key => $key,
+ const => 1,
+ } => ref $class || $class;
+}
+
+sub clone {
+ my ($self, $key, $value) = @_;
+
+ $self->clone_using(sub { my $v = ${$_[0]}; \$v });
+ ${$self->{ref}} = $value if defined $key;
+}
+
+sub FETCH {
+ my ($self) = @_;
+ Data::COW::make_temp_cow_ref(${$self->{ref}}, $self, 1);
+}
+
+sub STORE {
+ my ($self, $value) = @_;
+ $self->clone(1 => $value);
+ $value;
+}
+
+package Data::COW::Array;
+
+use Tie::Array;
+use base 'Tie::Array';
+use base 'Data::COW';
+
+sub TIEARRAY {
+ my ($class, $ref, $parent, $key) = @_;
+ bless {
+ ref => $ref,
+ parent => $parent,
+ key => $key,
+ const => 1,
+ } => ref $class || $class;
+}
+
+sub clone {
+ my ($self, $key, $value) = @_;
+ $self->clone_using(sub { [ @{$_[0]} ] });
+ $self->{ref}[$key] = $value if defined $key;
+}
+
+sub FETCH {
+ my ($self, $key) = @_;
+ Data::COW::make_temp_cow_ref($self->{ref}[$key], $self, $key);
+}
+
+sub STORE {
+ my ($self, $key, $value) = @_;
+ $self->clone($key => $value);
+ $value;
+}
+
+sub FETCHSIZE {
+ my ($self) = @_;
+ scalar @{$self->{ref}};
+}
+
+sub STORESIZE {
+ my ($self, $size) = @_;
+ $self->clone;
+ $#{$self->{ref}} = $size-1;
+}
+
+sub DELETE {
+ my ($self, $key) = @_;
+ $self->clone;
+ delete $self->{ref}[$key];
+}
+
+sub EXISTS {
+ my ($self, $key) = @_;
+ exists $self->{ref}[$key];
+}
+
+package Data::COW::Hash;
+
+use Tie::Hash;
+use base 'Tie::Hash';
+use base 'Data::COW';
+
+sub TIEHASH {
+ my ($class, $ref, $parent, $key) = @_;
+ bless {
+ ref => $ref,
+ parent => $parent,
+ key => $key,
+ const => 1,
+ } => ref $class || $class;
+}
+
+sub clone {
+ my ($self, $key, $value) = @_;
+ $self->clone_using(sub {
+ my $ret = { %{$_[0]} };
+ $ret;
+ });
+ $self->{ref}{$key} = $value if defined $key;
+}
+
+sub FETCH {
+ my ($self, $key) = @_;
+ Data::COW::make_temp_cow_ref($self->{ref}{$key}, $self, $key);
+}
+
+sub STORE {
+ my ($self, $key, $value) = @_;
+ $self->clone($key => $value);
+ $value;
+}
+
+sub EXISTS {
+ my ($self, $key) = @_;
+ exists $self->{ref}{$key};
+}
+
+sub DELETE {
+ my ($self, $key) = @_;
+ $self->clone;
+ delete $self->{ref}{$key};
+}
+
+sub CLEAR {
+ my ($self) = @_;
+ $self->clone_using(sub { {} });
+ ();
+}
+
+sub FIRSTKEY {
+ my ($self) = @_;
+ my $a = keys %{$self->{ref}}; # reset iterator
+ each %{$self->{ref}};
+}
+
+sub NEXTKEY {
+ my ($self) = @_;
+ each %{$self->{ref}};
+}
+
+sub SCALAR {
+ my ($self) = @_;
+ scalar %{$self->{ref}};
+}
+
+1;
+
+=head1 NAME
+
+Data::COW - clone deep data structures copy-on-write
+
+=head1 SYNOPSIS
+
+ use Data::COW;
+
+ my $array = [ 0, 1, 2 ];
+ my $copy = make_cow_ref $array;
+
+ push @$array, 3;
+ # $copy->[3] is 3
+ push @$copy, 4;
+ # $array->[4] is not defined (and doesn't even exist)
+ # $copy is a real copy now
+ push @$array, 5;
+ # $copy is unaffected
+
+=head1 DESCRIPTION
+
+Data::COW makes copies of data structures copy-on-write, or "lazily".
+So if you have a data structure that takes up ten megs of memory, it
+doesn't take ten megs to copy it. Even if you change part of it,
+Data::COW only copies the parts that need to be copied in order to
+reflect the change.
+
+Data::COW exports one function: C<make_cow_ref>. This takes a reference
+and returns a copy-on-write reference to it. If you don't want this
+in your namespace, and you want to use it as C<Data::COW::make_cow_ref>,
+use the module like this:
+
+ use Data::COW ();
+
+Data::COW won't be able to copy filehandles or glob references. But how
+do you change those anyway? It's also probably a bad idea to give it
+objects that refer to XS internal state without providing a value type
+interface. Also, don't use stringified references from this data
+structure: they're different each time you access them!
+
+=head1 SEE ALSO
+
+L<Clone>
+
+=head1 AUTHOR
+
+Luke Palmer <luke@luqui.org>
+
+=head1 COPYRIGHT
+
+ Copyright (C) 2005 by Luke Palmer
+
+ This library is free software; you can redistribute it and/or modify it under
+ the same terms as Perl itself, either Perl version 5.8.3 or, at your option,
+ any later version of Perl 5 you may have available.
diff --git a/lib/XXV/MODULES/AUTOTIMER.pm b/lib/XXV/MODULES/AUTOTIMER.pm
index 01b89bd..f0da931 100644
--- a/lib/XXV/MODULES/AUTOTIMER.pm
+++ b/lib/XXV/MODULES/AUTOTIMER.pm
@@ -44,12 +44,6 @@ sub module {
},
},
Commands => {
- astatus => {
- description => gettext('Display status of autotimers.'),
- short => 'as',
- callback => sub{ $obj->status(@_) },
- DenyClass => 'alist',
- },
anew => {
description => gettext("Create new autotimer"),
short => 'an',
@@ -155,7 +149,6 @@ sub module {
# ------------------
sub status {
my $obj = shift || return error('No object defined!');
- my $console = shift;
my $lastReportTime = shift || 0;
my %f = (
@@ -329,7 +322,8 @@ sub _init {
# ------------------
sub autotimer {
my $obj = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $autotimerid = shift;
my $waiter;
@@ -575,7 +569,7 @@ sub _autotimerLookup {
sleep 1;
- $modT->readData();
+ $modT->_readData();
return (\@{$log},$C,$M);
}
@@ -587,10 +581,11 @@ sub _autotimerLookup {
sub autotimerCreate {
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || 0;
my $data = shift || 0;
- $obj->autotimerEdit($console, $timerid, $data);
+ $obj->autotimerEdit($console, $config, $timerid, $data);
}
# ------------------
@@ -601,6 +596,7 @@ sub autotimerCreate {
sub autotimerEdit {
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || 0;
my $data = shift || 0;
@@ -1011,7 +1007,7 @@ You can also fine tune your search :
$data->{Search},
( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" )
);
- $obj->autotimer($console, $data->{Id});
+ $obj->autotimer($console, $config, $data->{Id});
}
return 1;
}
@@ -1024,6 +1020,7 @@ You can also fine tune your search :
sub autotimerDelete {
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || return $console->err(gettext("No autotimer defined for deletion! Please use adelete 'aid'!")); # If timerid the edittimer
my @timers = reverse sort{ $a <=> $b } split(/[^0-9]/, $timerid);
@@ -1054,6 +1051,7 @@ sub autotimerDelete {
sub autotimerToggle {
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || return $console->err(gettext("No autotimer defined to toggle! Please use atoggle 'aid'!"));
my @timers = reverse sort{ $a <=> $b } split(/[^0-9]/, $timerid);
@@ -1122,6 +1120,7 @@ sub autotimerToggle {
sub list {
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift || '';
my $params = shift;
@@ -1598,6 +1597,7 @@ sub suggest {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $params = shift;
diff --git a/lib/XXV/MODULES/CHANNELS.pm b/lib/XXV/MODULES/CHANNELS.pm
index b8d55de..de518a2 100644
--- a/lib/XXV/MODULES/CHANNELS.pm
+++ b/lib/XXV/MODULES/CHANNELS.pm
@@ -116,7 +116,6 @@ sub module {
sub status {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
my $lastReportTime = shift || 0;
my $sql = "SELECT SQL_CACHE count(*) from CHANNELS";
@@ -391,7 +390,8 @@ sub _insertGrp {
sub readData {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
if($self->_readData($console)) {
$console->redirect({url => '?cmd=clist', wait => 1})
@@ -431,7 +431,7 @@ sub _readData {
or return error sprintf("Couldn't execute query: %s.",$dsth->errstr);
my $msg = [ sprintf(gettext("No channels on '%s' available!"),$self->{svdrp}->hostname($vid)), $error ];
- $console->err($msg);
+ $console->err($msg) if(defined $console);
next;
}
@@ -593,6 +593,7 @@ sub list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || '';
my $params = shift;
@@ -1023,6 +1024,7 @@ sub newChannel {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $default = shift || 0;
@@ -1034,6 +1036,7 @@ sub editChannel {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $cid = shift || 0; # If channelid then edit channel
my $data = shift || 0; # Data for defaults
@@ -1336,7 +1339,8 @@ sub saveChannel {
sub deleteChannel {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $channelid = shift || return con_err($console, gettext("No channel defined for deletion! Please use cdelete 'pos'!"));
my $answer = shift || 0;
diff --git a/lib/XXV/MODULES/CHRONICLE.pm b/lib/XXV/MODULES/CHRONICLE.pm
index 79d8b8e..d3aceed 100644
--- a/lib/XXV/MODULES/CHRONICLE.pm
+++ b/lib/XXV/MODULES/CHRONICLE.pm
@@ -166,6 +166,7 @@ sub list {
# ------------------
my $self = shift;
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
my $params = shift;
@@ -244,7 +245,8 @@ sub search {
# ------------------
my $self = shift;
my $console = shift || return error('No console defined!');
- my $text = shift || return $console->err(gettext("No 'string' to search for! Please use chrsearch 'text'."));
+ my $config = shift || return error('No config defined!');
+ my $text = shift || return $console->err(gettext("No 'string' to search defined! Please use chrsearch 'text'."));
my $params = shift;
my $query = buildsearch("title",$text);
@@ -326,6 +328,7 @@ sub delete {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $items = shift || return $console->err(gettext("No ID to delete! Please use chrdelete 'id'"));
my @ids = reverse sort{ $a <=> $b } split(/[^0-9]/, $items);
diff --git a/lib/XXV/MODULES/CONFIG.pm b/lib/XXV/MODULES/CONFIG.pm
index 426be49..0f36a8f 100644
--- a/lib/XXV/MODULES/CONFIG.pm
+++ b/lib/XXV/MODULES/CONFIG.pm
@@ -43,7 +43,7 @@ sub module {
description => gettext("Restart all modules."),
short => 'rel',
callback => sub{
- my ($console, $l) = @_;
+ my ($console, $config, $l) = @_;
$Module::Reload::Debug = CORE::int(($Tools::VERBOSE+.5)/2);
# my %Status = %Module::Reload->Stat;
my $cnt = Module::Reload->check();
@@ -99,14 +99,15 @@ sub new {
}
# ------------------
-sub menu {
+sub _menu {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift;
my $sector = shift || 0;
my $ret = {};
- $ret->{title} = gettext("Settings for XXV");
+ $ret->{title} = gettext("Global settings");
$ret->{highlight} = $sector;
my $mods = main::getModules;
@@ -129,10 +130,11 @@ sub edit {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift;
my $sector = shift || 0;
my $data = shift || 0;
- $obj->menu( $console, $sector )
+ $obj->_menu( $console, $config, $sector )
if($console->{TYP} eq 'HTML' or ($console->{TYP} ne 'HTML' and not $sector));
return unless $sector;
@@ -204,6 +206,7 @@ sub get {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $modname = shift || 0;
return con_err($console, gettext('Need a name of the module to display the configuration!'))
@@ -292,6 +295,7 @@ sub usage {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift;
my $modulename = shift || 0;
my $hint = shift || '';
my $user = shift || $console->{USER};
diff --git a/lib/XXV/MODULES/EPG.pm b/lib/XXV/MODULES/EPG.pm
index 352dfaf..c36b8ae 100644
--- a/lib/XXV/MODULES/EPG.pm
+++ b/lib/XXV/MODULES/EPG.pm
@@ -38,12 +38,14 @@ sub module {
default => '12:00,18:00,20:15,22:00',
type => 'string',
required => gettext('This is required!'),
+ level => 'guest'
},
timeframe => {
description => gettext("How much hours to display in schema"),
default => 2,
type => 'integer',
required => gettext('This is required!'),
+ level => 'guest'
},
},
Commands => {
@@ -126,7 +128,6 @@ sub module {
sub status {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
my $lastReportTime = shift || 0;
my $total = 0;
@@ -281,6 +282,7 @@ sub startReadEpgData {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
debug sprintf('The read on epg data start now!');
@@ -641,6 +643,7 @@ sub search {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
my $params = shift;
@@ -791,6 +794,7 @@ sub program {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $cid = shift;
unless($cid) {
my $c = $self->{dbh}->selectrow_arrayref("SELECT SQL_CACHE hash from CHANNELS order by vid, pos limit 1");
@@ -913,6 +917,7 @@ sub display {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $eventid = shift;
unless($eventid) {
@@ -1002,6 +1007,7 @@ sub runningNext {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
my $param = shift || {};
@@ -1158,7 +1164,7 @@ ORDER BY c.vid, c.pos
$console->table($erg,
{
- periods => $self->{periods},
+ periods => $config->{periods},
cgroups => $cgroups,
channelgroup => $cgrp,
rows => $rows
@@ -1171,6 +1177,7 @@ sub runningNow {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $zeit = shift || time;
my $param = shift || {};
@@ -1307,7 +1314,7 @@ ORDER BY c.vid, c.pos
$console->table($erg,
{
zeit => $zeit,
- periods => $self->{periods},
+ periods => $config->{periods},
cgroups => $cgroups,
channelgroup => $cgrp,
rows => $rows
@@ -1320,6 +1327,7 @@ sub NowOnChannel {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $channel = shift;
my $vid = shift || $self->{svdrp}->primary_hosts();
@@ -1403,6 +1411,7 @@ sub schema {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $zeit = shift || time;
my $param = shift || {};
@@ -1417,11 +1426,11 @@ sub schema {
$zeit = UnixDate(ParseDate($zeit),"%s") || time;
}
- $zeit += 86400 if($zeit < time - ($self->{timeframe} * 3600));
+ $zeit += 86400 if($zeit < time - ($config->{timeframe} * 3600));
$zeit++;
my $zeitvon = $self->toFullHour($zeit);
- my $zeitbis = $zeitvon + ($self->{timeframe}*3600);
+ my $zeitbis = $zeitvon + ($config->{timeframe}*3600);
push(@$term, $zeitvon);
push(@$term, $zeitbis);
@@ -1523,7 +1532,7 @@ WHERE
{
zeitvon => $zeitvon,
zeitbis => $zeitbis,
- periods => $self->{periods},
+ periods => $config->{periods},
cgroups => $cgroups,
channelgroup => $cgrp
}
@@ -1535,6 +1544,7 @@ sub checkOnTimer {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $eid = shift || return con_err($console, gettext('No event id defined!'));
my $sql = qq|
@@ -1576,6 +1586,7 @@ sub getDescription {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $eid = shift || 0;
my $event = $self->getId($eid,"description");
@@ -1624,6 +1635,7 @@ sub suggest {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $params = shift;
@@ -1682,6 +1694,7 @@ sub image {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
return $console->err(gettext("Sorry, get image is'nt supported"))
diff --git a/lib/XXV/MODULES/EVENTS.pm b/lib/XXV/MODULES/EVENTS.pm
index f3ac7e1..cd6345b 100644
--- a/lib/XXV/MODULES/EVENTS.pm
+++ b/lib/XXV/MODULES/EVENTS.pm
@@ -341,6 +341,7 @@ sub list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || 1;
my %f = (
@@ -388,6 +389,8 @@ sub request {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
+
# To this time you can set on
# cmd=request&data=rss&ver=2 or
# cmd=request&data=mail&__test=1
diff --git a/lib/XXV/MODULES/GRAB.pm b/lib/XXV/MODULES/GRAB.pm
index 7bb8226..8895535 100644
--- a/lib/XXV/MODULES/GRAB.pm
+++ b/lib/XXV/MODULES/GRAB.pm
@@ -234,6 +234,7 @@ sub display {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
my $params = shift;
diff --git a/lib/XXV/MODULES/HTTPD.pm b/lib/XXV/MODULES/HTTPD.pm
index 8887290..b587f20 100644
--- a/lib/XXV/MODULES/HTTPD.pm
+++ b/lib/XXV/MODULES/HTTPD.pm
@@ -85,6 +85,7 @@ sub module {
type => 'list',
required => gettext('This is required!'),
choices => sub{ return $self->findskins(); },
+ level => 'guest'
},
StartPage => {
description => gettext('Startup screen'),
@@ -95,7 +96,8 @@ sub module {
my $erg = $self->_get_startpage_as_array();
map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg;
return $erg;
- }
+ },
+ level => 'guest'
},
Debug => {
description => gettext('Dump additional debugging information, required only for software development.'),
@@ -172,7 +174,7 @@ sub init {
LocalAddr => $self->{Interface},
Reuse => 1
) or return error("Couldn't create socket: $!");
-
+ binmode $socket, ":encoding(utf8)" if($self->{charset} eq 'UTF-8');
# install an initial watcher
Event->io(
fd => $socket,
@@ -223,8 +225,6 @@ sub communicator {
if(exists $self->{LOGOUT});
my $ip = getip($handle);
- my $htmlRootDir = sprintf('%s/%s', $self->{paths}->{HTMLDIR}, $self->{HtmlRoot});
- my $htmlDefDir = sprintf('%s/%s', $self->{paths}->{HTMLDIR}, 'default');
my $query = $data->{Query};
if($data->{Method} eq 'POST' && $data->{Post}) {
@@ -238,6 +238,7 @@ sub communicator {
my $cgi = CGI->new( $query );
my $console;
+ my $htmlRootDir;
if(my $outputtype = $cgi->param('ajax')) {
# Is a Ajax Request
$console = XXV::OUTPUT::Ajax->new(
@@ -253,31 +254,33 @@ sub communicator {
$console = XXV::OUTPUT::Html->new(
-handle => $handle,
-dbh => $self->{dbh},
- -htmdir => $htmlRootDir,
- -htmdef => $htmlDefDir,
+ -htmdir => $self->{paths}->{HTMLDIR},
-cgi => $cgi,
-mime => $mime,
-browser=> $data,
-paths => $self->{paths},
- -start => $self->{StartPage},
-debug => ($self->{Debug} eq 'y' ? 1 : 0),
-charset=> $self->{charset},
);
+ $htmlRootDir = $console->setSkin($self->{HtmlRoot}); # Set default skin
}
my $userMod = main::getModule('USER');
- if(ref $userMod and $userMod->{active} eq 'y') {
- $console->{USER} = $userMod->check($handle, $data->{username}, $data->{password});
- $console->login(gettext('You are not authorized to use this system!'))
- unless(exists $console->{USER}->{Level});
- }
-
- if(ref $userMod and
- ($userMod->{active} ne 'y'
- or exists $console->{USER}->{Level})) {
-
+ unless(ref $userMod) {
+ $self->ModulNotLoaded($console,'USER');
+ } else {
+ $console->{USER} = $userMod->check($handle, $data->{username}, $data->{password});
+ unless(exists $console->{USER}->{Level}) {
+ $console->login(gettext('You are not authorized to use this system!'));
+ } else {
$console->setCall('nothing');
- if(not $data->{Query} and
+ my $config = $console->{USER}->{config}->{'HTTPD'};
+
+ $htmlRootDir = $console->setSkin($config->{HtmlRoot})
+ if($htmlRootDir); # Set user skin on HTML console
+
+ if($htmlRootDir and
+ not $data->{Query} and
($data->{Request} eq '/' or -d sprintf('%s/%s', $htmlRootDir,$data->{Request}))) {
my $request = $htmlRootDir;
$request .= '/';
@@ -288,7 +291,7 @@ sub communicator {
$request =~ s/\/+/\//g;
# Send the first page (index.html)
if(-r sprintf('%sindex.tmpl', $request)) {
- $console->index;
+ $console->index($config->{StartPage});
} else {
$console->datei(sprintf('%sindex.html', $request));
}
@@ -299,7 +302,7 @@ sub communicator {
$request =~ s/\/\.\.//g;
$request =~ s/\/+/\//g;
if($request =~ /tempimages\//) {
- my $tmp = $userMod->userTmp;
+ my $tmp = $userMod->userTmp($console->{USER}->{Name});
$request =~ s/.*tempimages\//$tmp\//;
$console->datei($request, $typ);
} else {
@@ -308,9 +311,7 @@ sub communicator {
} else {
$self->handleInput($console, $cgi);
}
-
- } else {
- $self->ModulNotLoaded($console,'USER');
+ }
}
$console->footer() if($console->{inclFooter});
$console->printout();
@@ -461,7 +462,7 @@ sub handleInput {
# Test the command on exists, permissions and so on
my $u = main::getModule('USER');
if($u) {
- my ($cmdobj, $cmdname, $shorterr, $err) = $u->checkCommand($console, $ucmd);
+ my ($cmdobj, $cmdname, $cmdModule, $shorterr, $err) = $u->checkCommand($console, $ucmd);
$console->setCall($cmdname);
if($cmdobj and not $shorterr) {
@@ -469,11 +470,11 @@ sub handleInput {
$console->{nocache} = 1
if($cmdobj->{binary} eq 'nocache');
}
- $cmdobj->{callback}($console, $udata, $result );
+ $cmdobj->{callback}($console, $console->{USER}->{config}->{$cmdModule}, $udata, $result );
} elsif($shorterr eq 'noperm' or $shorterr eq 'noactive') {
$console->status403($err);
} else {
- $self->usage($console, undef, $err);
+ $self->_usage($console, undef, $err);
}
} else {
$self->ModulNotLoaded($console,'USER');
@@ -481,7 +482,7 @@ sub handleInput {
}
# ------------------
-sub usage {
+sub _usage {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
@@ -490,7 +491,7 @@ sub usage {
my $m = main::getModule('CONFIG');
if ($m){
- return $m->usage($console,$modulename,$hint);
+ return $m->usage($console,undef, $modulename,$hint);
} else {
$self->ModulNotLoaded($console,'CONFIG');
}
@@ -501,7 +502,6 @@ sub usage {
sub status {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift || return;
my $lastReportTime = shift || 0;
return {
@@ -555,10 +555,11 @@ sub findskins
# ------ unzip ------------
sub unzip {
my $self = shift || return error('No object defined!');
+ my $console = shift || return error('No console defined!');
my $file = shift || return error('No file defined!');
my $gz = gzopen($file, "rb")
- or return $self->msg(undef, sprintf(gettext("Could not open file '%s'! : %s"), $file, &gzerror ));
+ or return $console->msg(undef, sprintf(gettext("Could not open file '%s'! : %s"), $file, &gzerror ));
my $text;
while($gz->gzread(my $buffer) > 0) {
@@ -567,10 +568,9 @@ sub unzip {
$gz->gzclose();
my $u = main::getModule('USER');
- if($u) {
- my $tmpfile = sprintf('%s/gz_%d.tmp', $u->userTmp, time);
- return save_file($tmpfile, $text);
- }
+ return $self->ModulNotLoaded($console,'USER') unless(ref $u);
+ my $tmpfile = sprintf('%s/gz_%d.tmp', $u->userTmp($console->{USER}->{Name}), time);
+ return save_file($tmpfile, $text);
}
@@ -584,6 +584,7 @@ sub checkvalue {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || return error('No data defined!');
my @query = split(':',$data);
diff --git a/lib/XXV/MODULES/KEYWORDS.pm b/lib/XXV/MODULES/KEYWORDS.pm
index 27c16c8..fb51765 100644
--- a/lib/XXV/MODULES/KEYWORDS.pm
+++ b/lib/XXV/MODULES/KEYWORDS.pm
@@ -200,6 +200,7 @@ sub suggest {
my $self = shift || return error('No object defined!');
my $type = shift || return error('No type defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $params = shift;
@@ -280,6 +281,7 @@ sub timer_keywords {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift;
my $params = shift;
@@ -302,6 +304,7 @@ sub recording_keywords {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift;
my $params = shift;
diff --git a/lib/XXV/MODULES/LOGREAD.pm b/lib/XXV/MODULES/LOGREAD.pm
index a8862e5..214b202 100644
--- a/lib/XXV/MODULES/LOGREAD.pm
+++ b/lib/XXV/MODULES/LOGREAD.pm
@@ -101,6 +101,7 @@ sub logger {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $logname = shift || 'standard';
my $params = shift || {};
diff --git a/lib/XXV/MODULES/MEDIALIB.pm b/lib/XXV/MODULES/MEDIALIB.pm
index da41794..d219352 100644
--- a/lib/XXV/MODULES/MEDIALIB.pm
+++ b/lib/XXV/MODULES/MEDIALIB.pm
@@ -43,18 +43,6 @@ sub module {
type => 'dir',
required => gettext("This is required!"),
},
- listcols => {
- description => gettext('Number of columns in listview'),
- default => 4,
- type => 'integer',
- required => gettext('This is required!'),
- },
- actorcols => {
- description => gettext('Number of columns of actors in detailview'),
- default => 6,
- type => 'integer',
- required => gettext('This is required!'),
- },
deflanguage => {
description => gettext('Default media language'),
default => 'german',
@@ -294,7 +282,6 @@ sub _init {
# ------------------
sub status {
my $obj = shift || return error('No object defined!');
- my $console = shift;
my $sql = qq|
SELECT SQL_CACHE
@@ -315,10 +302,10 @@ sub researchMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || {};
-
if(ref $params eq 'HASH') {
my $medias;
@@ -344,10 +331,11 @@ sub createMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || 0;
- $obj->editMedia($console, 0, $params);
+ $obj->editMedia($console, $config, 0, $params);
}
# ------------------
@@ -355,6 +343,7 @@ sub copyMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || 0;
@@ -373,7 +362,7 @@ WHERE
delete $erg->{id};
$erg->{range} = $params->{range} if($params && $params->{range});
- $obj->editMedia($console, 0, $erg);
+ $obj->editMedia($console, $config, 0, $erg);
}
# ------------------
@@ -381,6 +370,7 @@ sub importMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || {};
@@ -437,8 +427,8 @@ sub importMedia {
}
}
- $params->{mediatype} = $obj->{defmediatype} unless defined $params->{mediatype} && $params->{mediatype} != 0;
- $params->{language} = $obj->{deflanguage} unless defined $params->{language} && $params->{language} ne '';
+ $params->{mediatype} = $config->{defmediatype} unless defined $params->{mediatype} && $params->{mediatype} != 0;
+ $params->{language} = $config->{deflanguage} unless defined $params->{language} && $params->{language} ne '';
$console->table({},
{
@@ -456,6 +446,7 @@ sub searchMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || {};
@@ -520,7 +511,7 @@ ORDER BY title
$setcount = defined $erg ? scalar @$erg : 0;
map {
$_->[1] =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
- } @$erg if $obj->{usecache} eq "y";
+ } @$erg if $config->{usecache} eq "y";
}
$console->table($erg,
@@ -529,10 +520,9 @@ ORDER BY title
fields => $obj->_getsearchsfields_as_array,
allgenres => $obj->_get_videogenres_as_array,
setcount => $setcount,
- range => defined $params->{range} && $params->{range} ne '' ? $params->{range} : $obj->{defrange},
+ range => defined $params->{range} && $params->{range} ne '' ? $params->{range} : $config->{defrange},
ranges => $obj->_get_ranges_as_array,
- cols => $obj->{listcols},
- usecache => $obj->{usecache},
+ usecache => $config->{usecache},
}
);
}
@@ -542,6 +532,7 @@ sub editMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || {};
@@ -569,8 +560,8 @@ WHERE
}
}
- $params->{mediatype} = $obj->{defmediatype} unless defined $params->{mediatype} && $params->{mediatype} != 0;
- $params->{language} = $obj->{deflanguage} unless defined $params->{language} && $params->{language} ne '';
+ $params->{mediatype} = $config->{defmediatype} unless defined $params->{mediatype} && $params->{mediatype} != 0;
+ $params->{language} = $config->{deflanguage} unless defined $params->{language} && $params->{language} ne '';
$console->table({},
{
@@ -588,13 +579,14 @@ sub listMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || "";
my $params = shift;
my ($r, $range,$where);
$r = uc($params->{range})
if ( $params && defined $params->{range} && $params->{range}=~ /^.+?/ );
- $r = uc($obj->{defrange})
+ $r = uc($config->{defrange})
if ( ! $r );
if ( $r eq "SEEN" ) {
@@ -630,14 +622,13 @@ ORDER BY title
# da sonst die Formatierung des Listenansicht nicht mehr passt
map {
$_->[1] =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
- } @$erg if $obj->{usecache} eq "y";
+ } @$erg if $config->{usecache} eq "y";
my $param = {
setcount => $setcount,
range => $r,
ranges => $obj->_get_ranges_as_array,
- cols => $obj->{listcols},
- usecache => $obj->{usecache},
+ usecache => $config->{usecache},
};
return $console->table($erg, $param);
}
@@ -647,6 +638,7 @@ sub displayMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || "";
my $params = shift;
@@ -666,7 +658,7 @@ WHERE id = ?
my $erg = $sth->fetchall_arrayref();
my $actors = $obj->_get_actors( $erg->[0][12] );
my $actorcount = ref $actors ? scalar @$actors : 0;
- $erg->[0][10] =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg if $obj->{usecache} eq "y";
+ $erg->[0][10] =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg if $config->{usecache} eq "y";
$erg->[0][18] = '' if $erg->[0][18] eq '0000-00-00 00:00:00';
#\r\n will be replace with <br/> by output from OUTPUT::HTML
@@ -679,10 +671,9 @@ WHERE id = ?
actorcount => $actorcount,
genres_all => $obj->_get_videogenres_as_hash_by_id,
genres_sel => $obj->_get_videogenres_byvideoid( $id ),
- range => defined $params->{range} && $params->{range} ne '' ? $params->{range} : $obj->{defrange},
+ range => defined $params->{range} && $params->{range} ne '' ? $params->{range} : $config->{defrange},
ranges => $obj->_get_ranges_as_array,
- actorcols => $obj->{actorcols},
- usecache => $obj->{usecache},
+ usecache => $config->{usecache},
};
return $console->table($erg, $param);
}
@@ -692,6 +683,7 @@ sub saveMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || "";
my $params = shift;
@@ -735,6 +727,7 @@ sub deleteMedia {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || "";
my $params = shift;
@@ -773,7 +766,6 @@ sub deleteMedia {
sub _saveActors {
# ------------------
my $obj = shift || return error('No object defined!');
- my $console = shift || return error('No console defined!');
my $input = shift || '';
$input =~ s/\r\n/\n/g;
@@ -984,6 +976,7 @@ sub mediacache {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $params = shift || '';
diff --git a/lib/XXV/MODULES/MOVETIMER.pm b/lib/XXV/MODULES/MOVETIMER.pm
index d2b050a..853ddb9 100644
--- a/lib/XXV/MODULES/MOVETIMER.pm
+++ b/lib/XXV/MODULES/MOVETIMER.pm
@@ -168,7 +168,8 @@ sub _init {
sub movetimermanual {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift;
return 0 unless($self->_movetimer($console,$id));
@@ -362,10 +363,11 @@ sub modifyTimer {
sub movetimercreate {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
- $self->movetimeredit($console, $id, $data);
+ $self->movetimeredit($console, $config, $id, $data);
}
# ------------------
@@ -376,6 +378,7 @@ sub movetimercreate {
sub movetimeredit {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
@@ -537,6 +540,7 @@ sub _insert {
sub movetimerdelete {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || return $console->err(gettext("Missing ID to select rules for deletion! Please use movetimerdelete 'id'"));
my @rules = reverse sort{ $a <=> $b } split(/[^0-9]/, $id);
@@ -566,6 +570,7 @@ sub movetimerdelete {
sub movetimerlist {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my %f = (
'id' => gettext('Service'),
diff --git a/lib/XXV/MODULES/MUSIC.pm b/lib/XXV/MODULES/MUSIC.pm
index e32f60f..479bcab 100644
--- a/lib/XXV/MODULES/MUSIC.pm
+++ b/lib/XXV/MODULES/MUSIC.pm
@@ -336,6 +336,7 @@ sub refresh {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $dbh = ($obj->{mdbh} ? $obj->{mdbh} : $obj->{dbh});
@@ -454,6 +455,7 @@ sub play {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || return error('No data defined!');
debug sprintf('Call play%s',
@@ -468,6 +470,7 @@ sub playlist {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || return error('No data defined!');
my $dbh = ($obj->{mdbh} ? $obj->{mdbh} : $obj->{dbh});
@@ -521,6 +524,7 @@ sub search {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift;
unless($text) {
@@ -536,6 +540,7 @@ sub list {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $param = shift;
my $dbh = ($obj->{mdbh} ? $obj->{mdbh} : $obj->{dbh});
@@ -905,7 +910,6 @@ sub GenreArray {
sub status {
# ------------------
my $obj = shift || return error('No object defined!');
- my $console = shift;
my $lastReportTime = shift || 0;
return
@@ -962,6 +966,7 @@ sub getcovers {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $force = shift;
my $dbh = ($obj->{mdbh} ? $obj->{mdbh} : $obj->{dbh});
@@ -1097,7 +1102,7 @@ sub getcovers {
}
# Start Robots
- $rob->start( 'coverimage', $console, sub{ $waiter->end if(ref $waiter and $current); } );
+ $rob->start( 'coverimage', sub{ $waiter->end if(ref $waiter and $current); } );
return $erg;
}
@@ -1290,6 +1295,7 @@ sub coverimage {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || return error('No data defined!');
my $dbh = ($obj->{mdbh} ? $obj->{mdbh} : $obj->{dbh});
@@ -1360,6 +1366,7 @@ sub getfile {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || return error('No data defined!');
my $dbh = ($obj->{mdbh} ? $obj->{mdbh} : $obj->{dbh});
@@ -1398,6 +1405,7 @@ sub suggest {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $params = shift;
diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm
index b0b8bf8..325c60f 100644
--- a/lib/XXV/MODULES/RECORDS.pm
+++ b/lib/XXV/MODULES/RECORDS.pm
@@ -486,7 +486,7 @@ sub scandirectory {
wanted => sub{
if(-r $File::Find::name) {
if($File::Find::name =~ /\.$typ\/\d{3}.vdr$/sig) { # Lookup for *.rec/001.vdr
- my $filename = $File::Find::name;#$enc->decode($File::Find::name);
+ my $filename = $File::Find::name;
my $path = dirname($filename);
my $md5 = md5_hex($path);
@@ -508,6 +508,7 @@ sub scandirectory {
my $title = dirname($path);
$title =~ s/^$self->{videodir}//g;
$title =~ s/^\///g;
+# $rec->{title} = $enc->decode($self->converttitle($title));
$rec->{title} = $self->converttitle($title);
# add file
@@ -537,6 +538,7 @@ 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;
@@ -656,7 +658,7 @@ sub readData {
my $job = $self->videoPreview( $db_data->{$h}, 1);
if($job) {
push(@{$self->{JOBS}}, $job);
- $self->_updatePreview($job->{RecordMD5}, $db_data->{$h}->{preview});
+ $self->_updatePreview($self->{dbh}, $job->{RecordMD5}, $db_data->{$h}->{preview});
}
}
$self->_updateEvent($db_data->{$h});
@@ -750,7 +752,8 @@ sub readData {
defined(my $child = fork()) or return con_err($console, sprintf("Couldn't fork : %s",$!));
if($child == 0) {
$self->{dbh}->{InactiveDestroy} = 1;
-
+ my $dbh = $self->{dbh}->clone();
+ error(sprintf("Couldn't clone database handle : %s",$!)) unless($dbh);
while(scalar @jobs > 0) {
my $job = shift (@jobs);
@@ -764,8 +767,9 @@ sub readData {
push(@{$preview},$frame);
last if(scalar @{$preview} >= $self->{previewcount});
}
- $self->_updatePreview($job->{RecordMD5},$preview);
+ $self->_updatePreview($dbh, $job->{RecordMD5},$preview) if($dbh);
}
+ undef $dbh;
exit 0;
}
}
@@ -834,6 +838,7 @@ sub refresh {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $waiter;
if(ref $console && $console->typ eq 'HTML') {
@@ -842,7 +847,7 @@ sub refresh {
con_msg($console,gettext("Get information on recordings ..."));
}
- if($self->readData($console,$waiter,'force')) {
+ if($self->readData($console,$config, $waiter,'force')) {
$console->redirect({url => '?cmd=rlist', wait => 1})
if(ref $console and $console->typ eq 'HTML');
@@ -913,10 +918,11 @@ sub _updateState {
sub _updatePreview {
# ------------------
my $self = shift || return error('No object defined!');
+ my $dbh = shift || return error ('No dbh defined!');
my $RecordMD5 = shift || return error ('No data defined!');
my $preview = shift || return error ('No data to replace!');
my $images = join(',',@{$preview});
- my $sth = $self->{dbh}->prepare('UPDATE RECORDS SET preview=?, addtime=NOW() where RecordMD5=?');
+ my $sth = $dbh->prepare('UPDATE RECORDS SET preview=?, addtime=NOW() where RecordMD5=?');
return $sth->execute($images,$RecordMD5);
}
# ------------------
@@ -1477,6 +1483,7 @@ sub display {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $recordid = shift;
unless($recordid) {
@@ -1546,6 +1553,7 @@ sub play {
# ------------------
my $self = shift || return error('No object defined!');
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;
@@ -1574,7 +1582,7 @@ sub play {
my $cmd = sprintf('PLAY %d %s', $rec->{RecordID}, $start);
- if($self->{svdrp}->scommand($console, $cmd)) {
+ if($self->{svdrp}->scommand($console, $config, $cmd)) {
$console->redirect({url => sprintf('?cmd=rdisplay&data=%s',$rec->{RecordMD5}), wait => 1})
if(ref $console and $console->typ eq 'HTML');
@@ -1589,6 +1597,7 @@ sub cut {
# ------------------
my $self = shift || return error('No object defined!');
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 $sql = qq|SELECT SQL_CACHE RecordID,RecordMD5 FROM RECORDS WHERE RecordMD5 = ?|;
@@ -1615,6 +1624,7 @@ sub list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift || "";
my $params = shift;
@@ -1757,18 +1767,20 @@ sub search {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
- my $text = shift || return $self->list($console);
+ my $config = shift || return error('No config defined!');
+ my $text = shift || return $self->list($console,$config);
my $params = shift;
my $query = buildsearch("e.title,e.subtitle,e.description",$text);
- return $self->_search($console,$query->{query},$query->{term},$params);
+ return $self->_search($console,$config,$query->{query},$query->{term},$params);
}
# ------------------
sub _search {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift;
+ my $config = shift;
my $search = shift;
my $term = shift;
my $params = shift;
@@ -1892,6 +1904,7 @@ sub delete {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $record = shift || return con_err($console,gettext("No recording defined for deletion! Please use rdelete 'id'."));
my $answer = shift || 0;
@@ -2026,6 +2039,7 @@ sub redit {
# ------------------
my $self = shift || return error('No object defined!');
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 editing!"));
my $data = shift || 0;
@@ -2305,6 +2319,7 @@ sub conv {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift || 0;
$self->_loadreccmds;
@@ -2361,7 +2376,6 @@ sub conv {
sub status {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
my $lastReportTime = shift;
my $sql = qq|
@@ -2589,6 +2603,7 @@ sub suggest {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $params = shift;
@@ -2633,6 +2648,7 @@ sub recover {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $recordid = shift || 0;
my $data = shift || 0;
@@ -2772,6 +2788,7 @@ sub image {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
return $console->err(gettext("Sorry, get image is'nt supported"))
diff --git a/lib/XXV/MODULES/REMOTE.pm b/lib/XXV/MODULES/REMOTE.pm
index a3ff243..caf09f9 100644
--- a/lib/XXV/MODULES/REMOTE.pm
+++ b/lib/XXV/MODULES/REMOTE.pm
@@ -32,6 +32,7 @@ sub module {
default => 'y',
type => 'confirm',
required => gettext('This is required!'),
+ level => 'guest'
},
commands => {
description => sprintf(gettext("Path of file '%s'"),'commands.conf'),
@@ -161,6 +162,7 @@ sub list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $cmds = $self->parse();
my @list = (['__Id', 'Name', 'Cmd']);
@@ -176,6 +178,7 @@ sub command {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $command = shift || return error('No command defined!');
my $cmds = $self->parse();
@@ -207,6 +210,7 @@ sub remote {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $command = shift;
my $params = shift;
@@ -264,6 +268,7 @@ sub switch {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $cid = shift || '';
my $params = shift;
diff --git a/lib/XXV/MODULES/REPORT.pm b/lib/XXV/MODULES/REPORT.pm
index 1b42657..2fe2695 100644
--- a/lib/XXV/MODULES/REPORT.pm
+++ b/lib/XXV/MODULES/REPORT.pm
@@ -113,7 +113,8 @@ sub init {
sub report {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $modulename = shift || '';
my $mods = main::getModules();
@@ -126,7 +127,7 @@ sub report {
next if($modulename and uc($modulename) ne $modCfg->{Name});
next if(exists $mods->{$modName}->{active} and $cfg->{$modCfg->{Name}}->{active} eq 'n');
if(exists $modCfg->{Status} and ref $modCfg->{Status} eq 'CODE') {
- $result->{$modCfg->{Name}} = $modCfg->{Status}($console, $self->{LastReportTime});
+ $result->{$modCfg->{Name}} = $modCfg->{Status}($self->{LastReportTime});
}
}
diff --git a/lib/XXV/MODULES/ROBOT.pm b/lib/XXV/MODULES/ROBOT.pm
index d6bab6b..6b732da 100644
--- a/lib/XXV/MODULES/ROBOT.pm
+++ b/lib/XXV/MODULES/ROBOT.pm
@@ -20,6 +20,7 @@ sub module {
Date => (split(/ /, '$Date$'))[1],
Author => 'xpix',
LastAuthor => (split(/ /, '$Author$'))[1],
+ Status => sub{ $obj->status(@_) },
Preferences => {
active => {
description => gettext('Activate this service'),
@@ -28,13 +29,6 @@ sub module {
required => gettext('This is required!'),
},
},
- Commands => {
- robot => {
- description => gettext("Start a robots 'rname'"),
- short => 'ro',
- callback => sub{ $obj->start(@_) },
- },
- },
};
return $args;
}
@@ -111,8 +105,7 @@ sub start {
# ------------------
my $obj = shift || return error('No object defined!');
my $rname = shift || return error('No robot name defined!');
- my $console = shift;
- my $endcb = shift;
+ my $endcb = shift;
lg sprintf('Start Robots ....');
@@ -169,16 +162,14 @@ sub result {
sub status {
# ------------------
my $obj = shift || return error('No object defined!');
- my $console = shift;
- my $rname = shift;
+ my $lastReportTime = shift || 0;
- return 1 unless(ref $console);
+ return
+ if($obj->{active} eq 'n');
- if($rname) {
- $console->table($obj->{result}->{$rname});
- } else {
- $console->table($obj->{result});
- }
+ return {
+ message => $obj->{result}
+ };
}
diff --git a/lib/XXV/MODULES/SHARE.pm b/lib/XXV/MODULES/SHARE.pm
index c4bb6d4..50abc4d 100644
--- a/lib/XXV/MODULES/SHARE.pm
+++ b/lib/XXV/MODULES/SHARE.pm
@@ -345,6 +345,7 @@ sub TopTen {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $anzahl = shift || 10;
my %f = (
diff --git a/lib/XXV/MODULES/STATUS.pm b/lib/XXV/MODULES/STATUS.pm
index a2875f0..2895f1c 100644
--- a/lib/XXV/MODULES/STATUS.pm
+++ b/lib/XXV/MODULES/STATUS.pm
@@ -36,12 +36,6 @@ sub module {
type => "file",
required => gettext('This is required!'),
},
- wcBinary => {
- description => sprintf(gettext("Path of command '%s'"),'wc'),
- default => "/usr/bin/wc",
- required => gettext('This is required!'),
- type => "file",
- },
dfBinary => {
description => sprintf(gettext("Path of command '%s'"),'df'),
default => "/bin/df",
@@ -75,21 +69,23 @@ sub module {
description => gettext('Display all relevant informations about this system'),
short => 'sa',
callback => sub{
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
+
$console->setCall('vitals');
- $obj->vitals($console);
+ $obj->vitals($console,$config);
$console->setCall('filesys');
- $obj->filesys($console);
+ $obj->filesys($console,$config);
$console->setCall('memory');
- $obj->memory($console);
+ $obj->memory($console,$config);
$console->setCall('network');
- $obj->network($console);
+ $obj->network($console,$config);
$console->setCall('hardware');
- $obj->hardware($console);
+ $obj->hardware($console,$config);
},
},
vitals => {
@@ -201,6 +197,7 @@ sub vitals {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $output = {
name => $obj->name(),
@@ -227,6 +224,7 @@ sub network {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $interfaces = $obj->netDevs();
my $param = {
@@ -244,6 +242,7 @@ sub hardware {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my ($number, $model, $speed, $cache, $bogomips) = $obj->CPU();
my $pci = $obj->pci();
@@ -271,6 +270,7 @@ sub memory {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $ret = $obj->meminfo(undef,$console->typ eq 'HTML');
my $param = {
@@ -288,6 +288,7 @@ sub filesys {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $ret = $obj->mounts(undef,$obj->{graphic} eq 'y' && $console->typ eq 'HTML');
my $param = {
@@ -549,10 +550,10 @@ sub util {
sub users {
my $obj = shift || return error('No object defined!');
- my $result = `$obj->{whoBinary} | $obj->{wcBinary} -l`
- or return error "Couldn't execute $obj->{whoBinary} or $obj->{wcBinary}\n";
- $result =~ s/\n//g;
- return $result;
+ my $result = `$obj->{whoBinary}`
+ or return error "Couldn't execute $obj->{whoBinary}\n";
+ my $lines = ($result =~ tr/\n//);
+ return $lines;
}
diff --git a/lib/XXV/MODULES/STREAM.pm b/lib/XXV/MODULES/STREAM.pm
index e693bf3..d6e3407 100644
--- a/lib/XXV/MODULES/STREAM.pm
+++ b/lib/XXV/MODULES/STREAM.pm
@@ -189,6 +189,7 @@ sub livestream {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $cid = shift || return con_err($console,gettext("No channel defined for streaming!"));
my $params = shift;
@@ -268,6 +269,7 @@ sub playrecord {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $recid = shift || return $console->err(gettext("No recording defined for streaming!"));
my $params = shift;
diff --git a/lib/XXV/MODULES/SVDRP.pm b/lib/XXV/MODULES/SVDRP.pm
index fc9a10a..716b834 100644
--- a/lib/XXV/MODULES/SVDRP.pm
+++ b/lib/XXV/MODULES/SVDRP.pm
@@ -21,6 +21,7 @@ sub module {
Date => (split(/ /, '$Date$'))[1],
Author => 'xpix',
LastAuthor => (split(/ /, '$Author$'))[1],
+ Status => sub{ $self->status(@_) },
Preferences => {
timeout => {
description => gettext('Connection timeout defines after how many seconds an unrequited connection is terminated.'),
@@ -57,7 +58,7 @@ sub module {
sstatus => {
description => gettext('Status from video disk recorder.'),
short => 'ss',
- callback => sub{ $self->status(@_) },
+ callback => sub{ $self->state(@_) },
Level => 'user',
DenyClass => 'remote',
},
@@ -179,15 +180,17 @@ sub _insert {
sub create {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
- $self->edit($console, $id, $data);
+ $self->edit($console, $config, $id, $data);
}
sub edit {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
@@ -272,6 +275,8 @@ sub edit {
sub delete {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
+
my $id = shift || return $console->err(gettext("No definition of video disk recorder for deletion! Please use sdelete 'id'."));
my $sth = $self->{dbh}->prepare('delete from RECORDER where id = ?');
@@ -309,6 +314,7 @@ sub list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my %f = (
'id' => gettext('Service'),
@@ -445,6 +451,15 @@ sub enum_onlinehosts {
return $hosts;
}
+sub enum_hosts {
+ my $self = shift || return error('No object defined!');
+
+ my $sth = $self->{dbh}->prepare("SELECT SQL_CACHE host,id FROM RECORDER");
+ $sth->execute()
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ return $sth->fetchall_arrayref();
+}
+
# ------------------
sub IDfromHostname {
# ------------------
@@ -538,16 +553,15 @@ sub command {
my $data;
my $line;
- my @commands;
- push(@commands, (ref $cmd eq 'ARRAY' ? @$cmd : $cmd));
+ my $commands;
+ push(@$commands, (ref $cmd eq 'ARRAY' ? @$cmd : $cmd));
- unless(scalar @commands > 0) {
+ unless(scalar @$commands > 0) {
$error = 'No commands defined!';
error ($error);
return (undef, $error);
}
- push(@commands, "quit");
-
+ push(@$commands, "quit");
# Open connection
my $so = IO::Socket::INET->new(PeerAddr => $vdr->{host}, PeerPort => $vdr->{port} , Proto => 'tcp' );
@@ -597,8 +611,9 @@ sub command {
#my $enc = find_encoding($encoding);
# send commando queue
- foreach my $command (@commands) {
- $command =~ s/\r?\n//;
+ foreach my $command (@$commands) {
+ $command =~ s/\r//g;
+ $command =~ s/\n$//;
#if($encoding ne $self->{charset}) {
# $command = $enc->encode($command);
#}
@@ -648,7 +663,7 @@ sub command {
$self->{Cache}->{$vdrid}->{online} = 'yes';
- foreach my $command (@commands) {
+ foreach my $command (@$commands) {
my @lines = (split(/[\r\n]/, $command));
event(sprintf('Call command "%s" on %s %s.', $lines[0], $vdr->{host}, $error ? " failed" : "successful"))
if($command ne "quit");
@@ -657,10 +672,11 @@ sub command {
}
# ------------------
-sub status {
+sub state {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return;
+ my $config = shift || return error('No config defined!');
my $vdrid = shift;
my ($erg,$error) = $self->command('stat disk', $vdrid);
@@ -676,6 +692,7 @@ sub scommand {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift || return $console->err(gettext("No command defined! Please use scommand 'cmd'."));
my $vdrid = shift;
@@ -691,4 +708,50 @@ sub scommand {
return 0;
}
+# ------------------
+sub status {
+# ------------------
+ my $self = shift || return error('No object defined!');
+ my $lastReportTime = shift;
+
+ my %f = (
+ 'host' => gettext('Recorder'),
+ 'state' => gettext('State')
+ );
+
+ my $sql = qq|
+SELECT SQL_CACHE
+ id as __id,
+ host as \'$f{host}\',
+ active as \'$f{state}\'
+from RECORDER WHERE active = 'y'|;
+
+ my $sth = $self->{dbh}->prepare($sql);
+ $sth->execute()
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ my $fields = $sth->{'NAME'};
+ my $erg = $sth->fetchall_arrayref();
+
+ map {
+ if(defined $self->{Cache}->{$_->[0]}
+ && defined $self->{Cache}->{$_->[0]}->{online}) {
+ if($self->{Cache}->{$_->[0]}->{online} eq 'yes') {
+ $_->[2] = gettext("Online");
+ } else {
+ $_->[2] = gettext("Offline");
+ }
+ } else {
+ $_->[2] = gettext("Unknown");
+ }
+ } @$erg;
+
+ unshift(@$erg, $fields);
+ return {
+ message => sprintf(gettext('%d active recorder'),
+ (scalar @$erg -1)),
+ table => $erg,
+ };
+}
+
+
1;
diff --git a/lib/XXV/MODULES/TELNET.pm b/lib/XXV/MODULES/TELNET.pm
index a1829e8..c7f93a7 100644
--- a/lib/XXV/MODULES/TELNET.pm
+++ b/lib/XXV/MODULES/TELNET.pm
@@ -48,21 +48,11 @@ sub module {
},
},
Commands => {
- quit => {
- description => gettext("This will exit the telnet session"),
- short => 'q',
- callback => sub{
- my ($w, $c, $l) = @_;
- lg "Telnet session closed.\n";
- $c->message(gettext("Session closed."));
- $obj->{LOGOUT} = 1;
- },
- },
bye => {
description => gettext("This will exit the xxv system."),
short => 'x',
callback => sub{
- my ($w, $c, $l) = @_;
+ my ($console, $config) = @_;
my $answer;
my $questions = [
'really' => {
@@ -70,10 +60,8 @@ sub module {
msg => gettext("Are you sure to exit the xxv system?"),
def => 'n'}
];
- $answer = $c->question(gettext("This will exit the xxv system."),$questions,$answer);
+ $answer = $console->question(gettext("This will exit the xxv system."),$questions,$answer);
if($answer->{really} eq 'y') {
- $w->w->fd->close;
- $w->w->cancel;
lg "Closed session and exit.\n";
main::quit;
}
diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm
index 9de2d81..ed4e337 100644
--- a/lib/XXV/MODULES/TIMERS.pm
+++ b/lib/XXV/MODULES/TIMERS.pm
@@ -27,31 +27,74 @@ sub module {
default => 30 * 60,
type => 'integer',
required => gettext("This is required!"),
+ check => sub{
+ my $value = shift || 0;
+ if($value =~ /^\d+$/sig and $value > 60) {
+ return int($value);
+ } else {
+ return undef, gettext('Value incorrect!');
+ }
+ },
},
prevminutes => {
description => gettext('Buffer time in minutes before the scheduled start of a recording'),
default => 5,
type => 'integer',
+ check => sub{
+ my $value = shift || 0;
+ if($value =~ /^\d+$/sig and $value >= 0 and $value <= 1440) {
+ return int($value);
+ } else {
+ return undef, gettext('Value incorrect!');
+ }
+ },
+ level => 'guest'
},
afterminutes => {
description => gettext('Buffer time in minutes past the scheduled end of a recording'),
default => 5,
type => 'integer',
+ check => sub{
+ my $value = shift || 0;
+ if($value =~ /^\d+$/sig and $value >= 0 and $value <= 1440) {
+ return int($value);
+ } else {
+ return undef, gettext('Value incorrect!');
+ }
+ },
+ level => 'guest'
},
Priority => {
description => gettext('Priority of a timer for recordings when creating a new timer'),
default => 50,
type => 'integer',
+ check => sub{
+ my $value = shift || 0;
+ if($value =~ /^\d+$/sig and $value >= 0 and $value < 100) {
+ return int($value);
+ } else {
+ return undef, gettext('Value incorrect!');
+ }
+ },
},
Lifetime => {
description => gettext('The guaranteed lifetime (in days) of a recording created by this timer'),
default => 50,
type => 'integer',
+ check => sub{
+ my $value = shift || 0;
+ if($value =~ /^\d+$/sig and $value >= 0 and $value < 100) {
+ return int($value);
+ } else {
+ return undef, gettext('Value incorrect!');
+ }
+ },
},
usevpstime => {
description => gettext('Use Programme Delivery Control (PDC) to control start time'),
default => 'n',
type => 'confirm',
+ level => 'guest'
},
adjust => {
description => gettext('Change timers if EPG entries change'),
@@ -219,7 +262,6 @@ sub module {
sub status {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
my $lastReportTime = shift || 0;
my $total = 0;
@@ -427,13 +469,14 @@ sub _saveTimer {
sub _newTimerdefaults {
my $self = shift || return error('No object defined!');
- my $timer = shift;
+ my $config = shift || return error('No config defined!');
+ my $timer = shift;
$timer->{active} = 'y';
- $timer->{priority} = $self->{Priority};
- $timer->{lifetime} = $self->{Lifetime};
+ $timer->{priority} = $config->{Priority};
+ $timer->{lifetime} = $config->{Lifetime};
- if($timer->{vpsstart} && $self->{usevpstime} eq 'y' && $timer->{vpsstart} > time ) {
+ if($timer->{vpsstart} && $config->{usevpstime} eq 'y' && $timer->{vpsstart} > time ) {
$timer->{vps} = 'y';
$timer->{day} = $timer->{vpsday};
$timer->{start} = $timer->{vpsstart};
@@ -447,6 +490,7 @@ sub newTimer {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $epgid = shift || 0;
my $epg = shift || 0;
@@ -472,7 +516,7 @@ WHERE|;
my $data;
my $sth = $self->{dbh}->prepare($sql);
- if(!$sth->execute($self->{prevminutes} * 60, $self->{prevminutes} * 60, $self->{afterminutes} * 60, @events)
+ if(!$sth->execute($config->{prevminutes} * 60, $config->{prevminutes} * 60, $config->{afterminutes} * 60, @events)
|| !($data = $sth->fetchall_hashref('eventid'))
|| (scalar keys %{$data} < 1)) {
return $console->err(sprintf(gettext("Event '%s' does not exist in the database!"),join(',',@events)));
@@ -481,9 +525,9 @@ WHERE|;
my $count = 1;
foreach my $eventid (keys %{$data}) {
$epg = $data->{$eventid};
- $self->_newTimerdefaults($epg);
+ $self->_newTimerdefaults($config, $epg);
$epg->{action} = 'save' if(scalar keys %{$data} > 1 || $fast );
- $self->_editTimer($console, 0, $epg) if($count < scalar keys %{$data});
+ $self->_editTimer($console, $config, 0, $epg) if($count < scalar keys %{$data});
$count += 1;
}
}
@@ -496,9 +540,9 @@ WHERE|;
start => my_strftime("%H%M",$t),
stop => my_strftime("%H%M",$t + 3600)
};
- $self->_newTimerdefaults($epg);
+ $self->_newTimerdefaults($config, $epg);
}
- $self->editTimer($console, 0, $epg);
+ $self->editTimer($console, $config, 0, $epg);
}
# ------------------
@@ -506,6 +550,7 @@ sub _editTimer {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || 0; # If timerid the edittimer
my $data = shift || 0; # Data for defaults
@@ -762,10 +807,11 @@ sub editTimer {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift; # id of present timer, then edit this timer
my $data = shift; # Data for defaults
- if($self->_editTimer($console,$timerid,$data)
+ if($self->_editTimer($console,$config,$timerid,$data)
&& $self->{svdrp}->queue_count()) {
my ($erg,$error) = $self->{svdrp}->queue_flush(); # Aufrufen der Kommandos
@@ -799,6 +845,7 @@ sub deleteTimer {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || return $console->err(gettext("No timer defined for deletion! Please use tdelete 'tid'.")); # If timerid the edittimer
my $answer = shift || 0;
@@ -884,6 +931,7 @@ sub toggleTimer {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $timerid = shift || return $console->err(gettext("No timer defined to toggle! Please use ttoggle 'id'.")); # If timerid the edittimer
my @timers = split(/[^0-9a-f]/, $timerid);
@@ -1122,7 +1170,8 @@ sub _readData {
sub readData {
# ------------------
my $self = shift || return error('No object defined!');
- my $console = shift;
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
if($self->_readData($console)) {
$console->redirect({url => '?cmd=tlist', wait => 1})
@@ -1157,6 +1206,7 @@ sub list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift;
my $params = shift;
@@ -1168,7 +1218,7 @@ sub list {
foreach(@timers) { push(@{$term},$_); }
}
- return $self->_list($console,$search,$term,$params);
+ return $self->_list($console,$config,$search,$term,$params);
}
# ------------------
@@ -1176,6 +1226,7 @@ sub search {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $text = shift || return $self->list($console);
my $params = shift;
@@ -1185,7 +1236,7 @@ sub search {
$search = sprintf('AND ( %s )', $query->{query});
foreach(@{$query->{term}}) { push(@{$term},$_); }
- return $self->_list($console,$search,$term,$params);
+ return $self->_list($console,$config,$search,$term,$params);
}
# ------------------
@@ -1193,6 +1244,7 @@ sub _list {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $search = shift || '';
my $term = shift;
my $params = shift;
@@ -1966,6 +2018,7 @@ sub suggest {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $params = shift;
diff --git a/lib/XXV/MODULES/USER.pm b/lib/XXV/MODULES/USER.pm
index e4a355e..7864e6e 100644
--- a/lib/XXV/MODULES/USER.pm
+++ b/lib/XXV/MODULES/USER.pm
@@ -10,12 +10,13 @@ use File::Path;
# ------------------
sub module {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $args = {
Name => 'USER',
Prereq => {
'Net::IP::Match::Regexp qw( create_iprange_regexp match_ip )'
=> 'Efficiently match IPv4 addresses against IPv4 ranges via regexp ',
+ 'Data::COW' => 'clone deep data structures copy-on-write'
},
Description =>
gettext("This module manages the User administration.
@@ -71,31 +72,31 @@ or the same parameter is set for each function."),
unew => {
description => gettext('Create new user account'),
short => 'un',
- callback => sub{ $obj->create(@_) },
+ callback => sub{ $self->create(@_) },
Level => 'admin',
},
udelete => {
description => gettext("Delete user account 'uid'"),
short => 'ud',
- callback => sub{ $obj->delete(@_) },
+ callback => sub{ $self->delete(@_) },
Level => 'admin',
},
uedit => {
description => gettext("Edit user account 'uid'"),
short => 'ue',
- callback => sub{ $obj->edit(@_) },
+ callback => sub{ $self->edit(@_) },
Level => 'admin',
},
uprefs => {
description => gettext("Change preferences"),
short => 'up',
- callback => sub{ $obj->userprefs(@_) },
+ callback => sub{ $self->userprefs(@_) },
Level => 'user',
},
ulist => {
description => gettext("List the accounts of users"),
short => 'ul',
- callback => sub{ $obj->list(@_) },
+ callback => sub{ $self->list(@_) },
Level => 'admin',
},
logout => {
@@ -103,8 +104,9 @@ or the same parameter is set for each function."),
short => 'exit',
callback => sub{
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
- if($obj->{active} eq 'y') {
+ if($self->{active} eq 'y') {
$console->message(gettext("Session closed."));
$console->redirect({url => '?', parent => 'top', wait => 2})
if($console->typ eq 'HTML');
@@ -127,14 +129,12 @@ or the same parameter is set for each function."),
after => 1,
prio => 6, # -1 very hard ... 6 very low
cb => sub{
- $obj->logout;
- delete $console->{USER} if($console->{USER});
+ $self->_logout($console,$config);
$ConsoleMod->{LOGOUT} = 1 if($ConsoleMod);
},
);
} else {
- $obj->logout;
- delete $console->{USER} if($console->{USER});
+ $self->_logout($console,$config);
$ConsoleMod->{LOGOUT} = 1 if($ConsoleMod);
}
}
@@ -190,28 +190,28 @@ sub new {
# ------------------
sub _init {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
- unless($obj->{dbh}) {
+ unless($self->{dbh}) {
panic("Session to database is'nt connected");
return 0;
}
my $version = main::getDBVersion();
# don't remove old table, if updated rows => warn only
- if(!tableUpdated($obj->{dbh},'USER',$version,0)) {
+ if(!tableUpdated($self->{dbh},'USER',$version,0)) {
return 0;
}
# Look for table or create this table
- my $erg = $obj->{dbh}->do(qq|
+ my $erg = $self->{dbh}->do(qq|
CREATE TABLE IF NOT EXISTS USER (
Id int(11) unsigned auto_increment NOT NULL,
Name varchar(100) NOT NULL default '',
Password varchar(100) 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'),
MaxLifeTime tinyint(2) default '0',
MaxPriority tinyint(2) default '0',
@@ -220,8 +220,8 @@ sub _init {
|);
# The Table is empty? Make a default User ...
- unless($obj->{dbh}->selectrow_arrayref('SELECT SQL_CACHE count(*) from USER')->[0]) {
- $obj->_insert({
+ unless($self->{dbh}->selectrow_arrayref('SELECT SQL_CACHE count(*) from USER')->[0]) {
+ $self->_insert({
Name => 'xxv',
Password => 'xxv',
Level => 'admin',
@@ -233,29 +233,40 @@ sub _init {
# ------------------
# Name: create
# Descr: Save a new User in the Usertable.
-# Usage: my $ok = $obj->create($console, 0, {name => 'user', ...});
+# Usage: my $ok = $self->create($console, 0, {name => 'user', ...});
# ------------------
sub create {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
- $obj->edit($console, $id, $data);
+ $self->edit($console, $config, $id, $data);
}
# ------------------
sub userprefs {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
- my $id = shift || $obj->{USER}->{Id};
+ my $config = shift || return error('No config defined!');
+ my $id = shift;
my $data = shift || 0;
+
+ unless($console->{USER}->{Id}) {
+ return $console->err(gettext("This account has'nt own preferences!"));
+ }
+
+ $id = $console->{USER}->{Id} unless($id);
+ if($id ne $console->{USER}->{Id}) {
+ return $console->err(gettext("You are not authorized for change external account preferences!"));
+ }
my $user;
if($id and not ref $data) {
- my $sth = $obj->{dbh}->prepare('SELECT SQL_CACHE * from USER where Id = ?');
+ my $sth = $self->{dbh}->prepare('SELECT SQL_CACHE * from USER where Id = ?');
$sth->execute($id)
or return $console->err(sprintf(gettext("User account '%s' does not exist in the database!"),$id));
$user = $sth->fetchrow_hashref();
@@ -269,50 +280,106 @@ sub userprefs {
'Password' => {
typ => 'password',
msg => gettext("Password for this account"),
- req => gettext('This is required!'),
+ #req => gettext('This is required!'),
def => '',
check => sub{
my $value = shift || return;
+
+ return $value unless(ref $value eq 'ARRAY');
+
# If no password given the
# take the old password as default
- if($console->typ eq 'HTML') {
- if($value->[0] and $value->[0] ne $value->[1]) {
- return undef, gettext("The fields with the 1st and the 2nd password must match!");
- } else {
- return $value->[0];
- }
- }
- else {
- return $value;
- }
- },
- },
- 'UserPrefs' => {
- def => $user->{UserPrefs} || '',
- msg => gettext("Personal preferences for this user: ModName::Param=value, "),
- typ => 'string',
- check => sub{
- my $value = shift || return;
- foreach my $pref (split(',', $value)) {
- my ($modname, $parameter, $value) = $pref =~ /(\S+)::(\S+)\=(.+)/sg;
- if(my $mod = main::getModule($modname)) {
- unless(exists $mod->{$parameter}) {
- return undef, sprintf(gettext("The parameter '%s' in module '%s' does not exist!"),$parameter, $mod);
- }
- }
+ if($value->[0] and $value->[0] ne $value->[1]) {
+ return undef, gettext("The fields with the 1st and the 2nd password must match!");
+ } else {
+ return $value->[0];
}
- return $value;
},
},
];
+ my $mods = main::getModules();
+ my $defaultconfig = main::getModule('CONFIG')->{config};
+ my $values;
+ @$values = split('\n', $user->{UserPrefs}) if($user->{UserPrefs});
+
+ foreach my $modName (sort keys %{$mods}) {
+ my $prefs = $mods->{$modName}->{MOD}->{Preferences};
+
+ my @m = split('::', $modName);
+ shift(@m);#'XXV'
+ shift(@m);#'MODULES'
+ my $modul = join('::',@m);
+
+ my $cfg = $defaultconfig->{$modul};
+
+ next if(exists $mods->{$modName}->{active} and $cfg->{active} eq 'n');
+
+ foreach my $name (sort { lc($a) cmp lc($b) } keys(%{$prefs})) {
+ my $def;
+ if($values) {
+ foreach my $userpref (@$values) {
+ my ($modname, $parameter, $value) = $userpref =~ /(\S+)::(\S+)\=(.+)/sg;
+ if($modname eq $modul && $name eq $parameter) {
+ $def = $value;
+ last;
+ }
+ }
+ }
+ $def = $cfg->{$name}
+ if(!(defined $def) && defined $cfg->{$name} && $cfg->{$name} ne "");
+ $def = $prefs->{$name}->{default} unless(defined $def);
+
+ push(@$questions, $modul .'::'. $name,
+ {
+ typ => $prefs->{$name}->{type} || 'string',
+ options => $prefs->{$name}->{options},
+ msg => sprintf("%s:\n%s", ucfirst($modul), ($prefs->{$name}->{description} || ucfirst($name) )),
+ def => $def,
+ #req => $prefs->{$name}->{required},
+ choices => $prefs->{$name}->{choices},
+ check => $prefs->{$name}->{check},
+ readonly => $prefs->{$name}->{readonly} || 0,
+ }
+ ) if($prefs->{$name}->{level}
+ and $self->getLevel($console->{USER}->{Level})
+ >= $self->getLevel($prefs->{$name}->{level}));
+ }
+ }
# Ask Questions
- $data = $console->question(sprintf(gettext('Edit preferences: %s'), $obj->{USER}->{Name}), $questions, $data);
-
- if(ref $data eq 'HASH') {
- $obj->_insert($data);
-
- $obj->refreshUserSettings($data->{UserPrefs}, $user->{UserPrefs});
+ $data = $console->question(sprintf(gettext('Edit preferences: %s'), $console->{USER}->{Name}), $questions, $data);
+
+ if(ref $data eq 'HASH' && $data->{Id} eq $id) {
+ my $userpref;
+ foreach my $item (keys(%{$data})) {
+ next unless($item =~ /::/s);
+ my $value = delete $data->{$item};
+ my ($modname, $parameter) = $item =~ /(\S+)::(\S+)/sg;
+ my $mod = main::getModule($modname);
+ unless(exists $mod->{$parameter}) {
+ error sprintf(("The module '%s' does not exist!"),$mod);
+ next;
+ }
+ unless(exists $mod->{$parameter}) {
+ error sprintf(("The parameter '%s' in module '%s' does not exist!"),$parameter, $mod);
+ next;
+ }
+ my $prefs = $mod->{MOD}->{Preferences};
+ unless($prefs->{$parameter}->{level}
+ and $self->getLevel($console->{USER}->{Level})
+ >= $self->getLevel($prefs->{$parameter}->{level})) {
+ error sprintf(("You are not authorized for change this parameter '%s' in module '%s'!"),$parameter, $mod);
+ next;
+ }
+ my $cfg = $defaultconfig->{$modname};
+ unless($cfg->{$parameter} ne $value) {
+ next;
+ }
+
+ push(@$userpref,$modname .'::'. $parameter .'='.$value);
+ }
+ $data->{UserPrefs} = $userpref ? join('\n', @$userpref) : undef;
+ $self->_insert($data);
$console->message(gettext('User account saved!'));
if($console->typ eq 'HTML') {
@@ -327,17 +394,18 @@ sub userprefs {
# ------------------
# Name: edit
# Descr: Edit an existing User in the Usertable.
-# Usage: my $ok = $obj->edit($console, $id, [$data]);
+# Usage: my $ok = $self->edit($console, $id, [$data]);
# ------------------
sub edit {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
my $user;
if($id and not ref $data) {
- my $sth = $obj->{dbh}->prepare('SELECT SQL_CACHE * from USER where Id = ?');
+ my $sth = $self->{dbh}->prepare('SELECT SQL_CACHE * from USER where Id = ?');
$sth->execute($id)
or return $console->err(sprintf(gettext("User account '%s' does not exist in the database!"),$id));
$user = $sth->fetchrow_hashref();
@@ -370,17 +438,15 @@ sub edit {
def => '',
check => sub{
my $value = shift || return;
+
+ return $value unless(ref $value eq 'ARRAY');
+
# If no password given the
# take the old password as default
- if($console->typ eq 'HTML') {
- if($value->[0] and $value->[0] ne $value->[1]) {
- return undef, gettext("The fields with the 1st and the 2nd password must match!");
- } else {
- return $value->[0];
- }
- }
- else {
- return $value;
+ if($value->[0] and $value->[0] ne $value->[1]) {
+ return undef, gettext("The fields with the 1st and the 2nd password must match!");
+ } else {
+ return $value->[0];
}
},
},
@@ -428,12 +494,17 @@ sub edit {
},
},
'Prefs' => {
- def => $user->{Prefs} || '',
+ def => sub {
+ my $value = $user->{Prefs} ? split(/\n/,$user->{Prefs}) : '';
+ return (ref $value eq 'ARRAY') ? join(',', @$value) : $value;
+ },
msg => gettext("Preferences for this User: ModName::Param=value, "),
typ => 'string',
check => sub{
my $value = shift || return;
- foreach my $pref (split(',', $value)) {
+ my @vals = (ref $value eq 'ARRAY') ? @$value : split(/\s*,\s*/, $value);
+
+ foreach my $pref (@vals) {
my ($modname, $parameter, $value) = $pref =~ /(\S+)::(\S+)\=(.+)/sg;
if(my $mod = main::getModule($modname)) {
unless(exists $mod->{$parameter}) {
@@ -441,7 +512,7 @@ sub edit {
}
}
}
- return $value;
+ return join('\n', @vals);
},
},
'MaxLifeTime' => {
@@ -475,10 +546,10 @@ sub edit {
: gettext('Create new user account')), $questions, $data);
if(ref $data eq 'HASH') {
- $obj->_insert($data);
+ $self->_insert($data);
debug sprintf('%s account with name "%s" is saved%s',
- ($id ? 'New' : 'Changed'),
+ ($id ? 'Changed' : 'New'),
$data->{Name},
( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" )
);
@@ -493,14 +564,15 @@ sub edit {
# ------------------
# Name: delete
# Descr: Delete an existing User in the Usertable with Id.
-# Usage: my $ok = $obj->delete($console, $id);
+# Usage: my $ok = $self->delete($console, $id);
# ------------------
sub delete {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || return $console->err(gettext("No user account defined for deletion! Please use udelete 'uid'."));
- my $sth = $obj->{dbh}->prepare('delete from USER where Id = ?');
+ my $sth = $self->{dbh}->prepare('delete from USER where Id = ?');
$sth->execute($id)
or return $console->err(sprintf(gettext("User account '%s' does not exist in the database!"),$id));
$console->message(sprintf gettext("User account %s deleted."), $id);
@@ -519,8 +591,9 @@ sub delete {
# ------------------
sub list {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my %f = (
'Id' => gettext('Service'),
@@ -531,7 +604,7 @@ sub list {
);
my $sql = qq|
-SELECT SQL_CACHE
+SELECT SQL_CACHE
Id as \'$f{Id}\',
Name as \'$f{Name}\',
Level as \'$f{Level}\',
@@ -541,7 +614,7 @@ from
USER
|;
- my $sth = $obj->{dbh}->prepare($sql);
+ my $sth = $self->{dbh}->prepare($sql);
$sth->execute()
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
my $fields = $sth->{'NAME'};
@@ -553,47 +626,39 @@ from
# ------------------
# Name: logout
-# Descr: The routine for logout the user, this will clean the user temp files
-# and make a rollback to the standard user settings.
-# Usage: my $ok = $obj->logout();
+# Descr: The routine for logout the user, this will clean the user temp files.
+# Usage: my $ok = $self->logout();
# ------------------
-sub logout {
- my $obj = shift || return error('No object defined!');
+sub _logout {
+ my $self = shift || return error('No object defined!');
+ my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
lg sprintf('Logout called%s',
- $obj->{USER}->{Name} ? sprintf(" by user %s", $obj->{USER}->{Name}) : ""
+ $console->{USER}->{Name} ? sprintf(" by user %s", $console->{USER}->{Name}) : ""
);
- # get the default user settings
- $obj->setUserSettings($obj->{USER}->{UserPrefs}, 'rollback')
- if($obj->{USER}->{UserPrefs});
-
- # get the default settings
- $obj->setUserSettings($obj->{USER}->{Prefs}, 'rollback')
- if($obj->{USER}->{Prefs});
-
- main::toCleanUp($obj->{USER}->{Name});
- delete $obj->{USER};
+ main::toCleanUp($console->{USER}->{Name});
return 1;
}
# ------------------
sub _checkIp {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $handle = shift || return;
my $ip = getip($handle);
- if($obj->{withAuth}) {
- my $regexp = create_iprange_regexp(split(/\s*,\s*/, $obj->{withAuth}));
+ if($self->{withAuth}) {
+ my $regexp = create_iprange_regexp(split(/\s*,\s*/, $self->{withAuth}));
if (match_ip($ip, $regexp)) {
return 0;
}
}
- if($obj->{noAuth}) {
- my $regexp = create_iprange_regexp(split(/\s*,\s*/, $obj->{noAuth}));
+ if($self->{noAuth}) {
+ my $regexp = create_iprange_regexp(split(/\s*,\s*/, $self->{noAuth}));
if (match_ip($ip, $regexp)) {
return 1;
}
@@ -606,88 +671,63 @@ sub _checkIp {
# Descr: The loginroutine to check the User Name, Password
# or the ClientIPAdress.
# This will return a Userhash with the DB-Entrys.
-# Usage: my $userHash = $obj->check($handle);
+# Usage: my $userHash = $self->check($handle);
# ------------------
sub check {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $handle = shift || return;
- if($obj->_checkIp($handle)) {
- $obj->{USER}->{Name} = undef;
- $obj->{USER}->{Level} = 'admin';
+ my $user;
+ if($self->{active} ne 'y'
+ or $self->_checkIp($handle)) {
+ $user->{Name} = 'su'; # we are Superuser
+ $user->{Level} = 'admin';
+ #$user->{MaxLifeTime} = 0; #0 - disabled
+ #$user->{MaxPriority} = 0; #0 - disabled
+ $user->{config} = main::getModule('CONFIG')->{config};
} else {
my $name = shift || return;
my $password = shift || return;
-
- my $oldprefs = $obj->{USER}->{UserPrefs};
-
- my $newUser = 0;
- if((!$obj->{USER}) or (!scalar keys %{$obj->{USER}}) or $name ne $obj->{USER}->{Name}) {
- lg sprintf('User %s try to login!', $name );
- $newUser = $name;
- $obj->logout()
- if($obj->{USER} and (scalar keys %{$obj->{USER}}));
- }
-
# check User
- my $sth = $obj->{dbh}->prepare('SELECT SQL_CACHE * from USER where Name = ? and Password = md5( ? )');
+ my $sth = $self->{dbh}->prepare('SELECT SQL_CACHE * from USER where Name = ? and Password = md5( ? )');
$sth->execute($name, $password)
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
- $obj->{USER} = $sth->fetchrow_hashref();
+ $user = $sth->fetchrow_hashref();
+
+ return undef
+ unless($user);
+
+ $user->{config} = make_cow_ref(main::getModule('CONFIG')->{config});
# Set the user settings from user
- $obj->refreshUserSettings($obj->{USER}->{UserPrefs}, $oldprefs);
+ $self->applySettings($user->{UserPrefs}, $user->{config})
+ if($user->{UserPrefs});
# Set the user settings from admin
- $obj->setUserSettings($obj->{USER}->{Prefs}, 'set')
- if($obj->{USER}->{Prefs} and $newUser);
+ $self->applySettings($user->{Prefs}, $user->{config})
+ if($user->{Prefs});
}
- if(my $level = $obj->getLevel($obj->{USER}->{Level})) {
- $obj->{USER}->{value} = $level if($level);
+ if(my $level = $self->getLevel($user->{Level})) {
+ $user->{value} = $level if($level);
}
- return $obj->{USER};
-}
-
-# ------------------
-sub refreshUserSettings {
-# ------------------
- my $obj = shift || return error('No object defined!');
- my $newprefs = shift || '';
- my $oldprefs = shift || '';
-
- return 1 if($newprefs eq $oldprefs);
-
- $obj->setUserSettings($oldprefs, 'rollback')
- if($oldprefs);
-
- $obj->setUserSettings($newprefs, 'set')
- if($newprefs);
-
- my $mod = main::getModule('CONFIG');
- $mod->reconfigure();
-
+ return $user;
}
-
# ------------------
-sub setUserSettings {
+sub applySettings {
# ------------------
- my $obj = shift || return error('No object defined!');
- my $prefs = shift || return error ('No Settings??');
- my $mode = shift || 'set';
+ my $self = shift || return error('No object defined!');
+ my $newprefs = shift || return error ('No settings defined!');
+ my $config = shift || return error ('No config defined!');
- foreach my $pref (split(',', $prefs)) {
+ foreach my $pref (split('\n', $newprefs)) {
my ($modname, $parameter, $value) = $pref =~ /(\S+)::(\S+)\=(.*)/sg;
if($modname and my $mod = main::getModule($modname) and my $cfg = main::getModule('CONFIG')->{config}) {
if(exists $mod->{$parameter}) {
- if($mode eq 'set') {
- $cfg->{$modname}->{$parameter} = $value;
- } else {
- $cfg->{$modname}->{$parameter} = $mod->{$parameter};
- }
+ $config->{$modname}->{$parameter} = $value;
} else {
error("The Parameter '$parameter' in Module '$mod' is doesn't exist!");
}
@@ -698,16 +738,16 @@ sub setUserSettings {
# ------------------
sub allowCommand {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $modCfg = shift || return error('No modul defined!');
my $cmdName = shift || return error('No command name defined!');
my $user = shift || return error('No user defined!');
my $DontdumpViolation = shift || '';
if(
- (exists $modCfg->{Level} and $user->{value} < $obj->getLevel($modCfg->{Level}))
+ (exists $modCfg->{Level} and $user->{value} < $self->getLevel($modCfg->{Level}))
or
- (exists $modCfg->{Commands}->{$cmdName}->{Level} and $user->{value} < $obj->getLevel($modCfg->{Commands}->{$cmdName}->{Level}))
+ (exists $modCfg->{Commands}->{$cmdName}->{Level} and $user->{value} < $self->getLevel($modCfg->{Commands}->{$cmdName}->{Level}))
or
($user->{Deny} and exists $modCfg->{Commands}->{$cmdName}->{DenyClass} and $user->{Deny} =~ /$modCfg->{Commands}->{$cmdName}->{DenyClass}/)
) {
@@ -728,7 +768,7 @@ sub allowCommand {
# 'noperm' = Permission denied for the called User
# 'noexists' = Command does not exist!
# $error is the full Errortext to diaply im Userinterface.
-# Usage: my ($cmdobj, $cmdname, $shorterr, $error) = $obj->checkCommand($console, $command);
+# Usage: my ($cmdobj, $cmdname, $shorterr, $error) = $self->checkCommand($console, $command);
# Test:
sub t_checkCommand {
my ($cmdobj, $cmdname, $shorterr, $error, $t)
@@ -741,7 +781,7 @@ sub t_checkCommand {
}
# ------------------
sub checkCommand {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
my $ucmd = shift || return error('No command defined!');
my $DontdumpViolation = shift || '';
@@ -751,12 +791,12 @@ sub checkCommand {
my $shorterr = 0;
my $cmdobj = 0;
my $cmdname = 0;
- my $cfg = main::getModule('CONFIG')->{config};
+ my $cmdModule;
my $ok = 0;
# Checks the Commands Syntax (double shortcmds?)
- $obj->checkCmdSyntax()
- unless(defined $obj->{Check});
+ $self->checkCmdSyntax()
+ unless(defined $self->{Check});
foreach my $modName (keys %{$mods}) {
my $modCfg = $mods->{$modName}->{MOD};
@@ -765,16 +805,17 @@ sub checkCommand {
$ok++;
$cmdobj = $modCfg->{Commands}->{$cmdName};
$cmdname = $cmdName;
+ $cmdModule = $modCfg->{Name};
# Check on active Modul
- if(exists $mods->{$modName}->{active} and $cfg->{$modCfg->{Name}}->{active} eq 'n') {
+ if(exists $mods->{$modName}->{active} and $console->{USER}->{config}->{$modCfg->{Name}}->{active} eq 'n') {
$err = sprintf(gettext("Sorry, but the module %s is inactive! Enable it with %s:Preferences:active = y"),
- $modCfg->{Name}, $modCfg->{Name});
+ $cmdModule, $cmdModule);
$shorterr = 'noactive';
}
- if($obj->{active} eq 'y') {
+ if($self->{active} eq 'y') {
# Check Userlevel and Permissions
- unless($obj->allowCommand($modCfg, $cmdName, $console->{USER},$DontdumpViolation)) {
+ unless($self->allowCommand($modCfg, $cmdName, $console->{USER},$DontdumpViolation)) {
$err = gettext('You are not authorized for this function!');
$shorterr = 'noperm';
}
@@ -788,23 +829,23 @@ sub checkCommand {
}
if($shorterr) {
- return (undef, 'nothing', $shorterr, $err)
+ return (undef, 'nothing', undef, $shorterr, $err)
} else {
- return ($cmdobj, $cmdname, undef, undef)
+ return ($cmdobj, $cmdname, $cmdModule, undef, undef)
}
}
# ------------------
# Name: checkCmdSyntax
# Descr: Check the Syntax of Commands and for double Names in different Modules
-# Usage: my $ok = $obj->checkCmdSyntax(tlist);
+# Usage: my $ok = $self->checkCmdSyntax(tlist);
# Test:
sub t_checkCmdSyntax {
return $_[0]->checkCmdSyntax('tlist');
}
# ------------------
sub checkCmdSyntax {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $mods = main::getModules();
my $shorts = {};
@@ -820,34 +861,34 @@ sub checkCmdSyntax {
}
}
}
- $obj->{Check} = 1;
+ $self->{Check} = 1;
1;
}
# ------------------
# Name: getLevel
# Descr: Translate the Levelname to an numeric level
-# Usage: my $score = $obj->getLevel(levelname);
+# Usage: my $score = $self->getLevel(levelname);
# Test:
sub t_getLevel {
return $_[0]->getLevel('user') == 5;
}
# ------------------
sub getLevel {
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $name = shift || return;
# Level Table
- $obj->{LEV} = {
+ $self->{LEV} = {
admin => 10,
user => 5,
guest => 1,
- } unless(exists $obj->{LEV});
+ } unless(exists $self->{LEV});
- if($obj->{LEV}->{$name}) {
- return $obj->{LEV}->{$name};
+ if($self->{LEV}->{$name}) {
+ return $self->{LEV}->{$name};
} else {
- return error("This Levelname '$name' does not exist");
+ return error("Name of level '$name' does not exist!");
}
}
@@ -855,7 +896,7 @@ sub getLevel {
# ------------------
sub _insert {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $data = shift || return;
if(ref $data eq 'HASH') {
@@ -894,10 +935,10 @@ sub _insert {
join(', ', @$kenn),
);
}
- my $sth = $obj->{dbh}->prepare( $sql );
+ my $sth = $self->{dbh}->prepare( $sql );
$sth->execute( @$vals );
} else {
- my $sth = $obj->{dbh}->prepare('REPLACE INTO USER VALUES (?,?,?,?)');
+ my $sth = $self->{dbh}->prepare('REPLACE INTO USER VALUES (?,?,?,?)');
$sth->execute( @$data );
}
}
@@ -905,14 +946,14 @@ sub _insert {
# ------------------
# Name: userTmp
# Descr: Return a temp directory only for logged user and delete this by exit xxv.
-# Usage: my $tmpdir = $obj->userTmp([username]);
+# Usage: my $tmpdir = $self->userTmp([username]);
# ------------------
sub userTmp {
- my $obj = shift || return error('No object defined!');
- my $user = ($obj->{active} eq 'y' ? ( shift || ($obj->{USER}->{Name}?$obj->{USER}->{Name}:"nobody") ) : "nobody" );
+ my $self = shift || return error('No object defined!');
+ my $user = shift || return error('No username defined!');
# /var/cache/xxv/temp/xpix/$PID
- my $dir = sprintf('%s/%s/%d', $obj->{tempimages} , $user, $$);
+ my $dir = sprintf('%s/%s/%d', $self->{tempimages} , $user, $$);
unless(-d $dir) {
mkpath($dir) or error "Couldn't mkpath $dir : $!";
diff --git a/lib/XXV/MODULES/VTX.pm b/lib/XXV/MODULES/VTX.pm
index 18deaa6..67a5c85 100644
--- a/lib/XXV/MODULES/VTX.pm
+++ b/lib/XXV/MODULES/VTX.pm
@@ -109,6 +109,7 @@ sub new {
sub findfirst {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $basedir = $self->{dir};
unless($basedir and -d $basedir) {
@@ -141,6 +142,7 @@ sub findfirst {
sub channel {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $channel = shift;
my $basedir = $self->{dir};
@@ -152,7 +154,7 @@ sub channel {
}
unless($channel) {
- return $self->findfirst ($console);
+ return $self->findfirst ($console, $config);
}
my $mod = main::getModule ('CHANNELS');
@@ -252,8 +254,9 @@ sub channel {
sub page {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $page = shift || "";
- my $channel = $self->{CHANNEL} || return $self->findfirst ($console);
+ my $channel = $self->{CHANNEL} || return $self->findfirst ($console, $config);
my $basedir = $self->{dir} || return error('No base directory defined!');
my $chandir = $self->{CHANNELDIR} || return error('No channel defined!');
my $cache = $self->{cache} || 'packed';
@@ -1371,7 +1374,7 @@ sub HighLight {
my $ub = "</font>";
foreach my $line (split('\n',$result)) {
- $line =~ s/$search/$ua$search$ub/g;
+ $line =~ s/$search/$ua$1$ub/ig;
$lines .= $line;
}
return $lines;
@@ -1382,6 +1385,7 @@ sub HighLight {
sub search {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $search = shift;
my $channel = $self->{CHANNEL};
@@ -1447,6 +1451,7 @@ sub image {
# ------------------
my $obj = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $data = shift;
return $console->err(gettext("Sorry, get image is'nt supported"))
diff --git a/lib/XXV/MODULES/XMLTV.pm b/lib/XXV/MODULES/XMLTV.pm
index b53d31a..aa6bf35 100644
--- a/lib/XXV/MODULES/XMLTV.pm
+++ b/lib/XXV/MODULES/XMLTV.pm
@@ -16,7 +16,7 @@ sub module {
Prereq => {
'Template' => 'Front-end module to the Template Toolkit ',
'Date::Manip' => 'date manipulation routines',
- 'Time::Local' => 'efficiently compute time from local and GMT time ',
+ 'Time::Local' => 'efficiently compute time from local and GMT time',
'XML::Simple' => 'Easy API to maintain XML (esp config files)'
},
Description => gettext('This module import epg data from xmltv sources.'),
@@ -180,7 +180,7 @@ sub _init {
return 0 if($self->{active} ne 'y');
lg 'Start callback to import xmltv epg data!';
- $self->_XMLTV($console,$waiter);
+ $self->_XMLTV($console,undef,$waiter);
}
);
return 1;
@@ -194,6 +194,7 @@ sub manual {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $id = shift;
my $waiter;
@@ -201,7 +202,7 @@ sub manual {
$waiter = $console->wait(gettext("Import epg data from xmltv sources ..."),0,1000,'no');
}
- my ($msg, $error) = $self->_XMLTV($console,$waiter,$id);
+ my ($msg, $error) = $self->_XMLTV($console,$config,$waiter,$id,'force');
$waiter->end() if(ref $waiter);
$console->start() if(ref $waiter);
@@ -220,12 +221,15 @@ sub _XMLTV {
# ------------------
my $self = shift || return error('No object defined!');
my $console = shift;
+ my $config = shift;
my $waiter = shift;
my $id = shift;
+ my $force = shift;
- my $sth = $self->{dbh}->prepare(q|
+ my $sql = qq|
select
x.id,
+ x.vid,
x.active,
x.xmltvname,
x.channel,
@@ -234,12 +238,18 @@ sub _XMLTV {
x.source,
UNIX_TIMESTAMP(x.updated) as updated,
c.Name
- from XMLTV as x, CHANNELS as c
+ from XMLTV as x, CHANNELS as c, RECORDER as r
where
- active != 'n'
- AND x.channel = c.Id
- |);
- if(!$sth->execute()) {
+ x.active != 'n'
+ and x.channel = c.Id
+ and x.vid = r.id
+ and r.active != 'n'
+ |;
+ $sql .= qq| and x.id = ?| if($id);
+ $sql .= qq| ORDER BY x.vid|;
+
+ my $sth = $self->{dbh}->prepare($sql);
+ unless($id ? $sth->execute($id) : $sth->execute()) {
error sprintf("Couldn't execute query: %s.",$sth->errstr);
return (undef, undef)
}
@@ -247,12 +257,13 @@ sub _XMLTV {
return (undef, undef) unless($rules);
# Adjust waiter max value now.
- $waiter->max(scalar keys %$rules)
+ $waiter->max((scalar keys %$rules)+1)
if(ref $console && ref $waiter);
my $now = time();
my $l = 0;
- my $output;
+ my $output = "";
+ my $vid;
foreach my $id (sort keys %$rules) {
my $rule = $rules->{$id};
@@ -260,12 +271,14 @@ sub _XMLTV {
$waiter->next(++$l, undef, sprintf(gettext("Import epg data for channel '%s'"), $rule->{Name}))
if(ref $waiter);
- if($rule->{updateinterval} eq 'd' && ($rule->{updated} + 86400) > $now ) {
- lg sprintf("Skip import xml data by update interval : %s (%s) id %d",$rule->{Name},$rule->{channel},$rule->{id});
- next;
- } elsif($rule->{updateinterval} eq 'w' && ($rule->{updated} + (86400 * 7)) > $now ) {
- lg sprintf("Skip import xml data by update interval : %s (%s) id %d",$rule->{Name},$rule->{channel},$rule->{id});
- next;
+ unless($force && $id) {
+ if($rule->{updateinterval} eq 'd' && ($rule->{updated} + 86400) > $now ) {
+ lg sprintf("Skip import xml data by update interval : %s (%s) id %d",$rule->{Name},$rule->{channel},$rule->{id});
+ next;
+ } elsif($rule->{updateinterval} eq 'w' && ($rule->{updated} + (86400 * 7)) > $now ) {
+ lg sprintf("Skip import xml data by update interval : %s (%s) id %d",$rule->{Name},$rule->{channel},$rule->{id});
+ next;
+ }
}
my $file = sprintf("%s/%s",$self->{paths}->{XMLTV},$rule->{source});
@@ -285,19 +298,28 @@ sub _XMLTV {
error sprintf("Can't process xml data at %s (%s) id %d",$rule->{Name},$rule->{channel},$rule->{id});
}
}
+ if($vid && $vid != $rule->{vid}) {
+ $self->{svdrp}->queue_add("PUTE\n" . $output . ".\n",$rule->{vid});
+ $output = "";
+ }
+ $vid = $rule->{vid};
}
- if($output and length $output) {
+ if($vid && $output && length $output) {
+ $self->{svdrp}->queue_add("PUTE\n" . $output . ".\n",$vid);
+ }
+ if($self->{svdrp}->queue_count()) {
$waiter->next(undef,undef,gettext('Transmit data.'))
if(ref $waiter);
- my ($erg,$error) = $self->{svdrp}->command(sprintf("PUTE\n%s\n.\n",$output));
+
+ my ($erg,$error) = $self->{svdrp}->queue_flush();
unless($error) {
debug 'Data import complete';
return ($erg, undef);
} else {
error sprintf('Data does\'nt imported : %s',$error);
- return (undef, $erg);
+ return (undef, $error);
}
} else {
error sprintf('None data exits to import');
@@ -346,7 +368,7 @@ sub _ProcessXML {
# Create output
- my $epgdata = '';
+ my $epgdata;
# Find XML events
@@ -364,7 +386,7 @@ sub _ProcessXML {
# 'channel' => 'abc',
# 'start' => '20080317160000 +0100'
# },
- next if($xmltvname and $xml->{channel} ne $xmltvname);
+ next if($xmltvname && $xml->{channel} ne $xmltvname);
my $vdrst = &xmltime2vdr($xml->{start}, $adjust);
my $vdret = &xmltime2vdr($xml->{stop}, $adjust);
@@ -377,10 +399,8 @@ sub _ProcessXML {
$vdrdesc =~ s/\r\n/\|/g; # pipe used from vdr as linebreak
$vdrdesc =~ s/\n/\|/g; # pipe used from vdr as linebreak
- if($self->{charset} ne 'UTF-8') {
- $vdrtitle = encode($self->{charset},$vdrtitle);
- $vdrdesc = encode($self->{charset},$vdrdesc);
- }
+ $vdrtitle = encode($self->{charset},$vdrtitle);
+ $vdrdesc = encode($self->{charset},$vdrdesc);
# Send VDR Event
$epgdata .= "E $vdrid $vdrst $vdrdur 0\n";
@@ -390,9 +410,11 @@ sub _ProcessXML {
}
- return unless($epgdata and length $epgdata);
+ return unless($epgdata && length $epgdata);
- return "C $cid $channel_name\n".$epgdata . "c\n";
+ return "C $cid $channel_name\n"
+ . $epgdata
+ . "c\n";
}
# ------------------
@@ -447,10 +469,11 @@ sub _parse_template {
sub create {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
- $self->edit($console, $id, $data);
+ $self->edit($console, $config, $id, $data);
}
# ------------------
@@ -461,13 +484,14 @@ sub create {
sub edit {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || 0;
my $data = shift || 0;
my $modC = main::getModule('CHANNELS');
my $rule;
- if($id and not ref $data) {
+ if($id && not ref $data) {
my $sth = $self->{dbh}->prepare("select * from XMLTV where id = ?");
$sth->execute($id)
or return $console->err(sprintf(gettext("Rule to import epg data from xmltv sources with ID '%s' does not exist in the database!"),$id));
@@ -476,6 +500,7 @@ sub edit {
} elsif (ref $data eq 'HASH') {
$rule = $data;
}
+ my $vlist = $self->{svdrp}->enum_hosts();
my $con = $console->typ eq "CONSOLE";
my $questions = [
@@ -500,26 +525,27 @@ sub edit {
def => $rule->{xmltvname} || '',
typ => 'string'
},
+ 'vid' => {
+ typ => scalar @$vlist > 1 ? 'list' : 'hidden',
+ def => $rule->{vid} || $self->{svdrp}->primary_hosts(),
+ choices => $vlist,
+ msg => gettext('Which video disk recorder should record'),
+ },
'channel' => {
typ => 'list',
def => $con ? $modC->ChannelToPos($rule->{channel}) : $rule->{channel},
- choices => $con ? $modC->ChannelArray('Name') : $modC->ChannelWithGroup('Name,Id'),
+ choices => $con ? $modC->ChannelArray('name') : $modC->ChannelWithGroup('c.name,c.id'),
msg => gettext('Assign data to channel?'),
req => gettext("This is required!"),
check => sub{
- my $value = shift || return;
-
- if(my $name = $modC->ChannelToName($value)) {
- $data->{channel} = $value;
- return $value;
- } elsif(my $ch = $modC->PosToChannel($value) || $modC->NameToChannel($value) ) {
- $data->{channel} = $value;
- return $ch;
- } elsif( ! $modC->NameToChannel($value)) {
- return undef, sprintf(gettext("This channel '%s' does not exist!"),$value);
- } else {
- return undef, gettext("This is required!");
- }
+ my $value = shift;
+ return undef, gettext("This is required!")
+ unless($value);
+
+ my $ch = $modC->ToCID($value,$data->{vid});
+ return undef, sprintf(gettext("Channel '%s' does not exist on video disk recorder %s!"),$value, $self->{svdrp}->hostname($data->{vid}))
+ unless($ch);
+ return $ch;
},
},
'template' => {
@@ -556,11 +582,11 @@ sub edit {
$console->message(gettext('Rule to import epg data from xmltv sources saved!'));
debug sprintf('%s rule to import epg data from xmltv sources is saved%s',
- ($id ? 'New' : 'Changed'),
+ ($id ? 'Changed' : 'New'),
( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" )
);
- my ($msg, $error) = $self->_XMLTV($console,undef,$data->{id});
+ my ($msg, $error) = $self->_XMLTV($console,$config,undef,$data->{id});
if($error) { $console->err($error); }
elsif($msg) {
@@ -628,6 +654,7 @@ sub _updateTime {
sub remove {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my $id = shift || return $console->err(gettext("Missing ID to select rules for deletion! Please use xmltvremove 'id'"));
my @rules = reverse sort{ $a <=> $b } split(/[^0-9]/, $id);
@@ -657,6 +684,7 @@ sub remove {
sub list {
my $self = shift || return error('No object defined!');
my $console = shift || return error('No console defined!');
+ my $config = shift || return error('No config defined!');
my %f = (
'id' => gettext('Service'),
@@ -665,23 +693,27 @@ sub list {
'template' => gettext('Parse data as template'),
'interval' => gettext('Interval to parse data'),
'source' => gettext('source to import'),
+ 'host' => gettext('Video disk recorder')
);
my $sql = qq|
select
- id as \'$f{'id'}\',
- active as \'$f{'active'}\',
+ x.id as \'$f{'id'}\',
+ IF(x.active!='n' and r.active!='n','y','n') as \'$f{'active'}\',
(SELECT Name
FROM CHANNELS as c
WHERE x.channel = c.Id
LIMIT 1) as \'$f{'channel'}\',
- template as \'$f{'template'}\',
- updateinterval as \'$f{'interval'}\',
- source as \'$f{'source'}\'
+ x.template as \'$f{'template'}\',
+ x.updateinterval as \'$f{'interval'}\',
+ x.source as \'$f{'source'}\',
+ r.host as \'$f{'host'}\'
from
- XMLTV as x
+ XMLTV as x, RECORDER as r
+ where
+ x.vid = r.id
order by
- id
+ x.id
|;
my $sth = $self->{dbh}->prepare($sql);
@@ -708,8 +740,10 @@ sub list {
} @$erg;
unshift(@$erg, $fields);
-
- $console->table($erg);
+ my $hostlist = $self->{svdrp}->list_hosts();
+ $console->table($erg, {
+ recorder => scalar @$hostlist,
+ });
}
# ------------------
diff --git a/lib/XXV/OUTPUT/Console.pm b/lib/XXV/OUTPUT/Console.pm
index 9bed898..3f83797 100644
--- a/lib/XXV/OUTPUT/Console.pm
+++ b/lib/XXV/OUTPUT/Console.pm
@@ -641,7 +641,7 @@ sub pod {
my $podfile = sprintf('%s/%s.pod', $obj->{paths}->{PODPATH}, $modname);
return $obj->err(sprintf(gettext('Module %s not found!'), $modname))
unless(-r $podfile);
- my $tmpdir = main::getModule('USER')->userTmp;
+ my $tmpdir = main::getModule('USER')->userTmp($obj->{USER}->{Name});
my $outfile = sprintf('%s/%s_%d.pod', $tmpdir, $modname, time);
my $parser = Pod::Text->new (sentence => 0, width => 78);
@@ -678,7 +678,7 @@ sub txtfile {
return $obj->err(sprintf(gettext("Could not open file '%s'! : %s"), $filename, $e));
}
}
- $txtfile = main::getModule('HTTPD')->unzip($gzfile);
+ $txtfile = main::getModule('HTTPD')->unzip($obj,$gzfile);
}
}
my $txt = load_file($txtfile);
diff --git a/lib/XXV/OUTPUT/Html.pm b/lib/XXV/OUTPUT/Html.pm
index ae93f51..95b1906 100644
--- a/lib/XXV/OUTPUT/Html.pm
+++ b/lib/XXV/OUTPUT/Html.pm
@@ -87,8 +87,7 @@ sub new {
$self->{htmdir} = $attr{'-htmdir'}
|| return error('No htmdir given!');
- $self->{htmdef} = $attr{'-htmdef'}
- || return error('No htmdef given!');
+ $self->{htmdef} = sprintf('%s/default', $self->{htmdir});
$self->{cgi} = $attr{'-cgi'}
|| return error('No cgi given!');
@@ -99,9 +98,6 @@ sub new {
$self->{browser} = $attr{'-browser'}
|| return error('No browser given!');
- $self->{start} = $attr{'-start'}
- || return error('No start page given!');
-
$self->{debug} = $attr{'-debug'}
|| 0;
@@ -141,10 +137,12 @@ sub parseTemplate {
sub index {
# ------------------
my $self = shift || return error('No object defined!');
+ my $start = shift || return error('No start page defined!');
+
$self->{nopack} = 1;
$self->{call} = 'index';
my $params = {};
- $params->{start} = $self->{start};
+ $params->{start} = $start;
$self->out( $self->parseTemplateFile("index", {}, $params, $self->{call}));
}
@@ -167,7 +165,7 @@ sub parseTemplateFile {
$self->{tt} = Template->new(
START_TAG => '\<\?\%', # Tagstyle
END_TAG => '\%\?\>', # Tagstyle
- INCLUDE_PATH => [$self->{htmdir},$self->{htmdef}] , # or list ref
+ INCLUDE_PATH => [$self->{Skin},$self->{htmdef}] , # or list ref
INTERPOLATE => 1, # expand "$var" in plain text
PRE_CHOMP => 1, # cleanup whitespace
EVAL_PERL => 1, # evaluate Perl code blocks
@@ -183,9 +181,7 @@ sub parseTemplateFile {
# StandardTemplate: ./htmlRoot/widgets/menu.tmpl
my $widget_first = sprintf('%s.tmpl', $call);
my $widget_second = sprintf('widgets/%s.tmpl', $name);
- my $widget = (-e sprintf('%s/%s', $self->{htmdir}, $widget_first) ? $widget_first : $widget_second);
-
- my $user = ($u->{active} eq 'y' && $self->{USER}->{Name} ? $self->{USER}->{Name} : "nobody" );
+ my $widget = (-e sprintf('%s/%s', $self->{Skin}, $widget_first) ? $widget_first : $widget_second);
my $output;
my $vars = {
cgi => $self->{cgi},
@@ -197,7 +193,7 @@ sub parseTemplateFile {
pid => $$,
debug => 0, # Avoid losing encoding like utf8
verbose => $self->{debug},
- user => $user,
+ user => $self->{USER}->{Name},
charset => $self->{charset},
# query the current locale
locale => main::getGeneralConfig->{Language},
@@ -289,7 +285,7 @@ sub parseTemplateFile {
my $filename = shift || return error('No filename defined!');
my $data = shift || return error('No data defined!');
- my $dir = $u->userTmp;
+ my $dir = $u->userTmp($self->{USER}->{Name});
# absolut Path to file
my $file = sprintf('%s/%s', $dir, $filename);
@@ -491,7 +487,7 @@ sub status404 {
my $file = shift || return error('No file defined!');
my $why = shift || "";
- $file =~ s/$self->{htmdir}\///g; # Don't post html root, avoid spy out
+ $file =~ s/$self->{Skin}\///g; # Don't post html root, avoid spy out
$self->statusmsg(404,sprintf(gettext("Couldn't open file '%s' : %s!"),$file,$why),
gettext("Not found"));
@@ -939,7 +935,7 @@ sub pod {
unless(-r $podfile);
my $u = main::getModule('USER');
- my $tmpdir = $u->userTmp;
+ my $tmpdir = $u->userTmp($self->{USER}->{Name});
my $outfile = sprintf('%s/%s_%d.pod', $tmpdir, $modname, time);
pod2html(
@@ -980,7 +976,7 @@ sub txtfile {
return $self->err(sprintf(gettext("Could not open file '%s'! : %s"), $filename, $e));
}
}
- $txtfile = main::getModule('HTTPD')->unzip($gzfile);
+ $txtfile = main::getModule('HTTPD')->unzip($self,$gzfile);
}
}
@@ -992,7 +988,7 @@ sub txtfile {
}
my $u = main::getModule('USER');
- my $htmlfile = sprintf('%s/temp_txt.html', $u->userTmp);
+ my $htmlfile = sprintf('%s/temp_txt.html', $u->userTmp($self->{USER}->{Name}));
# create TextToHTML object
unless(exists $self->{txt2html}) {
@@ -1030,6 +1026,17 @@ sub setCall {
}
# ------------------
+sub setSkin {
+# ------------------
+ my $self = shift || return error('No object defined!');
+ my $name = shift || return error ('No skin defined!');
+
+ $self->{Skin} = sprintf('%s/%s', $self->{htmdir}, $name);
+ return $self->{Skin};
+}
+
+
+# ------------------
sub browser {
# ------------------
my $self = shift || return error('No object defined!');
diff --git a/lib/XXV/OUTPUT/NEWS/JABBER.pm b/lib/XXV/OUTPUT/NEWS/JABBER.pm
index 273775a..440e5d5 100644
--- a/lib/XXV/OUTPUT/NEWS/JABBER.pm
+++ b/lib/XXV/OUTPUT/NEWS/JABBER.pm
@@ -128,7 +128,8 @@ Then you must receive a message in your running jabber client.
return $value unless(ref $value eq 'ARRAY');
- # If no password given the take the old password as default
+ # If no password given the
+ # take the old password as default
if($value->[0] and $value->[0] ne $value->[1]) {
return undef, gettext("The fields with the 1st and the 2nd password must match!");
} else {
diff --git a/lib/XXV/OUTPUT/Wml.pm b/lib/XXV/OUTPUT/Wml.pm
index 196cee9..d2852d4 100644
--- a/lib/XXV/OUTPUT/Wml.pm
+++ b/lib/XXV/OUTPUT/Wml.pm
@@ -127,7 +127,6 @@ sub parseTemplate {
my $widget_first = sprintf('%s.tmpl', (exists $self->{call}) ? $self->{call} : 'nothing');
my $widget_second = sprintf('widgets/%s.tmpl', $name);
my $widget = (-e sprintf('%s/%s', $self->{wmldir}, $widget_first) ? $widget_first : $widget_second);
- my $user = ($u->{active} eq 'y' && $self->{USER}->{Name} ? $self->{USER}->{Name} : "nobody" );
my $output;
my $vars = {
cgi => $self->{cgi},
@@ -138,7 +137,7 @@ sub parseTemplate {
param => $params,
pid => $$,
debug => 1,
- user => $user,
+ user => $self->{USER}->{Name},
charset => $self->{charset},
allow => sub{
my($cmdobj, $cmdname, $se, $err) = $u->checkCommand($self, $_[0],"1");
@@ -160,7 +159,7 @@ sub parseTemplate {
my $filename = shift || return error('No Filename to write');
my $data = shift || return error('Nothing data to write');
- my $dir = $u->userTmp;
+ my $dir = $u->userTmp($self->{USER}->{Name});
# absolut Path to file
my $file = sprintf('%s/%s', $dir, $filename);
@@ -375,7 +374,7 @@ sub pod {
$modname = ucfirst($modname) if($modname eq 'GENERAL');
my $podfile = sprintf('%s/%s.pod', $self->{paths}->{PODPATH}, $modname);
- my $tmpdir = main::getModule('USER')->userTmp;
+ my $tmpdir = main::getModule('USER')->userTmp($self->{USER}->{Name});
my $outfile = sprintf('%s/%s_%d.pod', $tmpdir, $modname, time);
pod2html(
diff --git a/locale/de.po b/locale/de.po
index d0b6e0a..b384609 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-09 13:33+0100\n"
+"PO-Revision-Date: 2008-11-24 13: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"
@@ -19,57 +19,57 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#--------------------
-#: ../bin/xxvd:484
+#: ../bin/xxvd:485
msgid "Documentation has been generated in '%s'."
msgstr "Dokumentation wurde in '%s' generiert"
#--------------------
-#: ../bin/xxvd:661
+#: ../bin/xxvd:663
msgid "This is the main program xxvd."
msgstr "Das ist das Hauptprogramm xxvd."
#--------------------
-#: ../bin/xxvd:668
+#: ../bin/xxvd:670
msgid "Interface language"
msgstr "Sprache der Oberfläche"
#--------------------
-#: ../bin/xxvd:671
+#: ../bin/xxvd:673
msgid "English"
msgstr "Englisch"
#--------------------
-#: ../bin/xxvd:672
+#: ../bin/xxvd:674
msgid "German"
msgstr "Deutsch"
#--------------------
-#: ../bin/xxvd:677
+#: ../bin/xxvd:679
msgid "Data source for the connection to the database"
msgstr "Name der Datenquelle für die Verbindung zur Datenbank"
#--------------------
-#: ../bin/xxvd:680 ../bin/xxvd:686 ../bin/xxvd:692 ../lib/XXV/MODULES/AUTOTIMER.pm:30 ../lib/XXV/MODULES/AUTOTIMER.pm:686 ../lib/XXV/MODULES/CHANNELS.pm:1100 ../lib/XXV/MODULES/CHANNELS.pm:1126 ../lib/XXV/MODULES/CHANNELS.pm:1139 ../lib/XXV/MODULES/CHANNELS.pm:1178 ../lib/XXV/MODULES/CHANNELS.pm:1204 ../lib/XXV/MODULES/CHANNELS.pm:28 ../lib/XXV/MODULES/CHRONICLE.pm:27 ../lib/XXV/MODULES/EPG.pm:33 ../lib/XXV/MODULES/EPG.pm:39 ../lib/XXV/MODULES/EPG.pm:45 ../lib/XXV/MODULES/EVENTS.pm:33 ../lib/XXV/MODULES/GRAB.pm:29 ../lib/XXV/MODULES/GRAB.pm:43 ../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:93 ../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/MEDIALIB.pm:50 ../lib/XXV/MODULES/MEDIALIB.pm:56 ../lib/XXV/MODULES/MOVETIMER.pm:26 ../lib/XXV/MODULES/MOVETIMER.pm:414 ../lib/XXV/MODULES/MOVETIMER.pm:417 ../lib/XXV/MODULES/MOVETIMER.pm:437 ../lib/XXV/MODULES/MOVETIMER.pm:440 ../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:2070 ../lib/XXV/MODULES/RECORDS.pm:2084 ../lib/XXV/MODULES/RECORDS.pm:2098 ../lib/XXV/MODULES/RECORDS.pm:2652 ../lib/XXV/MODULES/RECORDS.pm:2664 ../lib/XXV/MODULES/RECORDS.pm:40 ../lib/XXV/MODULES/RECORDS.pm:46 ../lib/XXV/MODULES/RECORDS.pm:52 ../lib/XXV/MODULES/RECORDS.pm:58 ../lib/XXV/MODULES/RECORDS.pm:64 ../lib/XXV/MODULES/RECORDS.pm:76 ../lib/XXV/MODULES/RECORDS.pm:92 ../lib/XXV/MODULES/REMOTE.pm:28 ../lib/XXV/MODULES/REMOTE.pm:34 ../lib/XXV/MODULES/REMOTE.pm:40 ../lib/XXV/MODULES/REPORT.pm:29 ../lib/XXV/MODULES/REPORT.pm:35 ../lib/XXV/MODULES/ROBOT.pm:28 ../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/STATUS.pm:48 ../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:215 ../lib/XXV/MODULES/SVDRP.pm:221 ../lib/XXV/MODULES/SVDRP.pm:29 ../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:583 ../lib/XXV/MODULES/TIMERS.pm:596 ../lib/XXV/MODULES/TIMERS.pm:599 ../lib/XXV/MODULES/TIMERS.pm:624 ../lib/XXV/MODULES/USER.pm:272 ../lib/XXV/MODULES/USER.pm:363 ../lib/XXV/MODULES/USER.pm:369 ../lib/XXV/MODULES/USER.pm:394 ../lib/XXV/MODULES/USER.pm:67 ../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:495 ../lib/XXV/MODULES/XMLTV.pm:508 ../lib/XXV/MODULES/XMLTV.pm:521 ../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: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
msgid "This is required!"
msgstr "Das ist erforderlich!"
#--------------------
-#: ../bin/xxvd:683 ../bin/xxvd:689
+#: ../bin/xxvd:685 ../bin/xxvd:691
msgid "Password for database access"
msgstr "Passwort für Datenbankzugriff"
#--------------------
-#: ../bin/xxvd:697 ../lib/XXV/MODULES/USER.pm:280 ../lib/XXV/MODULES/USER.pm:377 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:133 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:120
+#: ../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
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:706
+#: ../bin/xxvd:708
msgid "Generate the documentation into the doc directory."
msgstr "Generiere die Dokumentation ins doc Verzeichnis."
#--------------------
-#: ../bin/xxvd:712
+#: ../bin/xxvd:714
msgid "Display program information."
msgstr "Zeigt Textdateien."
@@ -79,7 +79,7 @@ msgid "Wished automated recordings"
msgstr "Gewünschte automatische Aufnahmen"
#--------------------
-#: ../html/alist.tmpl:45 ../html/tlist.tmpl:97 ../lib/XXV/MODULES/AUTOTIMER.pm:997
+#: ../html/alist.tmpl:45 ../html/tlist.tmpl:97 ../lib/XXV/MODULES/AUTOTIMER.pm:993
msgid "Edit autotimer"
msgstr "Autotimer bearbeiten"
@@ -94,7 +94,7 @@ msgid "Delete autotimer"
msgstr "Lösche Autotimer"
#--------------------
-#: ../html/alist.tmpl:5 ../lib/XXV/MODULES/AUTOTIMER.pm:54 ../lib/XXV/MODULES/AUTOTIMER.pm:998
+#: ../html/alist.tmpl:5 ../lib/XXV/MODULES/AUTOTIMER.pm:48 ../lib/XXV/MODULES/AUTOTIMER.pm:994
msgid "Create new autotimer"
msgstr "Neuer Autotimer"
@@ -179,47 +179,47 @@ msgid "Delete channels"
msgstr "Kanäle löschen"
#--------------------
-#: ../html/clist.tmpl:134 ../lib/XXV/MODULES/CHANNELS.pm:1094 ../lib/XXV/MODULES/CHANNELS.pm:1366 ../lib/XXV/MODULES/CHANNELS.pm:601 ../lib/XXV/MODULES/USER.pm:527 ../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:599 ../lib/XXV/OUTPUT/Console.pm:170 ../lib/XXV/OUTPUT/Console.pm:233
msgid "Name"
msgstr "Name"
#--------------------
-#: ../html/clist.tmpl:135 ../lib/XXV/MODULES/CHANNELS.pm:1106 ../lib/XXV/MODULES/CHANNELS.pm:602
+#: ../html/clist.tmpl:135 ../lib/XXV/MODULES/CHANNELS.pm:1109 ../lib/XXV/MODULES/CHANNELS.pm:603
msgid "Transponder frequency"
msgstr "Frequenz des Transponder"
#--------------------
-#: ../html/clist.tmpl:136 ../lib/XXV/MODULES/CHANNELS.pm:1133
+#: ../html/clist.tmpl:136 ../lib/XXV/MODULES/CHANNELS.pm:1136
msgid "Various parameters, depending on signal source"
msgstr "Verschiedene Parameter, abhängig von der Signalquelle"
#--------------------
-#: ../html/clist.tmpl:137 ../html/movetimerlist.tmpl:82 ../lib/XXV/MODULES/MOVETIMER.pm:572
+#: ../html/clist.tmpl:137 ../html/movetimerlist.tmpl:82 ../lib/XXV/MODULES/MOVETIMER.pm:577
msgid "Source"
msgstr "Quelle"
#--------------------
-#: ../html/clist.tmpl:138 ../lib/XXV/MODULES/CHANNELS.pm:1158
+#: ../html/clist.tmpl:138 ../lib/XXV/MODULES/CHANNELS.pm:1161
msgid "Video PID (VPID)"
msgstr "Video PID (VPID)"
#--------------------
-#: ../html/clist.tmpl:139 ../lib/XXV/MODULES/CHANNELS.pm:1172
+#: ../html/clist.tmpl:139 ../lib/XXV/MODULES/CHANNELS.pm:1175
msgid "Audio PID (APID)"
msgstr "Audio PID (APID)"
#--------------------
-#: ../html/clist.tmpl:140 ../lib/XXV/MODULES/CHANNELS.pm:1184
+#: ../html/clist.tmpl:140 ../lib/XXV/MODULES/CHANNELS.pm:1187
msgid "Teletext PID (TPID)"
msgstr "Videotext PID (TPID)"
#--------------------
-#: ../html/clist.tmpl:141 ../lib/XXV/MODULES/CHANNELS.pm:1198
+#: ../html/clist.tmpl:141 ../lib/XXV/MODULES/CHANNELS.pm:1201
msgid "Conditional access (CA)"
msgstr "Zugangsberechtigungssystem (CA)"
#--------------------
-#: ../html/clist.tmpl:148 ../html/help.tmpl:112 ../html/tlist.tmpl:51 ../lib/XXV/MODULES/CHANNELS.pm:1367
+#: ../html/clist.tmpl:148 ../html/help.tmpl:112 ../html/tlist.tmpl:51 ../lib/XXV/MODULES/CHANNELS.pm:1371 ../lib/XXV/MODULES/XMLTV.pm:696
#. (12)
msgid "Video disk recorder"
msgstr "Video Disk Rekorder"
@@ -230,12 +230,12 @@ msgid "Switch to channel"
msgstr "Schalte zum Kanal"
#--------------------
-#: ../html/clist.tmpl:36 ../lib/XXV/MODULES/CHANNELS.pm:1264
+#: ../html/clist.tmpl:36 ../lib/XXV/MODULES/CHANNELS.pm:1267
msgid "Edit channel"
msgstr "Kanal bearbeiten"
#--------------------
-#: ../html/clist.tmpl:39 ../lib/XXV/MODULES/CHANNELS.pm:1372
+#: ../html/clist.tmpl:39 ../lib/XXV/MODULES/CHANNELS.pm:1376
msgid "Would you like to delete this channel?"
msgstr "Wollen Sie diesen Kanal löschen?"
@@ -245,7 +245,7 @@ msgid "Delete channel"
msgstr "Kanal löschen"
#--------------------
-#: ../html/clist.tmpl:94 ../html/help.tmpl:113 ../lib/XXV/MODULES/AUTOTIMER.pm:1145 ../lib/XXV/MODULES/CHANNELS.pm:484
+#: ../html/clist.tmpl:94 ../html/help.tmpl:113 ../lib/XXV/MODULES/AUTOTIMER.pm:1144 ../lib/XXV/MODULES/CHANNELS.pm:484
#. (12)
msgid "Channels"
msgstr "Kanäle"
@@ -261,17 +261,17 @@ msgid "Detailed program information"
msgstr "Detailierte Programminformation"
#--------------------
-#: ../html/display.tmpl:21 ../html/display.tmpl:44 ../lib/XXV/MODULES/EPG.pm:1189 ../lib/XXV/MODULES/EPG.pm:924
+#: ../html/display.tmpl:21 ../html/display.tmpl:44 ../lib/XXV/MODULES/EPG.pm:1202 ../lib/XXV/MODULES/EPG.pm:936
msgid "Percent"
msgstr "Prozent"
#--------------------
-#: ../html/display.tmpl:25 ../html/rdisplay.tmpl:158 ../html/search.tmpl:54 ../lib/XXV/MODULES/AUTOTIMER.pm:164 ../lib/XXV/MODULES/AUTOTIMER.pm:438 ../lib/XXV/MODULES/CHRONICLE.pm:175 ../lib/XXV/MODULES/CHRONICLE.pm:255 ../lib/XXV/MODULES/EPG.pm:1064 ../lib/XXV/MODULES/EPG.pm:1186 ../lib/XXV/MODULES/EPG.pm:685 ../lib/XXV/MODULES/EPG.pm:920 ../lib/XXV/MODULES/RECORDS.pm:2108 ../lib/XXV/MODULES/SHARE.pm:353 ../lib/XXV/MODULES/TIMERS.pm:1204 ../lib/XXV/MODULES/TIMERS.pm:828 ../lib/XXV/MODULES/XMLTV.pm:664
+#: ../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
msgid "Channel"
msgstr "Kanal"
#--------------------
-#: ../html/display.tmpl:27 ../html/movetimerlist.tmpl:81 ../lib/XXV/MODULES/AUTOTIMER.pm:1142 ../lib/XXV/MODULES/CHANNELS.pm:600 ../lib/XXV/MODULES/CHRONICLE.pm:173 ../lib/XXV/MODULES/CHRONICLE.pm:253 ../lib/XXV/MODULES/EPG.pm:1062 ../lib/XXV/MODULES/EPG.pm:1184 ../lib/XXV/MODULES/EPG.pm:683 ../lib/XXV/MODULES/EPG.pm:809 ../lib/XXV/MODULES/EPG.pm:917 ../lib/XXV/MODULES/MOVETIMER.pm:571 ../lib/XXV/MODULES/MUSIC.pm:609 ../lib/XXV/MODULES/SHARE.pm:351 ../lib/XXV/MODULES/SVDRP.pm:314 ../lib/XXV/MODULES/TIMERS.pm:1201 ../lib/XXV/MODULES/USER.pm:526 ../lib/XXV/MODULES/XMLTV.pm:662
+#: ../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
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:447 ../lib/XXV/MODULES/AUTOTIMER.pm:648 ../lib/XXV/MODULES/EPG.pm:923 ../lib/XXV/MODULES/RECORDS.pm:2121 ../lib/XXV/MODULES/RECORDS.pm:2321 ../lib/XXV/MODULES/TIMERS.pm:728 ../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:2135 ../lib/XXV/MODULES/RECORDS.pm:2336 ../lib/XXV/MODULES/TIMERS.pm:773 ../lib/XXV/OUTPUT/Console.pm:171
msgid "Description"
msgstr "Beschreibung"
#--------------------
-#: ../html/display.tmpl:69 ../lib/XXV/MODULES/AUTOTIMER.pm:165 ../lib/XXV/MODULES/AUTOTIMER.pm:441 ../lib/XXV/MODULES/AUTOTIMER.pm:444 ../lib/XXV/MODULES/CHRONICLE.pm:177 ../lib/XXV/MODULES/CHRONICLE.pm:257 ../lib/XXV/MODULES/EPG.pm:1065 ../lib/XXV/MODULES/EPG.pm:1187 ../lib/XXV/MODULES/EPG.pm:686 ../lib/XXV/MODULES/EPG.pm:811 ../lib/XXV/MODULES/EPG.pm:921 ../lib/XXV/MODULES/SHARE.pm:354 ../lib/XXV/MODULES/TIMERS.pm:1205 ../lib/XXV/MODULES/TIMERS.pm:829
+#: ../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
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:166 ../lib/XXV/MODULES/AUTOTIMER.pm:442 ../lib/XXV/MODULES/AUTOTIMER.pm:445 ../lib/XXV/MODULES/CHRONICLE.pm:178 ../lib/XXV/MODULES/CHRONICLE.pm:258 ../lib/XXV/MODULES/EPG.pm:1066 ../lib/XXV/MODULES/EPG.pm:1188 ../lib/XXV/MODULES/EPG.pm:687 ../lib/XXV/MODULES/EPG.pm:812 ../lib/XXV/MODULES/EPG.pm:922 ../lib/XXV/MODULES/SHARE.pm:355 ../lib/XXV/MODULES/TIMERS.pm:1206
+#: ../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
msgid "Stop"
msgstr "Stopp"
@@ -356,14 +356,14 @@ msgid "Administration"
msgstr "Administration"
#--------------------
-#: ../html/help.tmpl:114 ../lib/XXV/MODULES/USER.pm:352
+#: ../html/help.tmpl:114 ../lib/XXV/MODULES/USER.pm:417
msgid "User"
msgstr "Anwender"
#--------------------
#: ../html/help.tmpl:115
-msgid "Personality"
-msgstr "Persönlichkeit"
+msgid "Own settings"
+msgstr "Eigene Einstellungen"
#--------------------
#: ../html/help.tmpl:116
@@ -371,7 +371,7 @@ msgid "Reload"
msgstr "Erneut laden"
#--------------------
-#: ../html/help.tmpl:120 ../lib/XXV/MODULES/USER.pm:529
+#: ../html/help.tmpl:120 ../lib/XXV/MODULES/USER.pm:601
msgid "Preferences"
msgstr "Einstellungen"
@@ -386,7 +386,7 @@ msgid "search"
msgstr "Suchen"
#--------------------
-#: ../html/help.tmpl:23 ../lib/XXV/MODULES/HTTPD.pm:646 ../lib/XXV/MODULES/WAPD.pm:75 ../wml/widgets/footer.tmpl:6
+#: ../html/help.tmpl:23 ../lib/XXV/MODULES/HTTPD.pm:639 ../lib/XXV/MODULES/WAPD.pm:75 ../wml/widgets/footer.tmpl:6
msgid "Running now"
msgstr "Jetzt läuft"
@@ -397,7 +397,7 @@ msgid "Next"
msgstr "Nächstes"
#--------------------
-#: ../html/help.tmpl:51 ../lib/XXV/MODULES/HTTPD.pm:647 ../lib/XXV/MODULES/WAPD.pm:76 ../wml/widgets/footer.tmpl:12
+#: ../html/help.tmpl:51 ../lib/XXV/MODULES/HTTPD.pm:640 ../lib/XXV/MODULES/WAPD.pm:76 ../wml/widgets/footer.tmpl:12
msgid "Program guide"
msgstr "Programm"
@@ -413,13 +413,13 @@ msgid "Programming"
msgstr "Programmierung"
#--------------------
-#: ../html/help.tmpl:65 ../lib/XXV/MODULES/HTTPD.pm:649 ../lib/XXV/MODULES/WAPD.pm:78 ../wml/tlist.tmpl:2 ../wml/widgets/footer.tmpl:15
+#: ../html/help.tmpl:65 ../lib/XXV/MODULES/HTTPD.pm:642 ../lib/XXV/MODULES/WAPD.pm:78 ../wml/tlist.tmpl:2 ../wml/widgets/footer.tmpl:15
#. (12)
msgid "Timers"
msgstr "Timer"
#--------------------
-#: ../html/help.tmpl:66 ../lib/XXV/MODULES/HTTPD.pm:648 ../lib/XXV/MODULES/WAPD.pm:77 ../wml/widgets/footer.tmpl:17
+#: ../html/help.tmpl:66 ../lib/XXV/MODULES/HTTPD.pm:641 ../lib/XXV/MODULES/WAPD.pm:77 ../wml/widgets/footer.tmpl:17
#. (12)
msgid "Autotimer"
msgstr "Autotimer"
@@ -437,13 +437,13 @@ msgid "Media content"
msgstr "Medieninhalte"
#--------------------
-#: ../html/help.tmpl:72 ../lib/XXV/MODULES/HTTPD.pm:650 ../lib/XXV/MODULES/WAPD.pm:79 ../wml/widgets/footer.tmpl:18
+#: ../html/help.tmpl:72 ../lib/XXV/MODULES/HTTPD.pm:643 ../lib/XXV/MODULES/WAPD.pm:79 ../wml/widgets/footer.tmpl:18
#. (12)
msgid "Recordings"
msgstr "Aufnahmen"
#--------------------
-#: ../html/help.tmpl:73 ../lib/XXV/MODULES/HTTPD.pm:651 ../lib/XXV/MODULES/MEDIALIB.pm:1237 ../lib/XXV/MODULES/WAPD.pm:80
+#: ../html/help.tmpl:73 ../lib/XXV/MODULES/HTTPD.pm:644 ../lib/XXV/MODULES/MEDIALIB.pm:1231 ../lib/XXV/MODULES/WAPD.pm:80
#. (12)
msgid "Music"
msgstr "Musik"
@@ -461,13 +461,13 @@ msgid "Tools"
msgstr "Werkzeuge"
#--------------------
-#: ../html/help.tmpl:79 ../lib/XXV/MODULES/HTTPD.pm:652 ../lib/XXV/MODULES/WAPD.pm:81 ../wml/widgets/footer.tmpl:19
+#: ../html/help.tmpl:79 ../lib/XXV/MODULES/HTTPD.pm:645 ../lib/XXV/MODULES/WAPD.pm:81 ../wml/widgets/footer.tmpl:19
#. (12)
msgid "Remote"
msgstr "Fernbedienung"
#--------------------
-#: ../html/help.tmpl:80 ../html/widgets/vtx.tmpl:3 ../lib/XXV/MODULES/HTTPD.pm:653 ../lib/XXV/MODULES/WAPD.pm:82
+#: ../html/help.tmpl:80 ../html/widgets/vtx.tmpl:3 ../lib/XXV/MODULES/HTTPD.pm:646 ../lib/XXV/MODULES/WAPD.pm:82
#. (12)
msgid "Teletext"
msgstr "Videotext"
@@ -485,12 +485,12 @@ msgid "Commands"
msgstr "Kommandos"
#--------------------
-#: ../html/help.tmpl:87 ../html/widgets/player.tmpl:105 ../html/widgets/player.tmpl:69 ../lib/XXV/MODULES/HTTPD.pm:654 ../lib/XXV/MODULES/TIMERS.pm:1202 ../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:1254 ../lib/XXV/MODULES/WAPD.pm:83
msgid "Status"
msgstr "Status"
#--------------------
-#: ../html/help.tmpl:88 ../lib/XXV/MODULES/STATUS.pm:216
+#: ../html/help.tmpl:88 ../lib/XXV/MODULES/STATUS.pm:213
msgid "Vitals"
msgstr "Wichtiges"
@@ -500,12 +500,12 @@ msgid "Memory"
msgstr "Speicher"
#--------------------
-#: ../html/help.tmpl:90 ../lib/XXV/MODULES/STATUS.pm:712
+#: ../html/help.tmpl:90 ../lib/XXV/MODULES/STATUS.pm:713
msgid "Filesystem"
msgstr "Filesystem"
#--------------------
-#: ../html/help.tmpl:91 ../lib/XXV/MODULES/STATUS.pm:233
+#: ../html/help.tmpl:91 ../lib/XXV/MODULES/STATUS.pm:231
msgid "Network"
msgstr "Netzwerk"
@@ -525,7 +525,7 @@ msgid "News"
msgstr "Neuigkeiten"
#--------------------
-#: ../html/help.tmpl:98 ../lib/XXV/MODULES/MEDIALIB.pm:1245
+#: ../html/help.tmpl:98 ../lib/XXV/MODULES/MEDIALIB.pm:1239
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:1311
+#: ../html/mlcopy.tmpl:115 ../html/mldisplay.tmpl:115 ../html/mledit.tmpl:115 ../html/mlimport.tmpl:115 ../lib/XXV/MODULES/MEDIALIB.pm:1305
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:1286 ../lib/XXV/MODULES/MUSIC.pm:614
+#: ../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
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:1284
+#: ../html/mlcopy.tmpl:140 ../html/mldisplay.tmpl:209 ../html/mledit.tmpl:140 ../html/mlimport.tmpl:140 ../lib/XXV/MODULES/MEDIALIB.pm:1278
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:1291
+#: ../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
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:162 ../lib/XXV/MODULES/AUTOTIMER.pm:435 ../lib/XXV/MODULES/AUTOTIMER.pm:646 ../lib/XXV/MODULES/CHRONICLE.pm:174 ../lib/XXV/MODULES/CHRONICLE.pm:254 ../lib/XXV/MODULES/EPG.pm:1063 ../lib/XXV/MODULES/EPG.pm:1185 ../lib/XXV/MODULES/EPG.pm:684 ../lib/XXV/MODULES/EPG.pm:810 ../lib/XXV/MODULES/EPG.pm:918 ../lib/XXV/MODULES/EVENTS.pm:348 ../lib/XXV/MODULES/MEDIALIB.pm:1281 ../lib/XXV/MODULES/MUSIC.pm:612 ../lib/XXV/MODULES/RECORDS.pm:1646 ../lib/XXV/MODULES/RECORDS.pm:1781 ../lib/XXV/MODULES/SHARE.pm:352 ../lib/XXV/MODULES/TIMERS.pm:1207 ../lib/XXV/MODULES/TIMERS.pm:827
+#: ../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
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:436 ../lib/XXV/MODULES/AUTOTIMER.pm:647 ../lib/XXV/MODULES/EPG.pm:919 ../lib/XXV/MODULES/MEDIALIB.pm:1282 ../lib/XXV/MODULES/RECORDS.pm:1647 ../lib/XXV/MODULES/RECORDS.pm:1782
+#: ../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
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:1287
+#: ../html/mlcopy.tmpl:42 ../html/mldisplay.tmpl:78 ../html/mledit.tmpl:42 ../html/mlimport.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1281
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:1283
+#: ../html/mlcopy.tmpl:56 ../html/mldisplay.tmpl:48 ../html/mledit.tmpl:56 ../html/mlimport.tmpl:56 ../lib/XXV/MODULES/MEDIALIB.pm:1277
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:1290
+#: ../html/mlcopy.tmpl:64 ../html/mldisplay.tmpl:62 ../html/mledit.tmpl:64 ../html/mlimport.tmpl:64 ../lib/XXV/MODULES/MEDIALIB.pm:1284
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:1285
+#: ../html/mlcopy.tmpl:82 ../html/mldisplay.tmpl:193 ../html/mledit.tmpl:82 ../html/mlimport.tmpl:82 ../lib/XXV/MODULES/MEDIALIB.pm:1279
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:1288
+#: ../html/mlcopy.tmpl:90 ../html/mldisplay.tmpl:102 ../html/mledit.tmpl:90 ../html/mlimport.tmpl:90 ../lib/XXV/MODULES/MEDIALIB.pm:1282
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:1289
+#: ../html/mlcopy.tmpl:95 ../html/mldisplay.tmpl:92 ../html/mledit.tmpl:95 ../html/mlimport.tmpl:95 ../lib/XXV/MODULES/MEDIALIB.pm:1283
msgid "Mediatype"
msgstr "Medientyp"
@@ -755,7 +755,7 @@ msgid "Albums"
msgstr "Alben"
#--------------------
-#: ../html/mlist.tmpl:24 ../html/mlnavcontainer.tmpl:28 ../html/mlsearch.tmpl:46 ../html/search.tmpl:75 ../html/widgets/vtx.tmpl:28 ../lib/XXV/MODULES/AUTOTIMER.pm:1144 ../wml/next.tmpl:15 ../wml/now.tmpl:15 ../wml/program.tmpl:43 ../wml/search.tmpl:17
+#: ../html/mlist.tmpl:24 ../html/mlnavcontainer.tmpl:28 ../html/mlsearch.tmpl:46 ../html/search.tmpl:75 ../html/widgets/vtx.tmpl:28 ../lib/XXV/MODULES/AUTOTIMER.pm:1143 ../wml/next.tmpl:15 ../wml/now.tmpl:15 ../wml/program.tmpl:43 ../wml/search.tmpl:17
msgid "Search"
msgstr "Suche"
@@ -791,7 +791,7 @@ msgid "Selection"
msgstr "Auswählen"
#--------------------
-#: ../html/mlist.tmpl:74 ../lib/XXV/MODULES/MUSIC.pm:610
+#: ../html/mlist.tmpl:74 ../lib/XXV/MODULES/MUSIC.pm:615
msgid "Artist"
msgstr "Künstler"
@@ -801,7 +801,7 @@ msgid "Media list"
msgstr "Medienliste"
#--------------------
-#: ../html/mllistmedias.tmpl:43
+#: ../html/mllistmedias.tmpl:40
msgid "more"
msgstr "mehr"
@@ -881,7 +881,7 @@ msgid "Rules to move timer between channels"
msgstr "Regeln zum Verschieben von Timern zwischen Kanälen"
#--------------------
-#: ../html/movetimerlist.tmpl:54 ../html/movetimerlist.tmpl:55 ../lib/XXV/MODULES/MOVETIMER.pm:473
+#: ../html/movetimerlist.tmpl:54 ../html/movetimerlist.tmpl:55 ../lib/XXV/MODULES/MOVETIMER.pm:476
#. (25)
msgid "Create a new rule to move timer"
msgstr "Erzeuge eine neue Regel zum Verschieben von Timern"
@@ -904,22 +904,22 @@ msgid "Would you like to delete these rules?"
msgstr "Wollen Sie diese Regeln löschen?"
#--------------------
-#: ../html/movetimerlist.tmpl:7 ../lib/XXV/MODULES/MOVETIMER.pm:472
+#: ../html/movetimerlist.tmpl:7 ../lib/XXV/MODULES/MOVETIMER.pm:475
msgid "Edit rule to move timer"
msgstr "Regel zum Verschieben von Timern bearbeiten"
#--------------------
-#: ../html/movetimerlist.tmpl:83 ../lib/XXV/MODULES/MOVETIMER.pm:573
+#: ../html/movetimerlist.tmpl:83 ../lib/XXV/MODULES/MOVETIMER.pm:578
msgid "Destination"
msgstr "Ziel"
#--------------------
-#: ../html/movetimerlist.tmpl:84 ../lib/XXV/MODULES/MOVETIMER.pm:574 ../lib/XXV/MODULES/MOVETIMER.pm:643
+#: ../html/movetimerlist.tmpl:84 ../lib/XXV/MODULES/MOVETIMER.pm:579 ../lib/XXV/MODULES/MOVETIMER.pm:648
msgid "Move timer"
msgstr "Verschiebe Timer"
#--------------------
-#: ../html/movetimerlist.tmpl:85 ../lib/XXV/MODULES/MOVETIMER.pm:575
+#: ../html/movetimerlist.tmpl:85 ../lib/XXV/MODULES/MOVETIMER.pm:580
msgid "Change original timer"
msgstr "Ändere original Timer"
@@ -1019,7 +1019,7 @@ msgid "New recording"
msgstr "Neue Aufnahme"
#--------------------
-#: ../html/rdisplay.tmpl:167 ../lib/XXV/MODULES/RECORDS.pm:2130
+#: ../html/rdisplay.tmpl:167 ../lib/XXV/MODULES/RECORDS.pm:2144
msgid "Keywords"
msgstr "Stichwörter"
@@ -1029,12 +1029,12 @@ msgid "Lifetime"
msgstr "Lebenszeit"
#--------------------
-#: ../html/rdisplay.tmpl:190 ../lib/XXV/MODULES/AUTOTIMER.pm:167 ../lib/XXV/MODULES/TIMERS.pm:1208
+#: ../html/rdisplay.tmpl:190 ../lib/XXV/MODULES/AUTOTIMER.pm:160 ../lib/XXV/MODULES/TIMERS.pm:1260
msgid "Priority"
msgstr "Priorität"
#--------------------
-#: ../html/rdisplay.tmpl:65 ../html/rlist.tmpl:102 ../lib/XXV/MODULES/RECORDS.pm:1648 ../lib/XXV/MODULES/RECORDS.pm:1783
+#: ../html/rdisplay.tmpl:65 ../html/rlist.tmpl:102 ../lib/XXV/MODULES/RECORDS.pm:1658 ../lib/XXV/MODULES/RECORDS.pm:1795
msgid "Duration"
msgstr "Dauer"
@@ -1044,7 +1044,7 @@ msgid "Recording list"
msgstr "Aufnahmeliste"
#--------------------
-#: ../html/rdisplay.tmpl:78 ../lib/XXV/MODULES/RECORDS.pm:1934
+#: ../html/rdisplay.tmpl:78 ../lib/XXV/MODULES/RECORDS.pm:1947
msgid "Would you like to delete this recording?"
msgstr "Wollen Sie diese Aufnahme löschen?"
@@ -1059,7 +1059,7 @@ msgid "Cut recording"
msgstr "Aufnahme schneiden"
#--------------------
-#: ../html/rdisplay.tmpl:86 ../lib/XXV/MODULES/RECORDS.pm:2150
+#: ../html/rdisplay.tmpl:86 ../lib/XXV/MODULES/RECORDS.pm:2164
msgid "Edit recording"
msgstr "Aufnahme bearbeiten"
@@ -1169,7 +1169,7 @@ msgid "Search in fields"
msgstr "Suchfelder"
#--------------------
-#: ../html/search.tmpl:27 ../html/search.tmpl:35 ../html/search.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1310
+#: ../html/search.tmpl:27 ../html/search.tmpl:35 ../html/search.tmpl:42 ../lib/XXV/MODULES/MEDIALIB.pm:1304
msgid "All"
msgstr "Alle"
@@ -1281,7 +1281,7 @@ msgid "Planned recordings"
msgstr "Geplante Aufnahmen"
#--------------------
-#: ../html/tlist.tmpl:86 ../lib/XXV/MODULES/TIMERS.pm:834
+#: ../html/tlist.tmpl:86 ../lib/XXV/MODULES/TIMERS.pm:881
msgid "Would you like to delete this timer?"
msgstr "Wollen Sie diesen Timer löschen?"
@@ -1421,7 +1421,7 @@ msgid "Mute"
msgstr "Mute"
#--------------------
-#: ../html/widgets/player.tmpl:106 ../html/widgets/player.tmpl:70
+#: ../html/widgets/player.tmpl:106 ../html/widgets/player.tmpl:70 ../lib/XXV/MODULES/SVDRP.pm:744
msgid "Unknown"
msgstr "Unbekannt"
@@ -1526,82 +1526,82 @@ msgid "Next page"
msgstr "Nächste Seite"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1008
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1004
msgid "Autotimer saved!"
msgstr "Autotimer gespeichert!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1027
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1024
msgid "No autotimer defined for deletion! Please use adelete 'aid'!"
msgstr "Kein Autotimer zum Löschen definiert! Bitte verwende adelete 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1036 ../lib/XXV/MODULES/AUTOTIMER.pm:1065 ../lib/XXV/MODULES/AUTOTIMER.pm:1074 ../lib/XXV/MODULES/AUTOTIMER.pm:614
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1033 ../lib/XXV/MODULES/AUTOTIMER.pm:1063 ../lib/XXV/MODULES/AUTOTIMER.pm:1072 ../lib/XXV/MODULES/AUTOTIMER.pm:610
msgid "Autotimer '%s' does not exist in the database!"
msgstr "Autotimer '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1040
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1037
msgid "Autotimer %s deleted."
msgstr "Autotimer %s wurde gelöscht."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1057
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1055
msgid "No autotimer defined to toggle! Please use atoggle 'aid'!"
msgstr "Kein Autotimer zum Umschalten definiert! Bitte verwende atoggle 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1084
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1082
msgid "Couldn't update database to toggle autotimer(%d) !"
msgstr "Konnte Datenbank nicht aktualisieren, um Autotimer(%d) umzuschalten!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1096
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1094
msgid "Autotimer %s is disabled."
msgstr "Autotimer %s ist deaktiviert."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1098
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1096
msgid "Autotimer %s is activated."
msgstr "Autotimer %s ist aktiviert."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1143 ../lib/XXV/MODULES/SVDRP.pm:315 ../lib/XXV/MODULES/XMLTV.pm:663
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1142 ../lib/XXV/MODULES/SVDRP.pm:321 ../lib/XXV/MODULES/XMLTV.pm:691
msgid "Active"
msgstr "Aktiv"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1146 ../lib/XXV/MODULES/RECORDS.pm:1649 ../lib/XXV/MODULES/RECORDS.pm:1784
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1145 ../lib/XXV/MODULES/RECORDS.pm:1659 ../lib/XXV/MODULES/RECORDS.pm:1796
msgid "Start time"
msgstr "Startzeit"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1147
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1146
msgid "Stop time"
msgstr "Stoppzeit"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1148
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1147
msgid "Directory"
msgstr "Verzeichnis"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1149
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1148
msgid "Minimum length"
msgstr "Minimale Länge"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:1226
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:1225
msgid "Unknown channel : %s"
msgstr "Unbekannter Kanal : %s"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:138
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:132
msgid "Autotimer '%s' found: %s"
msgstr "Autotimer '%s' hat gefunden: %s"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:163 ../lib/XXV/MODULES/CHRONICLE.pm:176 ../lib/XXV/MODULES/CHRONICLE.pm:256 ../lib/XXV/MODULES/EPG.pm:688 ../lib/XXV/MODULES/EPG.pm:813 ../lib/XXV/MODULES/SHARE.pm:356 ../lib/XXV/MODULES/TIMERS.pm:1203
+#: ../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
msgid "Day"
msgstr "Datum"
@@ -1611,12 +1611,12 @@ msgid "This module searches for EPG entries with user-defined text and creates n
msgstr "Diese Modul sucht nach EPG Einträgen mit nutzerdefinierten Texten und erzeugt neue Timer."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:208
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:201
msgid "Autotimer has programmed %d new timer(s) since last report to %s"
msgstr "Autotimer hat %d neuen Timer programmiert, seit letztem Report an %s"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:27 ../lib/XXV/MODULES/CHRONICLE.pm:24 ../lib/XXV/MODULES/EVENTS.pm:30 ../lib/XXV/MODULES/HTTPD.pm:59 ../lib/XXV/MODULES/INTERFACE.pm:29 ../lib/XXV/MODULES/KEYWORDS.pm:25 ../lib/XXV/MODULES/LOGREAD.pm:28 ../lib/XXV/MODULES/MEDIALIB.pm:29 ../lib/XXV/MODULES/MOVETIMER.pm:23 ../lib/XXV/MODULES/MUSIC.pm:36 ../lib/XXV/MODULES/REMOTE.pm:25 ../lib/XXV/MODULES/REPORT.pm:26 ../lib/XXV/MODULES/ROBOT.pm:25 ../lib/XXV/MODULES/SHARE.pm:61 ../lib/XXV/MODULES/STATUS.pm:28 ../lib/XXV/MODULES/TELNET.pm:26 ../lib/XXV/MODULES/VTX.pm:25 ../lib/XXV/MODULES/WAPD.pm:39 ../lib/XXV/MODULES/XMLTV.pm:29 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:66 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:30 ../lib/XXV/OUTPUT/NEWS/RSS.pm:30 ../lib/XXV/OUTPUT/NEWS/VDR.pm:27
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:27 ../lib/XXV/MODULES/CHRONICLE.pm:24 ../lib/XXV/MODULES/EVENTS.pm:30 ../lib/XXV/MODULES/HTTPD.pm:59 ../lib/XXV/MODULES/INTERFACE.pm:29 ../lib/XXV/MODULES/KEYWORDS.pm:25 ../lib/XXV/MODULES/LOGREAD.pm:28 ../lib/XXV/MODULES/MEDIALIB.pm:29 ../lib/XXV/MODULES/MOVETIMER.pm:23 ../lib/XXV/MODULES/MUSIC.pm:36 ../lib/XXV/MODULES/REMOTE.pm:25 ../lib/XXV/MODULES/REPORT.pm:26 ../lib/XXV/MODULES/ROBOT.pm:26 ../lib/XXV/MODULES/SHARE.pm:61 ../lib/XXV/MODULES/STATUS.pm:28 ../lib/XXV/MODULES/TELNET.pm:26 ../lib/XXV/MODULES/VTX.pm:25 ../lib/XXV/MODULES/WAPD.pm:39 ../lib/XXV/MODULES/XMLTV.pm:29 ../lib/XXV/OUTPUT/NEWS/JABBER.pm:66 ../lib/XXV/OUTPUT/NEWS/MAIL.pm:30 ../lib/XXV/OUTPUT/NEWS/RSS.pm:30 ../lib/XXV/OUTPUT/NEWS/VDR.pm:27
msgid "Activate this service"
msgstr "Aktiviere diesen Dienst"
@@ -1626,127 +1626,127 @@ msgid "Exclude channels from autotimer"
msgstr "Schliesse Kanäle von Autotimer aus."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:337
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:331
msgid "Searching for autotimer ..."
msgstr "Schaue nach Autotimer ..."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:347
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:341
msgid "Autotimer process created %d timers and modified %d timers."
msgstr "Autotimervorgang hat %d Timer erzeugt und %d Timer modifiziert."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:351
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:345
msgid "Back to autotimer listing."
msgstr "Zurück zur Autotimer Liste"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:419 ../lib/XXV/MODULES/AUTOTIMER.pm:424
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:413 ../lib/XXV/MODULES/AUTOTIMER.pm:418
msgid "Search for autotimer '%s'"
msgstr "Schaue nach Autotimer '%s'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:432
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:426
msgid "Found %d entries for '%s' in EPG database."
msgstr "%d Einträge für '%s' in EPG Datenbank gefunden."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:48
-msgid "Display status of autotimers."
-msgstr "Status der Autotimer anzeigen."
-
-#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:532
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:526
msgid "Could not save timer for '%s' : %s"
msgstr "Konnte Timer für '%s' nicht speichern : %s"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:537
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:531
msgid "Modified timer for '%s'."
msgstr "Timer für '%s' modifiziert."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:541
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:535
msgid "Timer for '%s' has been created."
msgstr "Timer für '%s' erzeugt."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:549
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:543
msgid "Created %d timer for '%s'."
msgstr "%d Timer für '%s' erzeugt. "
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:558
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:55
+msgid "Delete a autotimer 'aid'"
+msgstr "Löschen eines Autotimer 'aid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:552
msgid "Modified %d timer for '%s'."
msgstr "%d Timer für '%s' modifiziert."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:573
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:567
msgid "Read new timers into database."
msgstr "Lese neue Timer in Datenbank."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:61
-msgid "Delete a autotimer 'aid'"
-msgstr "Löschen eines Autotimer 'aid'"
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:62
+msgid "Edit an autotimer 'aid'"
+msgstr "Editieren eines Autotimer 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:636
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:632
msgid "Mon"
msgstr "Mo"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:637
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:633
msgid "Tue"
msgstr "Di"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:638
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:634
msgid "Wed"
msgstr "Mi"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:639
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:635
msgid "Thu"
msgstr "Do"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:640
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:636
msgid "Fri"
msgstr "Fr"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:641
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:637
msgid "Sat"
msgstr "Sa"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:642
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:638
msgid "Sun"
msgstr "So"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:652 ../wml/tlist.tmpl:26 ../wml/tlist.tmpl:67
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:648 ../wml/tlist.tmpl:26 ../wml/tlist.tmpl:67
msgid "Timer"
msgstr "Timer"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:653
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:649
msgid "Existing recording"
msgstr "Vorhandene Aufnahme"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:654
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:650
msgid "Recording chronicle"
msgstr "Aufnahmechronik"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:671
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:667
msgid "Activate this autotimer"
msgstr "Aktiviere diesen Autotimer"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:675
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:671
msgid ""
"Search terms to search for EPG entries.\n"
"You can also fine tune your search :\n"
@@ -1761,162 +1761,157 @@ msgstr ""
"* durch ein Minuszeichen zum Ausschliessen von Suchbegriffen z.B. 'Heute,-Morgen'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:68
-msgid "Edit an autotimer 'aid'"
-msgstr "Editieren eines Autotimer 'aid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:683
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:679
msgid "Search in this EPG fields"
msgstr "Suche in diesen EPG-Feldern"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:704 ../lib/XXV/MODULES/AUTOTIMER.pm:754 ../lib/XXV/MODULES/AUTOTIMER.pm:831 ../lib/XXV/MODULES/USER.pm:401 ../lib/XXV/MODULES/USER.pm:408 ../lib/XXV/MODULES/USER.pm:424
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:69
+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
msgid "You can choose: %s!"
msgstr "Sie können wählen: %s!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:719
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:715
msgid "Limit search to these channels"
msgstr "Begrenze Suche auf diese Kanäle"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:727
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:723
msgid "The channel '%s' does not exist!"
msgstr "Der Kanal '%s' existiert nicht!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:734
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:730
msgid "Ignore retries with same title?"
msgstr "Ignoriere Wiederholungen mit gleichen Titel?"
#--------------------
#: ../lib/XXV/MODULES/AUTOTIMER.pm:75
-msgid "Search for autotimer with text 'aid'"
-msgstr "Suche nach Autotimer mit Text 'aid'"
+msgid "Show autotimer 'aid'"
+msgstr "Zeige Autotimer 'aid'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:770 ../lib/XXV/MODULES/TIMERS.pm:652
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:766 ../lib/XXV/MODULES/TIMERS.pm:697
msgid "Start time in format 'HH:MM'"
msgstr "Startzeit im Format 'HH:MM'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:773
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:769
msgid "You set a start time without an end time!"
msgstr "Startzeitpunkt ohne Stoppzeitpunkt definiert!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:777 ../lib/XXV/MODULES/AUTOTIMER.pm:783 ../lib/XXV/MODULES/AUTOTIMER.pm:800 ../lib/XXV/MODULES/AUTOTIMER.pm:806 ../lib/XXV/MODULES/TIMERS.pm:656 ../lib/XXV/MODULES/TIMERS.pm:662 ../lib/XXV/MODULES/TIMERS.pm:675 ../lib/XXV/MODULES/TIMERS.pm:681
+#: ../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
msgid "The time is incorrect!"
msgstr "Die Zeit ist nicht korrekt!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:793 ../lib/XXV/MODULES/TIMERS.pm:671
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:789 ../lib/XXV/MODULES/TIMERS.pm:716
msgid "End time in format 'HH:MM'"
msgstr "Endzeit im Format 'HH:MM'"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:796
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:792
msgid "You set an end time without a start time!"
msgstr "Stoppzeitpunkt ohne Startzeitpunkt definiert!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:81
-msgid "Show autotimer 'aid'"
-msgstr "Zeige Autotimer 'aid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:811
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:807
msgid "Only search these weekdays"
msgstr "Suche nur an diesen Wochentagen"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:844
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:81
+msgid "Start autotimer search."
+msgstr "Autotimersuche durchführen"
+
+#--------------------
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:840
msgid "Use PDC time to control created timer"
msgstr "Verwende VPS zum Überwachen neuer Timer"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:848 ../lib/XXV/MODULES/TIMERS.pm:32
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:844 ../lib/XXV/MODULES/TIMERS.pm:40
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:856 ../lib/XXV/MODULES/AUTOTIMER.pm:870 ../lib/XXV/MODULES/AUTOTIMER.pm:883 ../lib/XXV/MODULES/AUTOTIMER.pm:899 ../lib/XXV/MODULES/AUTOTIMER.pm:915 ../lib/XXV/MODULES/CHANNELS.pm:1082 ../lib/XXV/MODULES/CHANNELS.pm:1113 ../lib/XXV/MODULES/CHANNELS.pm:1152 ../lib/XXV/MODULES/CHANNELS.pm:1165 ../lib/XXV/MODULES/CHANNELS.pm:1191 ../lib/XXV/MODULES/CHANNELS.pm:1217 ../lib/XXV/MODULES/CHANNELS.pm:1230 ../lib/XXV/MODULES/CHANNELS.pm:1243 ../lib/XXV/MODULES/CHANNELS.pm:1256 ../lib/XXV/MODULES/GRAB.pm:104 ../lib/XXV/MODULES/GRAB.pm:232 ../lib/XXV/MODULES/GRAB.pm:240 ../lib/XXV/MODULES/GRAB.pm:35 ../lib/XXV/MODULES/GRAB.pm:49 ../lib/XXV/MODULES/GRAB.pm:72 ../lib/XXV/MODULES/GRAB.pm:91 ../lib/XXV/MODULES/RECORDS.pm:109 ../lib/XXV/MODULES/RECORDS.pm:2081 ../lib/XXV/MODULES/RECORDS.pm:2095 ../lib/XXV/MODULES/STREAM.pm:100 ../lib/XXV/MODULES/STREAM.pm:114 ../lib/XXV/MODULES/SVDRP.pm:228 ../lib/XXV/MODULES/TIMERS.pm:697 ../lib/XXV/MODULES/TIMERS.pm:713
+#: ../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
msgid "Value incorrect!"
msgstr "Der Wert ist nicht korrekt!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:862 ../lib/XXV/MODULES/TIMERS.pm:37
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:858 ../lib/XXV/MODULES/TIMERS.pm:54
msgid "Buffer time in minutes past the scheduled end of a recording"
msgstr "Pufferzeit in Minuten, nach dem zeitlichen Ende der Aufnahme."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:87
-msgid "Start autotimer search."
-msgstr "Autotimersuche durchführen"
-
-#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:876
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:872
msgid "Minimum play time in minutes"
msgstr "Mindestlänge in Minuten"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:889 ../lib/XXV/MODULES/RECORDS.pm:2088 ../lib/XXV/MODULES/TIMERS.pm:687
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:88
+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
msgid "Priority (%d ... %d)"
msgstr "Priorität (%d ... %d)"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:895 ../lib/XXV/MODULES/TIMERS.pm:693
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:891 ../lib/XXV/MODULES/TIMERS.pm:738
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:905 ../lib/XXV/MODULES/RECORDS.pm:2074 ../lib/XXV/MODULES/TIMERS.pm:703
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:901 ../lib/XXV/MODULES/RECORDS.pm:2088 ../lib/XXV/MODULES/TIMERS.pm:748
msgid "Lifetime (%d ... %d)"
msgstr "Lebenszeit (%d ... %d)"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:911 ../lib/XXV/MODULES/TIMERS.pm:709
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:907 ../lib/XXV/MODULES/TIMERS.pm:754
msgid "Sorry, but the maximum life time is limited to %d!"
msgstr "Entschuldigung, aber die maximale Lebenszeit ist auf %d begrenzt!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:921
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:917
msgid "Group all recordings into one directory"
msgstr "Gruppiere alle Aufnahmen in einem Verzeichnis"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:934 ../lib/XXV/MODULES/AUTOTIMER.pm:967
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:930 ../lib/XXV/MODULES/AUTOTIMER.pm:963
msgid "%Y-%m-%d %H:%M:%S"
msgstr "%d.%m.%Y %H:%M:%S"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:94
-msgid "Toggle autotimer on or off 'aid'"
-msgstr "Umschalten der Autotimer zwischen Ein und Aus 'aid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:940
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:936
msgid "Start date as YYYY-MM-DD HH:MM:SS."
msgstr "Startdatum als DD.MM.YYYY HH:MM:SS."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:947 ../lib/XXV/MODULES/AUTOTIMER.pm:979 ../lib/XXV/MODULES/TIMERS.pm:629
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:943 ../lib/XXV/MODULES/AUTOTIMER.pm:975 ../lib/XXV/MODULES/TIMERS.pm:674
msgid "Language=English"
msgstr "Language=German,DateFormat=non-US"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:954 ../lib/XXV/MODULES/AUTOTIMER.pm:986 ../lib/XXV/MODULES/TIMERS.pm:643
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:950 ../lib/XXV/MODULES/AUTOTIMER.pm:982 ../lib/XXV/MODULES/TIMERS.pm:688
msgid "The day is incorrect or was in a wrong format!"
msgstr "Das eingegebene Datum ist nicht korrekt oder hatte ein falsches Format!"
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:973
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:969
msgid "Stop date as YYYY-MM-DD HH:MM:SS."
msgstr "Enddatum als DD.MM.YYYY HH:MM:SS."
#--------------------
-#: ../lib/XXV/MODULES/AUTOTIMER.pm:992 ../lib/XXV/MODULES/TIMERS.pm:720
+#: ../lib/XXV/MODULES/AUTOTIMER.pm:988 ../lib/XXV/MODULES/TIMERS.pm:765
msgid "Add keywords to recording"
msgstr "Stichwörter zur Aufnahme hinzufügen"
@@ -1926,92 +1921,92 @@ msgid "Deletes one or more channels 'pos'"
msgstr "Löscht einen oder mehrere Kanäle 'pos'"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1047 ../lib/XXV/MODULES/CHANNELS.pm:1052 ../lib/XXV/MODULES/CHANNELS.pm:1396 ../lib/XXV/MODULES/REMOTE.pm:272 ../lib/XXV/MODULES/REMOTE.pm:277
+#: ../lib/XXV/MODULES/CHANNELS.pm:1050 ../lib/XXV/MODULES/CHANNELS.pm:1055 ../lib/XXV/MODULES/CHANNELS.pm:1400 ../lib/XXV/MODULES/REMOTE.pm:277 ../lib/XXV/MODULES/REMOTE.pm:282
msgid "Channel '%s' does not exist in the database!"
msgstr "Der Kanal '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1068
+#: ../lib/XXV/MODULES/CHANNELS.pm:1071
msgid "Which video disk recorder should used"
msgstr "Welcher Video Disk Rekorder soll genutzt werden"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1075 ../lib/XXV/MODULES/CHANNELS.pm:1365 ../lib/XXV/MODULES/CHANNELS.pm:615
+#: ../lib/XXV/MODULES/CHANNELS.pm:1078 ../lib/XXV/MODULES/CHANNELS.pm:1369 ../lib/XXV/MODULES/CHANNELS.pm:616
msgid "Position"
msgstr "Position"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1093 ../lib/XXV/MODULES/CHANNELS.pm:1265
+#: ../lib/XXV/MODULES/CHANNELS.pm:1096 ../lib/XXV/MODULES/CHANNELS.pm:1268
msgid "New channel"
msgstr "Neuer Kanal"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1120 ../lib/XXV/MODULES/CHANNELS.pm:604
+#: ../lib/XXV/MODULES/CHANNELS.pm:1123 ../lib/XXV/MODULES/CHANNELS.pm:605
msgid "Signal source"
msgstr "Signalquelle"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1145 ../lib/XXV/MODULES/CHANNELS.pm:605
+#: ../lib/XXV/MODULES/CHANNELS.pm:1148 ../lib/XXV/MODULES/CHANNELS.pm:606
msgid "Symbol rate"
msgstr "Symbolrate"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1210
+#: ../lib/XXV/MODULES/CHANNELS.pm:1213
msgid "Service ID (SID)"
msgstr "Service ID (SID)"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1223
+#: ../lib/XXV/MODULES/CHANNELS.pm:1226
msgid "Network ID (NID)"
msgstr "Netzwerk ID (NID)"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1236
+#: ../lib/XXV/MODULES/CHANNELS.pm:1239
msgid "Transport stream ID (TID)"
msgstr "Transport stream ID (TID)"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1249
+#: ../lib/XXV/MODULES/CHANNELS.pm:1252
msgid "Radio ID (RID)"
msgstr "Radio ID (RID)"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:129
+#: ../lib/XXV/MODULES/CHANNELS.pm:128
msgid "The system has saved %d channels from %d groups"
msgstr "Das System hat %d Kanäle aus %d Gruppen gespeichert"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1340
+#: ../lib/XXV/MODULES/CHANNELS.pm:1344
msgid "No channel defined for deletion! Please use cdelete 'pos'!"
msgstr "Kanal zu löschen definiert! Bitte verwende cdelete 'pos'"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1412
+#: ../lib/XXV/MODULES/CHANNELS.pm:1416
msgid "Found no channel to delete!"
msgstr "Kein Kanal zum Löschen gefunden!"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1427
+#: ../lib/XXV/MODULES/CHANNELS.pm:1431
msgid "New %s channel: %s on position: %d %s"
msgstr "Neuer %s Kanal: %s auf Position: %d %s"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1429
+#: ../lib/XXV/MODULES/CHANNELS.pm:1433
msgid "TV"
msgstr "TV"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1430
+#: ../lib/XXV/MODULES/CHANNELS.pm:1434
msgid "Radio"
msgstr "Radio"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1433
+#: ../lib/XXV/MODULES/CHANNELS.pm:1437
msgid "(encrypted)"
msgstr "(verschlüsselt)"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:1440
+#: ../lib/XXV/MODULES/CHANNELS.pm:1444
msgid "Found %d new channels!"
msgstr "%d neue Kanäle gefunden!"
@@ -2056,52 +2051,52 @@ msgid "There are %d channels inserted, %d channels updated, %d channels deleted
msgstr "Es wurden %d Kanäle hinzugefügt, %d Kanäle aktualisiert und %d Kanäle in der Datenbank gelöscht."
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:603
+#: ../lib/XXV/MODULES/CHANNELS.pm:604
msgid "Parameters"
msgstr "Parameter"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:606
+#: ../lib/XXV/MODULES/CHANNELS.pm:607
msgid "Video PID"
msgstr "Video PID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:607
+#: ../lib/XXV/MODULES/CHANNELS.pm:608
msgid "Audio PID"
msgstr "Audio PID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:608
+#: ../lib/XXV/MODULES/CHANNELS.pm:609
msgid "Teletext PID"
msgstr "Videotext PID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:609
+#: ../lib/XXV/MODULES/CHANNELS.pm:610
msgid "Conditional access"
msgstr "Zugangsberechtigungssystem"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:610
+#: ../lib/XXV/MODULES/CHANNELS.pm:611
msgid "SID"
msgstr "SID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:611
+#: ../lib/XXV/MODULES/CHANNELS.pm:612
msgid "TID"
msgstr "TID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:612
+#: ../lib/XXV/MODULES/CHANNELS.pm:613
msgid "NID"
msgstr "NID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:613
+#: ../lib/XXV/MODULES/CHANNELS.pm:614
msgid "RID"
msgstr "RID"
#--------------------
-#: ../lib/XXV/MODULES/CHANNELS.pm:614
+#: ../lib/XXV/MODULES/CHANNELS.pm:615
msgid "Channel group"
msgstr "Kanalgruppe"
@@ -2131,9 +2126,9 @@ msgid "This module saves recordings in a chronicle."
msgstr "Dieses Modul speichert Aufnahmen in einer Chronik."
#--------------------
-#: ../lib/XXV/MODULES/CHRONICLE.pm:247
-msgid "No 'string' to search for! Please use chrsearch 'text'."
-msgstr "Kein 'Text' zum Suchen! Bitte verwende chrsearch 'text'"
+#: ../lib/XXV/MODULES/CHRONICLE.pm:249
+msgid "No 'string' to search defined! Please use chrsearch 'text'."
+msgstr "Kein 'Text' zum Suchen definiert! Bitte verwende chrsearch 'text'"
#--------------------
#: ../lib/XXV/MODULES/CHRONICLE.pm:32
@@ -2141,12 +2136,12 @@ msgid "List recording chronicle"
msgstr "Zeige Aufnahmechronik"
#--------------------
-#: ../lib/XXV/MODULES/CHRONICLE.pm:329
+#: ../lib/XXV/MODULES/CHRONICLE.pm:332
msgid "No ID to delete! Please use chrdelete 'id'"
msgstr "Kein ID zum Löschen! Bitte verwende chrdelete 'id'"
#--------------------
-#: ../lib/XXV/MODULES/CHRONICLE.pm:338
+#: ../lib/XXV/MODULES/CHRONICLE.pm:341
msgid "Chronicle entry %s deleted."
msgstr "Eintrag %s in der Chronik gelöscht."
@@ -2161,52 +2156,52 @@ msgid "Delete within chronicle with 'ID'"
msgstr "Lösche in der Chronik mit 'ID'"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:109
-msgid "Settings for XXV"
-msgstr "Einstellungen für XXV"
+#: ../lib/XXV/MODULES/CONFIG.pm:110
+msgid "Global settings"
+msgstr "Allgemeine Einstellungen"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:142 ../lib/XXV/MODULES/CONFIG.pm:216
+#: ../lib/XXV/MODULES/CONFIG.pm:144 ../lib/XXV/MODULES/CONFIG.pm:219
msgid "Sorry, but section %s does not exist in the configuration!"
msgstr "Verzeihung, aber der Abschnitt %s existiert nicht in der Konfiguration!"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:147
+#: ../lib/XXV/MODULES/CONFIG.pm:149
msgid "Sorry, but the settings in module: %s do not exist!"
msgstr "Verzeihung, aber die Einstellungen in Modul: %s existieren nicht!"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:158
+#: ../lib/XXV/MODULES/CONFIG.pm:160
msgid "No description"
msgstr "Keine Beschreibung"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:168
-msgid "%s manual"
-msgstr "%s Dokumentation"
-
-#--------------------
#: ../lib/XXV/MODULES/CONFIG.pm:17
msgid "This module edits, writes and saves the configuration."
msgstr "Dieses Modul bearbeitet, schreibt und übernimmt die Konfiguration."
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:171
+#: ../lib/XXV/MODULES/CONFIG.pm:170
+msgid "%s manual"
+msgstr "%s Dokumentation"
+
+#--------------------
+#: ../lib/XXV/MODULES/CONFIG.pm:173
msgid "Edit configuration %s"
msgstr "Konfiguration %s bearbeiten"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:175
+#: ../lib/XXV/MODULES/CONFIG.pm:177
msgid "Section: '%s' saving ... please wait."
msgstr "Abschnitt: '%s' speichere .. bitte warten."
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:198
+#: ../lib/XXV/MODULES/CONFIG.pm:200
msgid "Configuration written to '%s'."
msgstr "Konfiguration nach '%s' geschrieben."
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:209
+#: ../lib/XXV/MODULES/CONFIG.pm:212
msgid "Need a name of the module to display the configuration!"
msgstr "Ich benötige einen Namen des Moduls um die Konfiguration anzuzeigen!"
@@ -2216,12 +2211,12 @@ msgid "Edit configuration 'section'"
msgstr "Konfiguration bearbeiten 'Abschnitt'"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:260
+#: ../lib/XXV/MODULES/CONFIG.pm:263
msgid "Couldn't find %s in %s!"
msgstr "Bearbeiten war erfolgreich"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:267
+#: ../lib/XXV/MODULES/CONFIG.pm:270
msgid "Edit successful!"
msgstr "Bearbeiten war erfolgreich!"
@@ -2231,7 +2226,7 @@ msgid "Get configuration from 'modname'"
msgstr "Hole die Konfiguration von 'modname'"
#--------------------
-#: ../lib/XXV/MODULES/CONFIG.pm:309
+#: ../lib/XXV/MODULES/CONFIG.pm:313
msgid ""
"%sThis is the xxv %s server.\n"
"Please use the following commands:\n"
@@ -2260,117 +2255,122 @@ msgid "There none module reloaded."
msgstr "Es wurden keine Module neugeladen."
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:1321 ../lib/XXV/MODULES/VTX.pm:1390
+#: ../lib/XXV/MODULES/EPG.pm:1335 ../lib/XXV/MODULES/VTX.pm:1394
msgid "No channel defined!"
msgstr "Kein Kanal definiert!"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:151
+#: ../lib/XXV/MODULES/EPG.pm:1548
+msgid "No event id defined!"
+msgstr "Keine ID zum Event definiert!"
+
+#--------------------
+#: ../lib/XXV/MODULES/EPG.pm:159
msgid "EPG table contains %d entries and since the last login on %s %d new entries."
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:1532
-msgid "No event id defined!"
-msgstr "Keine ID zum Event definiert!"
+#: ../lib/XXV/MODULES/EPG.pm:1700 ../lib/XXV/MODULES/GRAB.pm:241 ../lib/XXV/MODULES/RECORDS.pm:2794 ../lib/XXV/MODULES/VTX.pm:1457
+msgid "Sorry, get image is'nt supported"
+msgstr "Entschuldigung, Bilder werden nicht unterstützt!"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:17
+#: ../lib/XXV/MODULES/EPG.pm:18
msgid "This module reads new EPG data and saves it to the database."
msgstr "Dieses Modul liest neue EPG-Daten und speichert sie in der Datenbank."
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:25
+#: ../lib/XXV/MODULES/EPG.pm:26
msgid "Location of additional EPG images."
msgstr "Position von zusätzlichen EPG Bildern."
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:282
+#: ../lib/XXV/MODULES/EPG.pm:291
msgid "Read EPG data ..."
msgstr "Lese EPG Daten"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:30
+#: ../lib/XXV/MODULES/EPG.pm:31
msgid "How often EPG data are to be analyzed (in seconds)"
msgstr "Wie oft sollen EPG Daten analysiert werden (in Sekunden)"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:318
+#: ../lib/XXV/MODULES/EPG.pm:327
msgid "%d events in database updated."
msgstr "Es wurden %d Einträge in Datenbank aktualisiert."
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:36
+#: ../lib/XXV/MODULES/EPG.pm:37
msgid "Preferred program times. (eg. 12:00, 18:00)"
msgstr "Die bevorzugten Programmzeiten (Kommagetrenne Liste)"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:409
+#: ../lib/XXV/MODULES/EPG.pm:418
msgid "Analyze channel '%s'"
msgstr "Untersuche Kanal '%s'"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:42
+#: ../lib/XXV/MODULES/EPG.pm:44
msgid "How much hours to display in schema"
msgstr "Wieviel im Schema anzuzeigen Stunden"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:50
+#: ../lib/XXV/MODULES/EPG.pm:53
msgid "Search within EPG data"
msgstr "Suche in EPG-Daten"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:55
-msgid "List program for channel 'channel name'"
-msgstr "Zeige Programm für Kanal 'Kanalname'"
-
-#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:566
+#: ../lib/XXV/MODULES/EPG.pm:575
msgid "No title"
msgstr "Kein Titel"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:60
+#: ../lib/XXV/MODULES/EPG.pm:58
+msgid "List program for channel 'channel name'"
+msgstr "Zeige Programm für Kanal 'Kanalname'"
+
+#--------------------
+#: ../lib/XXV/MODULES/EPG.pm:63
msgid "Show program 'eventid'"
msgstr "Zeige Sendung 'eventid'"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:65
+#: ../lib/XXV/MODULES/EPG.pm:68
msgid "Display events currently showing."
msgstr "Zeigt Sendungen, welche aktuell laufen."
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:70
+#: ../lib/XXV/MODULES/EPG.pm:73
msgid "Display events showing next."
msgstr "Zeigt Sendungen, welche als nächstes laufen."
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:75
+#: ../lib/XXV/MODULES/EPG.pm:78
msgid "Display events in a schematic way"
msgstr "Zeigt Sendungen in einer übersichtlichen Weise"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:790
+#: ../lib/XXV/MODULES/EPG.pm:801
msgid "No channel available!"
msgstr "Keine Kanäle verfügbar!"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:80
+#: ../lib/XXV/MODULES/EPG.pm:83
msgid "Update EPG data."
msgstr "Aktualisiere EPG Daten"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:912
+#: ../lib/XXV/MODULES/EPG.pm:924
msgid "No ID defined to display this program! Please use display 'eid'!"
msgstr "Keine ID einer Sendung, zur Anzeige dieses Programmes, definiert! Bitte verwende display 'eid'"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:94
+#: ../lib/XXV/MODULES/EPG.pm:97
msgid "Display the current program running in the VDR"
msgstr "Zeigt die Sendung, die im VDR läuft"
#--------------------
-#: ../lib/XXV/MODULES/EPG.pm:979
+#: ../lib/XXV/MODULES/EPG.pm:991
msgid "Event '%d' does not exist in the database!"
msgstr "Sendung '%d' existiert nicht in der Datenbank!"
@@ -2395,12 +2395,12 @@ msgid ""
msgstr ""
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:347
+#: ../lib/XXV/MODULES/EVENTS.pm:348
msgid "Time"
msgstr "Zeit"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:349 ../lib/XXV/OUTPUT/Console.pm:115 ../wml/widgets/message.tmpl:4 ../wml/widgets/message.tmpl:7
+#: ../lib/XXV/MODULES/EVENTS.pm:350 ../lib/XXV/OUTPUT/Console.pm:115 ../wml/widgets/message.tmpl:4 ../wml/widgets/message.tmpl:7
msgid "Message"
msgstr "Nachricht"
@@ -2410,17 +2410,17 @@ msgid "Used host of referred link inside reports."
msgstr "Benutzter Host für verweisende Links innerhalb der Reporte."
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:395
+#: ../lib/XXV/MODULES/EVENTS.pm:398
msgid "Sorry, but none type requested!"
msgstr "Entschuldigung, es wurde kein Typ angefordert!"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:400
+#: ../lib/XXV/MODULES/EVENTS.pm:403
msgid "Sorry, but this type '%s' does not exist on this system!"
msgstr "Entschuldigung, aber dieser Typ '%s' exitistiert in diesem System nicht!"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:404
+#: ../lib/XXV/MODULES/EVENTS.pm:407
msgid "Sorry, but this module is not active!"
msgstr "Entschuldigung, aber dieses Modul ist nicht aktiv!"
@@ -2430,37 +2430,37 @@ msgid "Display the actual news site 'typ'"
msgstr "Zeigt die aktuelle Nachrichtenseite 'typ' an"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:443
+#: ../lib/XXV/MODULES/EVENTS.pm:446
msgid "All messages"
msgstr "Alle Meldungen"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:444 ../lib/XXV/MODULES/EVENTS.pm:469
+#: ../lib/XXV/MODULES/EVENTS.pm:447 ../lib/XXV/MODULES/EVENTS.pm:472
msgid "Harmless"
msgstr "Harmlos"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:445
+#: ../lib/XXV/MODULES/EVENTS.pm:448
msgid "Interesting"
msgstr "Interessant"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:446
+#: ../lib/XXV/MODULES/EVENTS.pm:449
msgid "Very interesting"
msgstr "Sehr interessant"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:447
+#: ../lib/XXV/MODULES/EVENTS.pm:450
msgid "Important"
msgstr "Wichtig"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:448
+#: ../lib/XXV/MODULES/EVENTS.pm:451
msgid "Very important"
msgstr "Sehr wichtig"
#--------------------
-#: ../lib/XXV/MODULES/EVENTS.pm:449
+#: ../lib/XXV/MODULES/EVENTS.pm:452
msgid "None messages"
msgstr "Keine Meldungen"
@@ -2470,112 +2470,117 @@ msgid "Display the event list"
msgstr "Zeigt die Liste der Ereignisse"
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:19
+#: ../lib/XXV/MODULES/GRAB.pm:20
msgid "This module grab a picture from video output."
msgstr "Dieses Modul holt das Bilder des Videoausganges."
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:26
+#: ../lib/XXV/MODULES/GRAB.pm:27
msgid "Image width"
msgstr "Bildbreite"
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:40
+#: ../lib/XXV/MODULES/GRAB.pm:270
+msgid "Failed"
+msgstr "Fehlgeschlagen"
+
+#--------------------
+#: ../lib/XXV/MODULES/GRAB.pm:41
msgid "Image height"
msgstr "Bildhöhe"
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:54
+#: ../lib/XXV/MODULES/GRAB.pm:55
msgid "Text to display in the grabbed picture."
msgstr "Im Screenshots anzuzeigender Text."
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:64
+#: ../lib/XXV/MODULES/GRAB.pm:65
msgid "Vertical position of displayed text, in pixels."
msgstr "Vertikalen Position des anzuzeigen Text, in Pixeln."
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:77 ../lib/XXV/MODULES/STATUS.pm:62
+#: ../lib/XXV/MODULES/GRAB.pm:78 ../lib/XXV/MODULES/STATUS.pm:56
msgid "TrueType font to draw overlay text"
msgstr "TrueType Zeichensatz für Overlaytext."
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:83
+#: ../lib/XXV/MODULES/GRAB.pm:84
msgid "Font size to draw image text (only for ttf font!)."
msgstr "Zeichengröße für Overlaytext (nur für TTF Font!)."
#--------------------
-#: ../lib/XXV/MODULES/GRAB.pm:96
+#: ../lib/XXV/MODULES/GRAB.pm:97
msgid "Quality from image in percent."
msgstr "Qualität des Bildes in Prozent."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:101
+#: ../lib/XXV/MODULES/HTTPD.pm:103
msgid "Dump additional debugging information, required only for software development."
msgstr "Ausgeben von zusätzliche Informationen zur Fehlersuche, wird nur für die Software-Entwicklung benötigt."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:271 ../lib/XXV/MODULES/WAPD.pm:204
+#: ../lib/XXV/MODULES/HTTPD.pm:274 ../lib/XXV/MODULES/WAPD.pm:204
msgid "You are not authorized to use this system!"
msgstr "Sie haben keine Berechtigungen für dieses System!"
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:436
+#: ../lib/XXV/MODULES/HTTPD.pm:429
msgid "Module '%s' is'nt loaded!"
msgstr "Modul '%s' wurde nicht geladen!"
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:437
+#: ../lib/XXV/MODULES/HTTPD.pm:430
msgid "Internal Server Error"
msgstr "Interner Serverfehler"
#--------------------
+#: ../lib/XXV/MODULES/HTTPD.pm:508
+msgid "Traffic on HTTPD socket since %s: transmitted: %s - received: %s - connections: %d."
+msgstr "Datenverkehr des HTTPD Anschlusses seit %s: gesendet: %s - empfangen: %s - Verbindungen: %d."
+
+#--------------------
#: ../lib/XXV/MODULES/HTTPD.pm:51
msgid "This module is a multisession HTTPD server."
msgstr "Dieses Modul ist ein Mehrfachsitzung HTTPD Server."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:516
-msgid "Traffic on HTTPD socket since %s: transmitted: %s - received: %s - connections: %d."
-msgstr "Datenverkehr des HTTPD Anschlusses seit %s: gesendet: %s - empfangen: %s - Verbindungen: %d."
-
-#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:569 ../lib/XXV/OUTPUT/Console.pm:678 ../lib/XXV/OUTPUT/Html.pm:980
+#: ../lib/XXV/MODULES/HTTPD.pm:562 ../lib/XXV/OUTPUT/Console.pm:678 ../lib/XXV/OUTPUT/Html.pm:976
msgid "Could not open file '%s'! : %s"
msgstr "Konnte Datei '%s' nicht öffnen : %s"
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:607
+#: ../lib/XXV/MODULES/HTTPD.pm:600
msgid "Directory found."
msgstr "Verzeichnis gefunden."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:609
+#: ../lib/XXV/MODULES/HTTPD.pm:602
msgid "Directory not found."
msgstr "Verzeichnis nicht gefunden."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:615
+#: ../lib/XXV/MODULES/HTTPD.pm:608
msgid "File found."
msgstr "Datei gefunden."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:617
+#: ../lib/XXV/MODULES/HTTPD.pm:610
msgid "File not found."
msgstr "Datei nicht gefunden."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:626
+#: ../lib/XXV/MODULES/HTTPD.pm:619
msgid "Host does not exist."
msgstr "Host existiert nicht."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:631
+#: ../lib/XXV/MODULES/HTTPD.pm:624
msgid "Query : '%s' not supported."
msgstr "Abfrage : '%s' nicht unterstützt."
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:645
+#: ../lib/XXV/MODULES/HTTPD.pm:638
msgid "Schema"
msgstr "Übersicht"
@@ -2600,7 +2605,7 @@ msgid "Skin used"
msgstr "Verwendeter Skin"
#--------------------
-#: ../lib/XXV/MODULES/HTTPD.pm:90 ../lib/XXV/MODULES/WAPD.pm:70
+#: ../lib/XXV/MODULES/HTTPD.pm:91 ../lib/XXV/MODULES/WAPD.pm:70
msgid "Startup screen"
msgstr "Erste Seite, die beim Anmelden zu sehen ist"
@@ -2630,7 +2635,7 @@ msgid "Search recordings 'keywords'"
msgstr "Sucht Aufnahmen 'Stichwort'"
#--------------------
-#: ../lib/XXV/MODULES/LOGREAD.pm:151
+#: ../lib/XXV/MODULES/LOGREAD.pm:152
msgid "Could not read log file %s!"
msgstr "Konnte die Log-Datei %s nicht einlesen!"
@@ -2640,7 +2645,7 @@ msgid "This module reads the xxv log file and displays it on the console."
msgstr "Diese Module liest die xxv-Log-Datei und zeigt sie in der Konsole."
#--------------------
-#: ../lib/XXV/MODULES/LOGREAD.pm:34 ../lib/XXV/MODULES/MUSIC.pm:87 ../lib/XXV/MODULES/STATUS.pm:34 ../lib/XXV/MODULES/STATUS.pm:40 ../lib/XXV/MODULES/STATUS.pm:46
+#: ../lib/XXV/MODULES/LOGREAD.pm:34 ../lib/XXV/MODULES/MUSIC.pm:87 ../lib/XXV/MODULES/STATUS.pm:34 ../lib/XXV/MODULES/STATUS.pm:40
msgid "Path of command '%s'"
msgstr "Pfad des Kommando '%s'"
@@ -2650,7 +2655,7 @@ msgid "Lines to display"
msgstr "Wieviel Zeilen anzeigen?"
#--------------------
-#: ../lib/XXV/MODULES/LOGREAD.pm:46 ../lib/XXV/MODULES/RECORDS.pm:37 ../lib/XXV/MODULES/REMOTE.pm:37
+#: ../lib/XXV/MODULES/LOGREAD.pm:46 ../lib/XXV/MODULES/RECORDS.pm:37 ../lib/XXV/MODULES/REMOTE.pm:38
msgid "Path of file '%s'"
msgstr "Pfad der Datei '%s'"
@@ -2661,216 +2666,206 @@ msgstr "Zeigt die letzten Log-Einträge an"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:103
-msgid "Edit media"
-msgstr "Medium bearbeiten"
+msgid "Delete media"
+msgstr "Medium löschen"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1041
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1035
msgid "wanted"
msgstr "Wunschliste"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:109
-msgid "Copy media"
-msgstr "Medium kopieren"
+msgid "Research media"
+msgstr "Medium recherchieren"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:115
-msgid "Delete media"
-msgstr "Medium löschen"
+msgid "Get image from media cache"
+msgstr "Hole Bild aus dem Medien Cache"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1157
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1151
msgid "Action"
msgstr "Action"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1161
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1155
msgid "Adventure"
msgstr "Abenteuer"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1165
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1159
msgid "Animation"
msgstr "Animation"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1169
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1163
msgid "Comedy"
msgstr "Komödie"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1173
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1167
msgid "Crime"
msgstr "Krimi"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1177
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1171
msgid "Documentary"
msgstr "Dokumentation"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1181
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1175
msgid "Drama"
msgstr "Drama"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1185
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1179
msgid "Family"
msgstr "Familie"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1189
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1183
msgid "Fantasy"
msgstr "Fantasy"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1193
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1187
msgid "Film-Noir"
msgstr "Film-Noir"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1197
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1191
msgid "Horror"
msgstr "Horror"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1201
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1195
msgid "Musical"
msgstr "Musical"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1205
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1199
msgid "Mystery"
msgstr "Mystery"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1209
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1203
msgid "Romance"
msgstr "Romanze"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:121
-msgid "Research media"
-msgstr "Medium recherchieren"
-
-#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1213
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1207
msgid "Sci-Fi"
msgstr "Sci-Fi"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1217
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1211
msgid "Short"
msgstr "Kurzfilm"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1221
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1215
msgid "Thriller"
msgstr "Thriller"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1225
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1219
msgid "War"
msgstr "Krieg"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1229
+#: ../lib/XXV/MODULES/MEDIALIB.pm:122
+msgid "Save media"
+msgstr "Medium speichern"
+
+#--------------------
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1223
msgid "Western"
msgstr "Western"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1233
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1227
msgid "Adult"
msgstr "Adult"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1241
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1235
msgid "Biography"
msgstr "Biography"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1249
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1243
msgid "Childs"
msgstr "Kinder"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1253
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1247
msgid "Splatter"
msgstr "Splatter"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:127
-msgid "Get image from media cache"
-msgstr "Hole Bild aus dem Medien Cache"
+#: ../lib/XXV/MODULES/MEDIALIB.pm:128
+msgid "Import media"
+msgstr "Medium importieren"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1301
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1295
msgid "#"
msgstr "#"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1302
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1296
msgid "ABC"
msgstr "ABC"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1303
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1297
msgid "DEF"
msgstr "DEF"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1304
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1298
msgid "GHI"
msgstr "GHI"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1305
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1299
msgid "JKL"
msgstr "JKL"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1306
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1300
msgid "MNO"
msgstr "MNO"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1307
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1301
msgid "PQRS"
msgstr "PQRS"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1308
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1302
msgid "TUV"
msgstr "TUV"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1309
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1303
msgid "WXYZ"
msgstr "WXYZ"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1312
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1306
msgid "Unseen"
msgstr "Ungesehen"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:1313
+#: ../lib/XXV/MODULES/MEDIALIB.pm:1307
msgid "Wanted"
msgstr "Wunschliste"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:134
-msgid "Save media"
-msgstr "Medium speichern"
-
-#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:140
-msgid "Import media"
-msgstr "Medium importieren"
-
-#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:146
msgid "Search media"
msgstr "Medium suchen"
@@ -2880,7 +2875,7 @@ msgid "This module manages media like DVDs, VCD, etc."
msgstr "Dieses Module verwaltet Medien wie z.B. DVD, VCD, etc."
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:308
+#: ../lib/XXV/MODULES/MEDIALIB.pm:295
msgid "Media library has stored %d medias"
msgstr "Medienbibliothek hat %d Medien gespeichert"
@@ -2890,7 +2885,7 @@ msgid "Cache images"
msgstr "Bilder zwischenspeichern"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:371 ../lib/XXV/MODULES/MEDIALIB.pm:560 ../lib/XXV/MODULES/MEDIALIB.pm:665 ../lib/XXV/MODULES/MEDIALIB.pm:748
+#: ../lib/XXV/MODULES/MEDIALIB.pm:361 ../lib/XXV/MODULES/MEDIALIB.pm:552 ../lib/XXV/MODULES/MEDIALIB.pm:658 ../lib/XXV/MODULES/MEDIALIB.pm:742
msgid "Media with ID '%s' does not exist in the database!"
msgstr "Medium mit der ID '%s' existiert nicht in der Datenbank!"
@@ -2901,58 +2896,58 @@ msgstr "Speicherplatz der Cover Bilder"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:47
-msgid "Number of columns in listview"
-msgstr "Anzahl der Spalten in der Medienliste"
-
-#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:53
-msgid "Number of columns of actors in detailview"
-msgstr "Anzahl der Spalten der Schauspieler in der Detail Ansicht"
-
-#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:59
msgid "Default media language"
msgstr "Standardsprache der Medien"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:64
+#: ../lib/XXV/MODULES/MEDIALIB.pm:52
msgid "Default mediatype"
msgstr "Standard Medientyp"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:722
+#: ../lib/XXV/MODULES/MEDIALIB.pm:62
+msgid "Default range"
+msgstr "Standardbereich"
+
+#--------------------
+#: ../lib/XXV/MODULES/MEDIALIB.pm:715
msgid "Media %s saved!"
msgstr "Medium %s gespeichert!"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:74
-msgid "Default range"
-msgstr "Standardbereich"
+#: ../lib/XXV/MODULES/MEDIALIB.pm:73
+msgid "List medias"
+msgstr "Medien auflisten"
#--------------------
-#: ../lib/XXV/MODULES/MEDIALIB.pm:758
+#: ../lib/XXV/MODULES/MEDIALIB.pm:752
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:763
+#: ../lib/XXV/MODULES/MEDIALIB.pm:757
msgid "Media %s is deleted."
msgstr "Medium %s wurde gelöscht."
#--------------------
+#: ../lib/XXV/MODULES/MEDIALIB.pm:79
+msgid "Display media"
+msgstr "Medium anzeigen"
+
+#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:85
-msgid "List medias"
-msgstr "Medien auflisten"
+msgid "Create new media"
+msgstr "Erstelle neues Medium"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:91
-msgid "Display media"
-msgstr "Medium anzeigen"
+msgid "Edit media"
+msgstr "Medium bearbeiten"
#--------------------
#: ../lib/XXV/MODULES/MEDIALIB.pm:97
-msgid "Create new media"
-msgstr "Erstelle neues Medium"
+msgid "Copy media"
+msgstr "Medium kopieren"
#--------------------
#: ../lib/XXV/MODULES/MOVETIMER.pm:16
@@ -2960,12 +2955,12 @@ msgid "This module move timers between channels."
msgstr "Diese Modul verschiebt Timer zwischen Kanälen."
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:227
+#: ../lib/XXV/MODULES/MOVETIMER.pm:228
msgid "Couldn't query rules to move timer from database!"
msgstr "Konnte Regel zum Verschieben der Timer nicht aus der Datenbank abfragen!"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:321
+#: ../lib/XXV/MODULES/MOVETIMER.pm:322
msgid "There none timer to move."
msgstr "Es wurden keine Timer verschoben."
@@ -2975,32 +2970,32 @@ msgid "List rules to move timer between channels"
msgstr "Zeige Regel zum Verschieben von Timer zwischen Kanälen"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:388 ../lib/XXV/MODULES/MOVETIMER.pm:548
+#: ../lib/XXV/MODULES/MOVETIMER.pm:391 ../lib/XXV/MODULES/MOVETIMER.pm:552
msgid "Rule to move timer with ID '%s' does not exist in the database!"
msgstr "Regel zum Verschieben der Timer mit ID '%s' exisitert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:407
+#: ../lib/XXV/MODULES/MOVETIMER.pm:410
msgid "Which video disk recorder should as source?"
msgstr "Welcher Video Disk Rekorder soll als Quelle dienen?"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:413
+#: ../lib/XXV/MODULES/MOVETIMER.pm:416
msgid "Which channel should used as source?"
msgstr "Welcher Kanal soll als Quelle verwendet werden?"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:421 ../lib/XXV/MODULES/MOVETIMER.pm:444 ../lib/XXV/MODULES/TIMERS.pm:603
+#: ../lib/XXV/MODULES/MOVETIMER.pm:424 ../lib/XXV/MODULES/MOVETIMER.pm:447 ../lib/XXV/MODULES/TIMERS.pm:648 ../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!"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:430
+#: ../lib/XXV/MODULES/MOVETIMER.pm:433
msgid "Which video disk recorder should as destination?"
msgstr "Welcher Video Disk Rekorder soll als Ziel dienen?"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:436
+#: ../lib/XXV/MODULES/MOVETIMER.pm:439
msgid "Which channel should used as destination?"
msgstr "Welcher Kanal soll als Ziel verwendet werden?"
@@ -3010,37 +3005,37 @@ msgid "Create rule to move timer between channels"
msgstr "Erzeuge eine neue Regel zum Verschieben von Timern zwischen Kanälen"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:450
+#: ../lib/XXV/MODULES/MOVETIMER.pm:453
msgid "When should use this rule"
msgstr "Wann soll die Regel verwendet werden"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:460
+#: ../lib/XXV/MODULES/MOVETIMER.pm:463
msgid "How should timer handled, if changed"
msgstr "Wie sollen Timer behandelt bei Änderungen behandelt werden"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:481
+#: ../lib/XXV/MODULES/MOVETIMER.pm:484
msgid "Rule to move timer saved!"
msgstr "Regel zum Verschieben von Timern gespeichert!"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:518 ../lib/XXV/MODULES/MOVETIMER.pm:525
-msgid "Couldn't insert rule move timer in database!"
-msgstr "Regel zum Verschieben von Timern konnte nicht in Datenbank eingefügt werden!"
-
-#--------------------
#: ../lib/XXV/MODULES/MOVETIMER.pm:52
msgid "Delete rule to move timer between channels"
msgstr "Lösche Regel zum Verschieben von Timern zwischen Kanälen"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:540
+#: ../lib/XXV/MODULES/MOVETIMER.pm:521 ../lib/XXV/MODULES/MOVETIMER.pm:528
+msgid "Couldn't insert rule move timer in database!"
+msgstr "Regel zum Verschieben von Timern konnte nicht in Datenbank eingefügt werden!"
+
+#--------------------
+#: ../lib/XXV/MODULES/MOVETIMER.pm:544
msgid "Missing ID to select rules for deletion! Please use movetimerdelete 'id'"
msgstr "Benötige ID zum Auswählen der Regel für die Löschung! Bitte verwende movetimerdelete 'id'"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:552
+#: ../lib/XXV/MODULES/MOVETIMER.pm:556
msgid "Rule to move timer %s is deleted."
msgstr "Regel zum Verschieben der Timer %s wurde gelöscht."
@@ -3050,42 +3045,47 @@ msgid "Edit rule to move timer between channels"
msgstr "Bearbeite Regel zum Verschieben von Timern zwischen Kanälen"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:631
+#: ../lib/XXV/MODULES/MOVETIMER.pm:636
msgid "Allways"
msgstr "Immer"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:632
+#: ../lib/XXV/MODULES/MOVETIMER.pm:637
msgid "Newer"
msgstr "Niemals"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:633
+#: ../lib/XXV/MODULES/MOVETIMER.pm:638
msgid "If collision detected"
msgstr "Wenn eine Kollision erkannt wurde"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:644
+#: ../lib/XXV/MODULES/MOVETIMER.pm:649
msgid "Keep inactive original timer"
msgstr "Behalte den inaktiven original Timer"
#--------------------
-#: ../lib/XXV/MODULES/MOVETIMER.pm:645
+#: ../lib/XXV/MODULES/MOVETIMER.pm:650
msgid "Copy original timer"
msgstr "Kopiere den original Timer"
#--------------------
+#: ../lib/XXV/MODULES/MUSIC.pm:1001
+msgid "Lookup for cover from '%s-%s'"
+msgstr "Suche nach Plattenhüllen von '%s-%s'"
+
+#--------------------
#: ../lib/XXV/MODULES/MUSIC.pm:101
msgid "Download album covers."
msgstr "Plattenhüllen herunterladen."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:1068
+#: ../lib/XXV/MODULES/MUSIC.pm:1073
msgid "New covers search was successfully!"
msgstr "Suche nach neue Plattenhüllen war erfolgreich!"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:1072 ../lib/XXV/MODULES/MUSIC.pm:1089 ../lib/XXV/MODULES/MUSIC.pm:347 ../lib/XXV/MODULES/MUSIC.pm:367 ../lib/XXV/MODULES/MUSIC.pm:407 ../lib/XXV/MODULES/MUSIC.pm:446
+#: ../lib/XXV/MODULES/MUSIC.pm:1077 ../lib/XXV/MODULES/MUSIC.pm:1094 ../lib/XXV/MODULES/MUSIC.pm:348 ../lib/XXV/MODULES/MUSIC.pm:368 ../lib/XXV/MODULES/MUSIC.pm:408 ../lib/XXV/MODULES/MUSIC.pm:447
msgid "Back to music list"
msgstr "Zurück zur Musikliste"
@@ -3095,7 +3095,7 @@ msgid "Play music file 'fid'"
msgstr "Spiele Musikdatei 'fid'"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:1086
+#: ../lib/XXV/MODULES/MUSIC.pm:1091
msgid "It is not necessary to look for new covers because already all albums possess cover!"
msgstr "Es ist nicht notwendig, nach neuer Plattenhüllen zu suchen, weil bereits alle Alben ein Plattenhülle besitzen!"
@@ -3120,12 +3120,12 @@ msgid "Show album covers."
msgstr "Zeigt Plattenhüllen."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:1354
+#: ../lib/XXV/MODULES/MUSIC.pm:1360
msgid "Sorry, images for cover is'nt supported"
msgstr "Entschuldigung, Plattenhüllen werden nicht unterstützt."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:1392
+#: ../lib/XXV/MODULES/MUSIC.pm:1399
msgid "Sorry, couldn't get file."
msgstr "Entschuldigung, Datei kann nicht geholt werden."
@@ -3140,22 +3140,22 @@ msgid "This module managed music files."
msgstr "Dieser Modul behandelt die Musikdateien."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:343
+#: ../lib/XXV/MODULES/MUSIC.pm:344
msgid "Directory of the music files '%s' not found"
msgstr "Verzeichnis mit den Musikdateien '%s' nicht gefunden"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:365
+#: ../lib/XXV/MODULES/MUSIC.pm:366
msgid "Reread the music files ..."
msgstr "Erneutes Einlesen der Musikdateien ..."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:379
+#: ../lib/XXV/MODULES/MUSIC.pm:380
msgid "Get information from music files ..."
msgstr "Hole Informationen über die Musikdateien ..."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:405
+#: ../lib/XXV/MODULES/MUSIC.pm:406
msgid "No music files found!"
msgstr "Keine Musikdateien gefunden!"
@@ -3165,7 +3165,7 @@ msgid "Directory with the music files"
msgstr "Verzeichnis mit den Musikdateien"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:442
+#: ../lib/XXV/MODULES/MUSIC.pm:443
msgid "%d new music files in database saved and %d non exists entries deleted!"
msgstr "%d neue Musikdateien wurden in der Datenbank gespeichert und %d nicht existierende gelöscht!"
@@ -3175,7 +3175,7 @@ msgid "Port to listen for icecast clients."
msgstr "Port des Server, an dem für Icecast Clients gelauscht wird."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:515
+#: ../lib/XXV/MODULES/MUSIC.pm:518
msgid "Sorry, playback is'nt supported"
msgstr "Entschuldigung, Wiedergabe ist nicht möglich"
@@ -3185,17 +3185,17 @@ msgid "Proxy URL to music server. e.g. (http://vdr/xxv) Please remember you must
msgstr "Proxy URL des Musikservers. z.B.(http://vdr/xxv). Denke daran das der Port des Icecast Server in die Proxykonfiguration eingetragen werden muss!"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:611
+#: ../lib/XXV/MODULES/MUSIC.pm:616
msgid "Album"
msgstr "Album"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:613
+#: ../lib/XXV/MODULES/MUSIC.pm:618
msgid "Number of track"
msgstr "Nummer des Track"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:615
+#: ../lib/XXV/MODULES/MUSIC.pm:620
msgid "Length"
msgstr "Dauer"
@@ -3215,7 +3215,7 @@ msgid "DSN for muggle database"
msgstr "DSN für die Muggle Datenbank"
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:931
+#: ../lib/XXV/MODULES/MUSIC.pm:935
msgid "Music database contains %d entries with %d albums from %d artists in %d genres"
msgstr "Die Musikdatenbank enthält %d Einträge mit %d Alben von %d Künstlern in %d Genren"
@@ -3225,16 +3225,11 @@ msgid "Rereading of the music directory."
msgstr "Nochmaliges Einlesen des Musikverzeichnisses."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:976
+#: ../lib/XXV/MODULES/MUSIC.pm:981
msgid "Please wait, search for new covers ..."
msgstr "Bitte warten, suche nach neuen Plattenhüllen ..."
#--------------------
-#: ../lib/XXV/MODULES/MUSIC.pm:996
-msgid "Lookup for cover from '%s-%s'"
-msgstr "Suche nach Plattenhüllen von '%s-%s'"
-
-#--------------------
#: ../lib/XXV/MODULES/RECORDS.pm:100
msgid "Preview image width"
msgstr "Breite der Vorschaubilder"
@@ -3260,32 +3255,32 @@ msgid "Delete recording 'rid'"
msgstr "Aufnahme löschen 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1483
+#: ../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:1520 ../lib/XXV/MODULES/RECORDS.pm:1558 ../lib/XXV/MODULES/RECORDS.pm:1599 ../lib/XXV/MODULES/RECORDS.pm:1962 ../lib/XXV/MODULES/RECORDS.pm:2051 ../lib/XXV/MODULES/RECORDS.pm:2330
+#: ../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:1549 ../lib/XXV/MODULES/RECORDS.pm:1592
-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:155
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
msgid "Convert recording 'rid'"
msgstr "Aufnahme konvertieren 'rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1645 ../lib/XXV/MODULES/RECORDS.pm:1780
+#: ../lib/XXV/MODULES/RECORDS.pm:1655 ../lib/XXV/MODULES/RECORDS.pm:1792
msgid "Index"
msgstr "Index"
@@ -3300,7 +3295,7 @@ msgid "Cut recording 'rid' in vdr"
msgstr "Schneide Aufnahme 'rid' im VDR"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:1895
+#: ../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'."
@@ -3310,72 +3305,72 @@ 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:1968
+#: ../lib/XXV/MODULES/RECORDS.pm:1981
msgid "Recording '%s' to delete"
msgstr "Aufnahme '%s' wird gelöscht"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2004
+#: ../lib/XXV/MODULES/RECORDS.pm:2017
msgid "No recording to delete!"
msgstr "Keine Aufnahme zum Löschen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2029
+#: ../lib/XXV/MODULES/RECORDS.pm:2043
msgid "No recording defined for editing!"
msgstr "Keine Aufnahme-ID zum Bearbeiten!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2068 ../lib/XXV/MODULES/RECORDS.pm:2651 ../lib/XXV/MODULES/TIMERS.pm:581
+#: ../lib/XXV/MODULES/RECORDS.pm:2082 ../lib/XXV/MODULES/RECORDS.pm:2667 ../lib/XXV/MODULES/TIMERS.pm:626
msgid "Title of recording"
msgstr "Titel der Aufnahme"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2105
+#: ../lib/XXV/MODULES/RECORDS.pm:2119
msgid "Undefined"
msgstr "Unbestimmt"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2115 ../lib/XXV/MODULES/STREAM.pm:207 ../lib/XXV/MODULES/XMLTV.pm:519
+#: ../lib/XXV/MODULES/RECORDS.pm:2129 ../lib/XXV/MODULES/STREAM.pm:208
msgid "This channel '%s' does not exist!"
msgstr "Dieser Kanal '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2135
+#: ../lib/XXV/MODULES/RECORDS.pm:2149
msgid "Video"
msgstr "Video"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2140
+#: ../lib/XXV/MODULES/RECORDS.pm:2154
msgid "Audio"
msgstr "Audio"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2145
+#: ../lib/XXV/MODULES/RECORDS.pm:2159
msgid "Cut marks"
msgstr "Schnittmarken"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2182 ../lib/XXV/MODULES/RECORDS.pm:2190
+#: ../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:2209 ../lib/XXV/MODULES/RECORDS.pm:2227
-msgid "Recording: '%s', couldn't move to '%s' : %s"
-msgstr "Aufnahme: '%s', konnte nicht nach '%s' verschoben werden : %s"
-
-#--------------------
#: ../lib/XXV/MODULES/RECORDS.pm:222
msgid "Recording deleted: %s"
msgstr "Aufnahme gelöscht: %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2223
+#: ../lib/XXV/MODULES/RECORDS.pm:2223 ../lib/XXV/MODULES/RECORDS.pm:2241
+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
msgid "Recording: '%s', couldn't mkpath: '%s' : %s"
msgstr "Aufnahme: '%s', konnte nicht Verzeichnis '%s' nicht erstellen : %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2234
+#: ../lib/XXV/MODULES/RECORDS.pm:2248
msgid "Recording: '%s', couldn't remove '%s' : %s"
msgstr "Aufnahme: '%s', konnte nicht '%s' nicht entfernen : %s"
@@ -3385,96 +3380,91 @@ msgid "Subtitle: %s"
msgstr "Serientitel: %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2265 ../lib/XXV/MODULES/RECORDS.pm:2267
+#: ../lib/XXV/MODULES/RECORDS.pm:2279 ../lib/XXV/MODULES/RECORDS.pm:2281
msgid "Recording edited!"
msgstr "Aufnahme wurde bearbeitet!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2275
+#: ../lib/XXV/MODULES/RECORDS.pm:2289
msgid "Recording was'nt changed!"
msgstr "Aufnahme wurde nicht verändert!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2313
+#: ../lib/XXV/MODULES/RECORDS.pm:2328
msgid "No reccmds.conf on your system!"
msgstr "Keine reccmds.conf auf dem System!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2318
+#: ../lib/XXV/MODULES/RECORDS.pm:2333
msgid "Please use rconvert 'cmdid_rid'"
msgstr "Bitte verwende rconvert 'cmdid_rid'"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2322
+#: ../lib/XXV/MODULES/RECORDS.pm:2337
msgid "Command"
msgstr "Kommando"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2329
+#: ../lib/XXV/MODULES/RECORDS.pm:2344
msgid "Couldn't find this command ID!"
msgstr "Kann diese Kommando-ID nicht finden!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2343
+#: ../lib/XXV/MODULES/RECORDS.pm:2358
msgid "Call %s '%s', standard error output :"
msgstr "Aufruf %s '%s', Standardfehlerausgabe :"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2346
+#: ../lib/XXV/MODULES/RECORDS.pm:2361
msgid "Call %s '%s', standard output :"
msgstr "Aufruf %s '%s', Ausgabe :"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2350
+#: ../lib/XXV/MODULES/RECORDS.pm:2365
msgid "Sorry! Couldn't call %s '%s'! %s"
msgstr "Entschuldigung! Konnte %s '%s' nicht aufrufen! %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2354
+#: ../lib/XXV/MODULES/RECORDS.pm:2369
msgid "Back to recording list"
msgstr "Zurück zur Aufnahmeliste"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2392
+#: ../lib/XXV/MODULES/RECORDS.pm:2406
msgid "%d new recordings since last report time %s"
msgstr "%d neue Aufnahmen seit der letzten Reportzeit %s"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2641
+#: ../lib/XXV/MODULES/RECORDS.pm:2657
msgid "There none recoverable recordings!"
msgstr "Es sind keine wiederherstellbaren Aufnahmen vorhanden!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2671
+#: ../lib/XXV/MODULES/RECORDS.pm:2687
msgid "Recover recording"
msgstr "Aufnahme wiederherstellen"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2677
+#: ../lib/XXV/MODULES/RECORDS.pm:2693
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:2686
+#: ../lib/XXV/MODULES/RECORDS.pm:2702
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:2699 ../lib/XXV/MODULES/RECORDS.pm:2701
+#: ../lib/XXV/MODULES/RECORDS.pm:2715 ../lib/XXV/MODULES/RECORDS.pm:2717
msgid "Recording recovered!"
msgstr "Aufnahme wiederhergestellt!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2709
+#: ../lib/XXV/MODULES/RECORDS.pm:2725
msgid "None recording was'nt recovered!"
msgstr "Keine Aufnahme wurde wiederhergestellt!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:2777 ../lib/XXV/MODULES/VTX.pm:1452
-msgid "Sorry, get image is'nt supported"
-msgstr "Entschuldigung, Bilder werden nicht unterstützt!"
-
-#--------------------
#: ../lib/XXV/MODULES/RECORDS.pm:29
msgid "This module manages recordings."
msgstr "Dieses Modul verwaltet die Aufnahmen."
@@ -3495,17 +3485,17 @@ msgid "Directory where recordings are stored"
msgstr "Verzeichnis, wo die vdr Aufnahmen gespeichert sind"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:553
+#: ../lib/XXV/MODULES/RECORDS.pm:555
msgid "No recordings available!"
msgstr "Keine Aufnahmen verfügbar!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:569
+#: ../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:574
+#: ../lib/XXV/MODULES/RECORDS.pm:576
msgid "Unknown disc capacity!"
msgstr "Unbekannte Festplattenkapazität!"
@@ -3515,7 +3505,7 @@ 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:626
+#: ../lib/XXV/MODULES/RECORDS.pm:628
msgid "Update recording '%s'"
msgstr "Aktualisiere Aufnahme '%s'"
@@ -3525,7 +3515,7 @@ msgid "The program used to create thumbnails"
msgstr "Das verwendete Programm, um Vorschaubildern zu erzeugen"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:678
+#: ../lib/XXV/MODULES/RECORDS.pm:680
msgid "Analyze recording '%s'"
msgstr "Untersuche Aufnahme '%s'"
@@ -3535,17 +3525,17 @@ msgid "None"
msgstr "Keines"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:702
+#: ../lib/XXV/MODULES/RECORDS.pm:704
msgid "Can't add recording '%s' into database!"
msgstr "Konnte Aufnahme '%s' nicht in Datenbank einfügen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:705
+#: ../lib/XXV/MODULES/RECORDS.pm:707
msgid "Can't assign recording '%s' to file!"
msgstr "Kann Aufnahme '%s' keiner Datei zuordnen!"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:712
+#: ../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!"
@@ -3555,12 +3545,12 @@ msgid "Produce how many thumbnails"
msgstr "Wieviele Vorschaubildern erzeugen?"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:802
+#: ../lib/XXV/MODULES/RECORDS.pm:806
msgid "Write %d recordings to the database."
msgstr "Schreibe %d Aufnahmen in die Datenbank."
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:804
+#: ../lib/XXV/MODULES/RECORDS.pm:808
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."
@@ -3570,7 +3560,7 @@ msgid "Display recording list with thumbnails?"
msgstr "Zeige Aufnahmeliste mit Vorschaubildern?"
#--------------------
-#: ../lib/XXV/MODULES/RECORDS.pm:840 ../lib/XXV/MODULES/RECORDS.pm:842
+#: ../lib/XXV/MODULES/RECORDS.pm:845 ../lib/XXV/MODULES/RECORDS.pm:847
msgid "Get information on recordings ..."
msgstr "Hole Informationen über Aufnahmen ..."
@@ -3590,12 +3580,12 @@ msgid "This module emulate a remote control."
msgstr "Dieses Modul emulieren eine Fernbedienung."
#--------------------
-#: ../lib/XXV/MODULES/REMOTE.pm:182
+#: ../lib/XXV/MODULES/REMOTE.pm:185
msgid "This cmd id does not exist!"
msgstr "Dieses Kommando existiert nicht!"
#--------------------
-#: ../lib/XXV/MODULES/REMOTE.pm:185
+#: ../lib/XXV/MODULES/REMOTE.pm:188
msgid "Try to start command: %s with cmd: %s"
msgstr "Versuche Start des Kommando: %s mit cmd: %s "
@@ -3605,22 +3595,22 @@ msgid "Grab video framebuffer, as preview on remotecontrol."
msgstr "Speichert den Videoframebuffer, als Vorschau innerhalb der Fernbedienung."
#--------------------
-#: ../lib/XXV/MODULES/REMOTE.pm:45
+#: ../lib/XXV/MODULES/REMOTE.pm:46
msgid "Display ir remote 'cmd'"
msgstr "Zeigt eine Fernbedienung 'cmd'"
#--------------------
-#: ../lib/XXV/MODULES/REMOTE.pm:51
+#: ../lib/XXV/MODULES/REMOTE.pm:52
msgid "Switch to channel 'cid'"
msgstr "Schaltet zum Kanal 'cid'"
#--------------------
-#: ../lib/XXV/MODULES/REMOTE.pm:57
+#: ../lib/XXV/MODULES/REMOTE.pm:58
msgid "Call the command 'cid'"
msgstr "Aufruf des Kommandos 'cid'"
#--------------------
-#: ../lib/XXV/MODULES/REMOTE.pm:63
+#: ../lib/XXV/MODULES/REMOTE.pm:64
msgid "List the commands"
msgstr "Liste die Kommandos"
@@ -3645,12 +3635,7 @@ msgid "This module register and run robots to fetch data from internet."
msgstr "Dieses Modul verwaltet und startet Robots, um Daten aus dem Internet zu holen."
#--------------------
-#: ../lib/XXV/MODULES/ROBOT.pm:33
-msgid "Start a robots 'rname'"
-msgstr "Startet eine Robot 'rname'"
-
-#--------------------
-#: ../lib/XXV/MODULES/SHARE.pm:357
+#: ../lib/XXV/MODULES/SHARE.pm:358
msgid "Rank"
msgstr "Platzierung"
@@ -3680,22 +3665,17 @@ msgid "Display the TopTen list of timers."
msgstr "Zeigt die Liste der besten zehn Timer an."
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:101
-msgid "Displays network information"
-msgstr "Zeigt die Informationen des Netzwerks"
-
-#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:106
+#: ../lib/XXV/MODULES/STATUS.pm:102
msgid "Displays hardware information"
msgstr "Zeigt die Informationen der Hardware"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:111
+#: ../lib/XXV/MODULES/STATUS.pm:107
msgid "Displays memory information"
msgstr "Zeigt die Informationen des Speichers"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:116
+#: ../lib/XXV/MODULES/STATUS.pm:112
msgid "Display the file system informations"
msgstr "Zeigt die Informationen des Dateisystems"
@@ -3705,191 +3685,196 @@ 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:260
+#: ../lib/XXV/MODULES/STATUS.pm:259
msgid "CPU"
msgstr "CPU"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:261
+#: ../lib/XXV/MODULES/STATUS.pm:260
msgid "PCI"
msgstr "PCI"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:263
+#: ../lib/XXV/MODULES/STATUS.pm:262
msgid "IDE"
msgstr "IDE"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:265
+#: ../lib/XXV/MODULES/STATUS.pm:264
msgid "SCSI"
msgstr "SCSI"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:294
+#: ../lib/XXV/MODULES/STATUS.pm:295
msgid "Filesystems"
msgstr "Dateisysteme"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:376
+#: ../lib/XXV/MODULES/STATUS.pm:377
msgid "day"
msgstr "Tag"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:382
+#: ../lib/XXV/MODULES/STATUS.pm:383
msgid "days"
msgstr "Tage"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:390
+#: ../lib/XXV/MODULES/STATUS.pm:391
msgid "hour"
msgstr "Stunde"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:396
+#: ../lib/XXV/MODULES/STATUS.pm:397
msgid "hours"
msgstr "Stunden"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:404
+#: ../lib/XXV/MODULES/STATUS.pm:405
msgid "minute"
msgstr "Minute"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:410
+#: ../lib/XXV/MODULES/STATUS.pm:411
msgid "minutes"
msgstr "Minuten"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:425
+#: ../lib/XXV/MODULES/STATUS.pm:426
msgid "Interface"
msgstr "Schnittstelle"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:426
+#: ../lib/XXV/MODULES/STATUS.pm:427
msgid "RxBytes"
msgstr "RxBytes"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:427
+#: ../lib/XXV/MODULES/STATUS.pm:428
msgid "RxPackets"
msgstr "RxPackets"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:428
+#: ../lib/XXV/MODULES/STATUS.pm:429
msgid "RxErrs"
msgstr "RxErrs"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:429
+#: ../lib/XXV/MODULES/STATUS.pm:430
msgid "RxDrop"
msgstr "RxDrop"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:430
+#: ../lib/XXV/MODULES/STATUS.pm:431
msgid "TxBytes"
msgstr "TxBytes"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:431
+#: ../lib/XXV/MODULES/STATUS.pm:432
msgid "TxPackets"
msgstr "TxPackets"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:432
+#: ../lib/XXV/MODULES/STATUS.pm:433
msgid "TxErrs"
msgstr "TxErrs"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:433
+#: ../lib/XXV/MODULES/STATUS.pm:434
msgid "TxDrop"
msgstr "TxDrop"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:500
-msgid "No on-chip cache."
-msgstr "Kein On-Chip Cache."
-
-#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:52
+#: ../lib/XXV/MODULES/STATUS.pm:46
msgid "Interval in seconds to save data"
msgstr "Abstand in den Sekunden, zum sich an die Daten zu erinnern"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:57
+#: ../lib/XXV/MODULES/STATUS.pm:501
+msgid "No on-chip cache."
+msgstr "Kein On-Chip Cache."
+
+#--------------------
+#: ../lib/XXV/MODULES/STATUS.pm:51
msgid "Save historical data, in hours"
msgstr "Wie lang an die historischen Daten erinnert, in Stunden"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:589
+#: ../lib/XXV/MODULES/STATUS.pm:590
msgid "Device"
msgstr "Gerät"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:590
+#: ../lib/XXV/MODULES/STATUS.pm:591
msgid "Model"
msgstr "Modell"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:591 ../lib/XXV/MODULES/STATUS.pm:717
+#: ../lib/XXV/MODULES/STATUS.pm:592 ../lib/XXV/MODULES/STATUS.pm:718
msgid "Capacity"
msgstr "Kapazität"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:592
+#: ../lib/XXV/MODULES/STATUS.pm:593
msgid "Cache"
msgstr "Cache"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:68
+#: ../lib/XXV/MODULES/STATUS.pm:62
msgid "Show collected data as diagram?"
msgstr "Zeige gesammelte Daten als Diagramm?"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:713
+#: ../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:714
msgid "Typ"
msgstr "Type"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:714
+#: ../lib/XXV/MODULES/STATUS.pm:715
msgid "Space"
msgstr "Verfügbar"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:715
+#: ../lib/XXV/MODULES/STATUS.pm:716
msgid "Used"
msgstr "Benutzt"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:716
+#: ../lib/XXV/MODULES/STATUS.pm:717
msgid "Free"
msgstr "Frei"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:718
+#: ../lib/XXV/MODULES/STATUS.pm:719
msgid "Mount"
msgstr "Eingehängt auf"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:75
-msgid "Display all relevant informations about this system"
-msgstr "Zeigt alle relevanten Informationen über dieses System an"
-
-#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:793
+#: ../lib/XXV/MODULES/STATUS.pm:794
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:794
+#: ../lib/XXV/MODULES/STATUS.pm:795
msgid "Device has space %s from %s used!"
msgstr "Gerät hat Platz %s von %s verwendet!"
#--------------------
-#: ../lib/XXV/MODULES/STATUS.pm:96
+#: ../lib/XXV/MODULES/STATUS.pm:92
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"
@@ -3905,12 +3890,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:192
+#: ../lib/XXV/MODULES/STREAM.pm:193
msgid "No channel defined for streaming!"
msgstr "Kein Kanal für Streaming definiert!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:195 ../lib/XXV/MODULES/STREAM.pm:274
+#: ../lib/XXV/MODULES/STREAM.pm:196 ../lib/XXV/MODULES/STREAM.pm:276
msgid "Can't stream files!"
msgstr "Kann Datei nicht streamen!"
@@ -3920,17 +3905,17 @@ msgid "This module generate streams from recordings."
msgstr "Dieses Modul erzeugt Streams von Aufnahmen."
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:262
+#: ../lib/XXV/MODULES/STREAM.pm:263
msgid "Unknown access method!"
msgstr "Unbekannte Methode des Zugriffs!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:271
+#: ../lib/XXV/MODULES/STREAM.pm:273
msgid "No recording defined for streaming!"
msgstr "Keine Aufnahme für Streaming definiert!"
#--------------------
-#: ../lib/XXV/MODULES/STREAM.pm:279 ../lib/XXV/MODULES/STREAM.pm:302 ../lib/XXV/MODULES/STREAM.pm:308
+#: ../lib/XXV/MODULES/STREAM.pm:281 ../lib/XXV/MODULES/STREAM.pm:304 ../lib/XXV/MODULES/STREAM.pm:310
msgid "Couldn't find recording: '%s'"
msgstr "Konnte Aufnahme '%s' nicht finden"
@@ -4045,132 +4030,157 @@ 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:198 ../lib/XXV/MODULES/SVDRP.pm:279
+#: ../lib/XXV/MODULES/SVDRP.pm:201 ../lib/XXV/MODULES/SVDRP.pm:284
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:210
+#: ../lib/XXV/MODULES/SVDRP.pm:213
msgid "Activate this definition"
msgstr "Aktiviere diese Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:214
+#: ../lib/XXV/MODULES/SVDRP.pm:217
msgid "Host or IP address of video disk recorder"
msgstr "Host bzw. IP-Adresse des Video Disk Rekorder"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:220
+#: ../lib/XXV/MODULES/SVDRP.pm:223
msgid "Used Port of SVDRP"
msgstr "Verwendeter SVDRP Port"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:235
+#: ../lib/XXV/MODULES/SVDRP.pm:238
msgid "Use as primary video disk recorder"
msgstr "Verwende als primären Video Disk Rekorder"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:238
+#: ../lib/XXV/MODULES/SVDRP.pm:241
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:245
+#: ../lib/XXV/MODULES/SVDRP.pm:248
msgid "Edit video disk recorder definition"
msgstr "Bearbeiten der Video Disk Rekorder Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:246
+#: ../lib/XXV/MODULES/SVDRP.pm:249
msgid "Create new video disk recorder definition"
msgstr "Erzeuge neue Video Disk Rekorder Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:26
-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:265
+#: ../lib/XXV/MODULES/SVDRP.pm:268
msgid "Video disk recorder definition saved!"
msgstr "Video Disk Rekorder Definition wurde gespeichert!"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:275
+#: ../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
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:285
+#: ../lib/XXV/MODULES/SVDRP.pm:290
msgid "Definition of video disk recorder are %s deleted."
msgstr "Definition '%s' des Video Disk Rekorder wurde gelöscht."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:316
+#: ../lib/XXV/MODULES/SVDRP.pm:322
msgid "Primary"
msgstr "Primär"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:317
+#: ../lib/XXV/MODULES/SVDRP.pm:323
msgid "Host"
msgstr "Host"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:318
+#: ../lib/XXV/MODULES/SVDRP.pm:324
msgid "Typ of Cards"
msgstr "Art von Karten"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:34
+#: ../lib/XXV/MODULES/SVDRP.pm:35
msgid "List defined video disk recorder."
msgstr "Zeige Definition der Video Disk Rekorder"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:40
+#: ../lib/XXV/MODULES/SVDRP.pm:41
msgid "Create new video disk recorder definition."
msgstr "Erzeuge neue Video Disk Rekorder Definition"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:46
+#: ../lib/XXV/MODULES/SVDRP.pm:47
msgid "Delete video disk recorder definition 'id'"
msgstr "Lösche Video Disk Rekorder Definition 'id'"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:52
+#: ../lib/XXV/MODULES/SVDRP.pm:53
msgid "Edit video disk recorder definition 'id'"
msgstr "Bearbeiten Video Disk Rekorder Definition 'id'"
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:534
+#: ../lib/XXV/MODULES/SVDRP.pm:549
msgid "None video disk recorder defined in the database."
msgstr "Kein Video Disk Rekorder in der Datenbank definiert."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:58
+#: ../lib/XXV/MODULES/SVDRP.pm:59
msgid "Status from video disk recorder."
msgstr "Status des Video Disk Rekorder."
#--------------------
-#: ../lib/XXV/MODULES/SVDRP.pm:627
+#: ../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:65
+#: ../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:679
+#: ../lib/XXV/MODULES/SVDRP.pm:696
msgid "No command defined! Please use scommand 'cmd'."
msgstr "Kein Kommando definiert! Bitte verwende scommand 'cmd'"
#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:718
+msgid "Recorder"
+msgstr "Rekorder"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:719
+msgid "State"
+msgstr "Status"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:739
+msgid "Online"
+msgstr "Verbunden"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:741
+msgid "Offline"
+msgstr "Keine Verbindung"
+
+#--------------------
+#: ../lib/XXV/MODULES/SVDRP.pm:750
+msgid "%d active recorder"
+msgstr "%d aktive Rekorder"
+
+#--------------------
#: ../lib/XXV/MODULES/TELNET.pm:19
msgid "This module is a multisession telnet server."
msgstr "Dieses Modul ist ein Mehrfachsitzungstelnet-Server."
#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:204
+#: ../lib/XXV/MODULES/TELNET.pm:192
msgid ""
"Welcome to xxv system version: %s.\\r\n"
"This is session %s.\\r\n"
@@ -4179,17 +4189,17 @@ msgstr ""
"Das ist Sitzung %s.\\r\n"
#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:213
+#: ../lib/XXV/MODULES/TELNET.pm:201
msgid "Welcome to xxv system."
msgstr "Willkommen im xxv-System."
#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:217
+#: ../lib/XXV/MODULES/TELNET.pm:205
msgid "Welcome to xxv system. Please Login:"
msgstr "Willkommen im xxv-System. Bitte Anmelden:"
#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:223
+#: ../lib/XXV/MODULES/TELNET.pm:211
msgid "Sorry, but permission denied!"
msgstr "Entschuldigung, aber Erlaubnis verweigert!"
@@ -4199,84 +4209,109 @@ msgid "Number of port to listen for telnet clients"
msgstr "Nummer des Port, um auf Telnet-Clients zu lauschen"
#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:52
-msgid "This will exit the telnet session"
-msgstr "Das beendet die Telnetsitzung"
-
-#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:57 ../lib/XXV/MODULES/USER.pm:108
-msgid "Session closed."
-msgstr "Sitzung geschlossen."
-
-#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:62 ../lib/XXV/MODULES/TELNET.pm:73
+#: ../lib/XXV/MODULES/TELNET.pm:52 ../lib/XXV/MODULES/TELNET.pm:63
msgid "This will exit the xxv system."
msgstr "Das wird das xxv-System beenden."
#--------------------
-#: ../lib/XXV/MODULES/TELNET.pm:70
+#: ../lib/XXV/MODULES/TELNET.pm:60
msgid "Are you sure to exit the xxv system?"
msgstr "Sind Sie sicher, das XXV-System zu beenden?"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:104
-msgid "Activate/Deactive timer 'tid'"
-msgstr "Aktiviere/Deaktiviere Timer 'tid'"
+#: ../lib/XXV/MODULES/TIMERS.pm:100
+msgid "Change timers if EPG entries change"
+msgstr "Timer justieren, wenn EPG Eintrag verändert wurde"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:1014
+msgid "No timer to toggle!"
+msgstr "Kein Timer zum Umschalten!"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:107
+msgid "List timers 'tid'"
+msgstr "Zeige Timer 'tid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:113
+msgid "Search timers 'text'"
+msgstr "Suche Timer 'text'"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1115
+#: ../lib/XXV/MODULES/TIMERS.pm:1163
msgid "%d timer written to database."
msgstr "%d Timer in Datenbank geschrieben."
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:144
-msgid "New timer: %s"
-msgstr "Neuer Timer: %s"
+#: ../lib/XXV/MODULES/TIMERS.pm:119
+msgid "Read timers and write them to the database"
+msgstr "Lese Timer und schreibe sie in die Datenbank"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:126
+msgid "Create timer 'eid'"
+msgstr "Erzeuge Timer 'eid'"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1494
+#: ../lib/XXV/MODULES/TIMERS.pm:133
+msgid "Edit timer 'tid'"
+msgstr "Bearbeite Timer 'tid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:140
+msgid "Delete timer 'tid'"
+msgstr "Lösche Timer 'tid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:147
+msgid "Activate/Deactive timer 'tid'"
+msgstr "Aktiviere/Deaktiviere Timer 'tid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:1546
msgid "Adjust timer : %s"
msgstr "Anpassen des Timer : %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:1496
+#: ../lib/XXV/MODULES/TIMERS.pm:1548
msgid "Adjust times from %s to %s"
msgstr "Anpassen der Zeiten von %s nach %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:166
-msgid "Timer deleted: %s"
-msgstr "Timer gelöscht: %s"
-
-#--------------------
#: ../lib/XXV/MODULES/TIMERS.pm:18
msgid "This module reads timers and saves it to the database."
msgstr "Diese Modul liest die timers.conf und speichert sie in der Datenbank."
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:197
-msgid "Timer activated: %s"
-msgstr "Timer aktiviert: %s"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:199
-msgid "Timer deactivated: %s"
-msgstr "Timer deaktiviert: %s"
+#: ../lib/XXV/MODULES/TIMERS.pm:187
+msgid "New timer: %s"
+msgstr "Neuer Timer: %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:2018
+#: ../lib/XXV/MODULES/TIMERS.pm:2071
msgid "Channel: %s"
msgstr "Kanal: %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:2023
+#: ../lib/XXV/MODULES/TIMERS.pm:2076
msgid "On: %s to %s"
msgstr "Um: %s bis %s"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:238
-msgid "%d timer exists."
-msgstr "Es exisiteren %d Timer."
+#: ../lib/XXV/MODULES/TIMERS.pm:209
+msgid "Timer deleted: %s"
+msgstr "Timer gelöscht: %s"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:240
+msgid "Timer activated: %s"
+msgstr "Timer aktiviert: %s"
+
+#--------------------
+#: ../lib/XXV/MODULES/TIMERS.pm:242
+msgid "Timer deactivated: %s"
+msgstr "Timer deaktiviert: %s"
#--------------------
#: ../lib/XXV/MODULES/TIMERS.pm:26
@@ -4284,132 +4319,102 @@ msgid "How often timers are to be updated (in seconds)"
msgstr "Wie oft sollen Timer aktualisiert werden (in Sekunden)"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:42
-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:47
-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:280
+msgid "%d timer exists."
+msgstr "Es exisiteren %d Timer."
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:478
+#: ../lib/XXV/MODULES/TIMERS.pm:522
msgid "Event '%s' does not exist in the database!"
msgstr "Sendung '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:494 ../lib/XXV/MODULES/TIMERS.pm:737
+#: ../lib/XXV/MODULES/TIMERS.pm:538 ../lib/XXV/MODULES/TIMERS.pm:782
msgid "New timer"
msgstr "Neuer Timer"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:52
-msgid "Use Programme Delivery Control (PDC) to control start time"
-msgstr "Verwende Video Program System (VPS) zum Überwachen der Startzeit"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:543 ../lib/XXV/MODULES/TIMERS.pm:860 ../lib/XXV/MODULES/TIMERS.pm:938
+#: ../lib/XXV/MODULES/TIMERS.pm:588 ../lib/XXV/MODULES/TIMERS.pm:907 ../lib/XXV/MODULES/TIMERS.pm:986
msgid "Timer '%s' does not exist in the database!"
msgstr "Timer '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:57
-msgid "Change timers if EPG entries change"
-msgstr "Timer justieren, wenn EPG Eintrag verändert wurde"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:573
+#: ../lib/XXV/MODULES/TIMERS.pm:618
msgid "Enable this timer"
msgstr "Aktiviere diesen Timer"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:578
+#: ../lib/XXV/MODULES/TIMERS.pm:623
msgid "Use PDC time to control timer"
msgstr "Verwende VPS Zeit zum Überwachen des Timers"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:589
+#: ../lib/XXV/MODULES/TIMERS.pm:634 ../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:595
+#: ../lib/XXV/MODULES/TIMERS.pm:640
msgid "Which channel should recorded"
msgstr "Welcher Kanal soll aufgezeichnet werden"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:617
+#: ../lib/XXV/MODULES/TIMERS.pm:662
msgid "%Y-%m-%d"
msgstr "%d.%m.%Y"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:623
+#: ../lib/XXV/MODULES/TIMERS.pm:668
msgid "Enter a day or weekday in format 'MTWTFSS'."
msgstr "Datum oder Wochentag im Format 'MDMDFSS' eingeben."
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:64
-msgid "List timers 'tid'"
-msgstr "Zeige Timer 'tid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:70
-msgid "Search timers 'text'"
-msgstr "Suche Timer 'text'"
+#: ../lib/XXV/MODULES/TIMERS.pm:68
+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:736
+#: ../lib/XXV/MODULES/TIMERS.pm:781
msgid "Edit timer"
msgstr "Timer bearbeiten"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:76
-msgid "Read timers and write them to the database"
-msgstr "Lese Timer und schreibe sie in die Datenbank"
+#: ../lib/XXV/MODULES/TIMERS.pm:81
+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:802
+#: ../lib/XXV/MODULES/TIMERS.pm:849
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:83
-msgid "Create timer 'eid'"
-msgstr "Erzeuge Timer 'eid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:876
+#: ../lib/XXV/MODULES/TIMERS.pm:923
msgid "No timer to delete!"
msgstr "Kein Timer zum Löschen!"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:887
+#: ../lib/XXV/MODULES/TIMERS.pm:935
msgid "No timer defined to toggle! Please use ttoggle 'id'."
msgstr "Kein Timer zum Umschalten definiert! Bitte verwende ttoggle 'tid'"
#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:90
-msgid "Edit timer 'tid'"
-msgstr "Bearbeite Timer 'tid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:966
-msgid "No timer to toggle!"
-msgstr "Kein Timer zum Umschalten!"
-
-#--------------------
-#: ../lib/XXV/MODULES/TIMERS.pm:97
-msgid "Delete timer 'tid'"
-msgstr "Lösche Timer 'tid'"
+#: ../lib/XXV/MODULES/TIMERS.pm:94
+msgid "Use Programme Delivery Control (PDC) to control start time"
+msgstr "Verwende Video Program System (VPS) zum Überwachen der Startzeit"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:102
+#: ../lib/XXV/MODULES/USER.pm:103
msgid "Log out from current session."
msgstr "Abmelden von der aktuellen Sitzung."
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:21
+#: ../lib/XXV/MODULES/USER.pm:110
+msgid "Session closed."
+msgstr "Sitzung geschlossen."
+
+#--------------------
+#: ../lib/XXV/MODULES/USER.pm:22
msgid ""
"This module manages the User administration.\n"
"You may set a level for the whole module with \n"
@@ -4422,202 +4427,207 @@ msgstr ""
"oder es wird der selbe Parameter für jede Funktion gesetzt."
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:260 ../lib/XXV/MODULES/USER.pm:342 ../lib/XXV/MODULES/USER.pm:505
-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:260
+msgid "This account has'nt own preferences!"
+msgstr "Dieser Account hat keine eigenen Einstellungen!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:271 ../lib/XXV/MODULES/USER.pm:368
-msgid "Password for this account"
-msgstr "Passwort für diesen Anwenderzugang"
+#: ../lib/XXV/MODULES/USER.pm:265
+msgid "You are not authorized for change external account preferences!"
+msgstr "Sie sind nicht berechtigt, fremde Einstellungen zu ändern!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:292
-msgid "Personal preferences for this user: ModName::Param=value, "
-msgstr "Persönliche Einstellungen für diese Anwender: ModName::Param=wert, "
+#: ../lib/XXV/MODULES/USER.pm:271 ../lib/XXV/MODULES/USER.pm:407 ../lib/XXV/MODULES/USER.pm:576
+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:300 ../lib/XXV/MODULES/USER.pm:440
-msgid "The parameter '%s' in module '%s' does not exist!"
-msgstr "Der Parameter '%s' in Modul '%s' existiert nicht!"
+#: ../lib/XXV/MODULES/USER.pm:282 ../lib/XXV/MODULES/USER.pm:433
+msgid "Password for this account"
+msgstr "Passwort für diesen Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:31
+#: ../lib/XXV/MODULES/USER.pm:32
msgid "Enable user authentication"
msgstr "Aktiviert die Anwenderauthentifizierung"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:310
+#: ../lib/XXV/MODULES/USER.pm:347
msgid "Edit preferences: %s"
msgstr "Einstellungen für diese Anwender bearbeiten: %s"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:317 ../lib/XXV/MODULES/USER.pm:486
+#: ../lib/XXV/MODULES/USER.pm:37
+msgid "IP addresses with user authentification"
+msgstr "IP Adressen mit Benutzer-Authentifizierung"
+
+#--------------------
+#: ../lib/XXV/MODULES/USER.pm:381 ../lib/XXV/MODULES/USER.pm:556
msgid "User account saved!"
msgstr "Anwenderzugang wurde gespeichert!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:320
+#: ../lib/XXV/MODULES/USER.pm:384
msgid "Please wait ... refreshing interface!"
msgstr "Bitte warten ... die Anwenderoberfläche wird aktualisiert!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:351
+#: ../lib/XXV/MODULES/USER.pm:416
msgid "Administrator"
msgstr "Verwalter"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:353
+#: ../lib/XXV/MODULES/USER.pm:418
msgid "Guest"
msgstr "Gast"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:36
-msgid "IP addresses with user authentification"
-msgstr "IP Adressen mit Benutzer-Authentifizierung"
-
-#--------------------
-#: ../lib/XXV/MODULES/USER.pm:362
+#: ../lib/XXV/MODULES/USER.pm:427
msgid "Name of user account"
msgstr "Name für diesen Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:392
+#: ../lib/XXV/MODULES/USER.pm:44 ../lib/XXV/MODULES/USER.pm:58
+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
msgid "Level for this account"
msgstr "Berechtigungen für diesen Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:412
+#: ../lib/XXV/MODULES/USER.pm:477
msgid "Deny class of commands"
msgstr "Verweigere Gruppierung von Kommandos"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:43 ../lib/XXV/MODULES/USER.pm:57
-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:432
+#: ../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:448
+#: ../lib/XXV/MODULES/USER.pm:51
+msgid "IP addresses without user authentification"
+msgstr "IP Adressen ohne Benutzer-Authentifizierung"
+
+#--------------------
+#: ../lib/XXV/MODULES/USER.pm:510
+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
msgid "Maximum permitted value for lifetime with timers"
msgstr "Maximal erlaubter Wert für Lebenszeit bei Timern"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:454 ../lib/XXV/MODULES/USER.pm:466
+#: ../lib/XXV/MODULES/USER.pm:524 ../lib/XXV/MODULES/USER.pm:536
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:460
+#: ../lib/XXV/MODULES/USER.pm:530
msgid "Maximum permitted value for priority with timers"
msgstr "Maximal erlaubter Wert für Priorität bei Timern"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:474
+#: ../lib/XXV/MODULES/USER.pm:544
msgid "Edit user account"
msgstr "Bearbeiten des Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:475 ../lib/XXV/MODULES/USER.pm:72
+#: ../lib/XXV/MODULES/USER.pm:545 ../lib/XXV/MODULES/USER.pm:73
msgid "Create new user account"
msgstr "Erzeugt einen neuen Anwenderzugang"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:50
-msgid "IP addresses without user authentification"
-msgstr "IP Adressen ohne Benutzer-Authentifizierung"
-
-#--------------------
-#: ../lib/XXV/MODULES/USER.pm:501
+#: ../lib/XXV/MODULES/USER.pm:572
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:506
+#: ../lib/XXV/MODULES/USER.pm:577
msgid "User account %s deleted."
msgstr "Anwenderzugang %s wurde gelöscht"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:528
+#: ../lib/XXV/MODULES/USER.pm:600
msgid "Level"
msgstr "Ebene"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:530
+#: ../lib/XXV/MODULES/USER.pm:602
msgid "User preferences"
msgstr "Anwendereinstellungen"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:64
+#: ../lib/XXV/MODULES/USER.pm:65
msgid "common directory for temporary images"
msgstr "Gemeinsames Verzeichnis für temporäre Bilder"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:770
+#: ../lib/XXV/MODULES/USER.pm:79
+msgid "Delete user account 'uid'"
+msgstr "Lösche eine Anwenderzugang 'uid'"
+
+#--------------------
+#: ../lib/XXV/MODULES/USER.pm:810
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:778
+#: ../lib/XXV/MODULES/USER.pm:818
msgid "You are not authorized for this function!"
msgstr "Sie sind nicht berechtigt, diese Funktion auszuführen!"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:78
-msgid "Delete user account 'uid'"
-msgstr "Lösche eine Anwenderzugang 'uid'"
-
-#--------------------
-#: ../lib/XXV/MODULES/USER.pm:785
+#: ../lib/XXV/MODULES/USER.pm:825
msgid "Sorry, couldn't understand command '%s'!\n"
msgstr "Entschuldigung, der Befehl '%s' konnte nicht verstanden werden!\n"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:84
+#: ../lib/XXV/MODULES/USER.pm:85
msgid "Edit user account 'uid'"
msgstr "Bearbeiten eine Anwenderzugang 'uid'"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:90
+#: ../lib/XXV/MODULES/USER.pm:91
msgid "Change preferences"
msgstr "Die eigenen Einstellungen verändern"
#--------------------
-#: ../lib/XXV/MODULES/USER.pm:96
+#: ../lib/XXV/MODULES/USER.pm:97
msgid "List the accounts of users"
msgstr "Zeige die Anwenderzugänge"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:1117 ../lib/XXV/MODULES/VTX.pm:1145 ../lib/XXV/MODULES/VTX.pm:1157
+#: ../lib/XXV/MODULES/VTX.pm:1120 ../lib/XXV/MODULES/VTX.pm:1148 ../lib/XXV/MODULES/VTX.pm:1160
msgid "Couldn't read page!"
msgstr "Die Seite konnte nicht gelesen werden!"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:1127 ../lib/XXV/MODULES/VTX.pm:490
+#: ../lib/XXV/MODULES/VTX.pm:1130 ../lib/XXV/MODULES/VTX.pm:493
msgid "Couldn't find page!"
msgstr "Die Seite konnte nicht gefunden werden!"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:115 ../lib/XXV/MODULES/VTX.pm:150
+#: ../lib/XXV/MODULES/VTX.pm:116 ../lib/XXV/MODULES/VTX.pm:152
msgid "None channel selected, missing base directory!"
msgstr "Kein Kanal gewählt, vermisse Basisverzeichnis!"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:136
+#: ../lib/XXV/MODULES/VTX.pm:137
msgid "None channel selected, empty base directory!"
msgstr "Kein Kanal gewählt, Basisverzeichnis leer!"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:1395
+#: ../lib/XXV/MODULES/VTX.pm:1399
msgid "No data to search given!"
msgstr "Keine Daten zum Suchen übergeben!"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:1423
+#: ../lib/XXV/MODULES/VTX.pm:1427
msgid "No page with '%s' found!"
msgstr "Keine Seite mit '%s' gefunden!"
@@ -4627,12 +4637,12 @@ msgid "This module display cached teletext pages from osdteletext-plugin."
msgstr "Diese Modul zeigt gespeicherte Videotextseiten des Plugin OSDTeletext an."
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:217 ../lib/XXV/MODULES/VTX.pm:243
+#: ../lib/XXV/MODULES/VTX.pm:219 ../lib/XXV/MODULES/VTX.pm:245
msgid "No data found for '%s'!"
msgstr "Keine Daten für '%s' gefunden!"
#--------------------
-#: ../lib/XXV/MODULES/VTX.pm:240
+#: ../lib/XXV/MODULES/VTX.pm:242
msgid "Channel '%s' selected."
msgstr "Kanal '%s' wurde gewählt."
@@ -4680,7 +4690,7 @@ msgid "Number of port to listen for wap clients"
msgstr "Nummer des Port, um auf WAP-Clients zu lauschen"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:201
+#: ../lib/XXV/MODULES/XMLTV.pm:202
msgid "Import epg data from xmltv sources ..."
msgstr "Importiere EPG Daten von XMLTV Quellen"
@@ -4690,17 +4700,17 @@ msgid "This module import epg data from xmltv sources."
msgstr "Dieses Modul importiert EPG Daten von XMLTV Quellen."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:260
+#: ../lib/XXV/MODULES/XMLTV.pm:271
msgid "Import epg data for channel '%s'"
msgstr "Importiere EPG Daten für Kanal '%s'"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:291
+#: ../lib/XXV/MODULES/XMLTV.pm:312
msgid "Transmit data."
msgstr "Übertrage Daten."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:304
+#: ../lib/XXV/MODULES/XMLTV.pm:326
msgid "None data exits to import"
msgstr "Keine Daten zum Importieren vorhanden."
@@ -4710,7 +4720,7 @@ msgid "Manual import epg data from xmltv sources."
msgstr "Manueller Import der EPG Daten von XMLTV Quellen."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:373
+#: ../lib/XXV/MODULES/XMLTV.pm:395
msgid "Title not available"
msgstr "Titel nicht verfügbar"
@@ -4720,122 +4730,122 @@ msgid "List rules to import epg data from xmltv sources."
msgstr "Zeige Regeln zum Importieren von EPG-Daten von XMLTV Quellen."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:473 ../lib/XXV/MODULES/XMLTV.pm:639
+#: ../lib/XXV/MODULES/XMLTV.pm:497 ../lib/XXV/MODULES/XMLTV.pm:666
msgid "Rule to import epg data from xmltv sources with ID '%s' does not exist in the database!"
msgstr "Regel zum Importieren von EPG-Daten von XMLTV Quellen mit ID '%s' existiert nicht in der Datenbank!"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:489
+#: ../lib/XXV/MODULES/XMLTV.pm:51
+msgid "Create rule to import epg data from xmltv sources."
+msgstr "Erzeuge Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
+
+#--------------------
+#: ../lib/XXV/MODULES/XMLTV.pm:514
msgid "Enable this rule"
msgstr "Aktiviere Regel"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:492
+#: ../lib/XXV/MODULES/XMLTV.pm:517
msgid "Source to import?"
msgstr "Quelle zum Importieren?"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:499
+#: ../lib/XXV/MODULES/XMLTV.pm:524
msgid "Limit import by this channel name inside xmltv source?"
msgstr "Begrenze Import auf diesen Kanalnamen innerhalb der XMLTV Quelle!"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:507
+#: ../lib/XXV/MODULES/XMLTV.pm:538
msgid "Assign data to channel?"
msgstr "Weise Daten einen Kanal zu?"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:51
-msgid "Create rule to import epg data from xmltv sources."
-msgstr "Erzeuge Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
-
-#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:526
+#: ../lib/XXV/MODULES/XMLTV.pm:552
msgid "Parse data as template?"
msgstr "Übersetzte Daten als Template?"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:536
+#: ../lib/XXV/MODULES/XMLTV.pm:562
msgid "Interval to parse data?"
msgstr "Intervall zum Lesen der Daten?"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:548
+#: ../lib/XXV/MODULES/XMLTV.pm:574
msgid "Edit rule to import epg data from xmltv sources"
msgstr "Bearbeite Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:549
+#: ../lib/XXV/MODULES/XMLTV.pm:575
msgid "Create a new rule to import epg data from xmltv sources"
msgstr "Erzeuge neue Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:557
-msgid "Rule to import epg data from xmltv sources saved!"
-msgstr "Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle gespeichert!"
-
-#--------------------
#: ../lib/XXV/MODULES/XMLTV.pm:58
msgid "Delete rule to import epg data from xmltv sources."
msgstr "Lösche Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:599 ../lib/XXV/MODULES/XMLTV.pm:606
+#: ../lib/XXV/MODULES/XMLTV.pm:583
+msgid "Rule to import epg data from xmltv sources saved!"
+msgstr "Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle gespeichert!"
+
+#--------------------
+#: ../lib/XXV/MODULES/XMLTV.pm:625 ../lib/XXV/MODULES/XMLTV.pm:632
msgid "Couldn't insert rule to import epg data from xmltv sources in database!"
msgstr "Konnte Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle nicht in Datenbank einfügen!"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:631
+#: ../lib/XXV/MODULES/XMLTV.pm:65
+msgid "Edit rule to import epg data from xmltv sources."
+msgstr "Bearbeite Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
+
+#--------------------
+#: ../lib/XXV/MODULES/XMLTV.pm:658
msgid "Missing ID to select rules for deletion! Please use xmltvremove 'id'"
msgstr "Vermisse ID zur Auswahl der Regel zum Löschen! Bitte verwende xmltvremove 'id'"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:643
+#: ../lib/XXV/MODULES/XMLTV.pm:670
msgid "Rule import epg data from xmltv sources %s is deleted."
msgstr "Regel %s zum Importieren von EPG-Daten aus einer XMLTV Quelle gelöscht!"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:65
-msgid "Edit rule to import epg data from xmltv sources."
-msgstr "Bearbeite Regel zum Importieren von EPG-Daten aus einer XMLTV Quelle."
-
-#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:665
+#: ../lib/XXV/MODULES/XMLTV.pm:693
msgid "Parse data as template"
msgstr "Übersetze Daten als Template"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:666
+#: ../lib/XXV/MODULES/XMLTV.pm:694
msgid "Interval to parse data"
msgstr "Intervall zum einlesen der Daten"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:667
+#: ../lib/XXV/MODULES/XMLTV.pm:695
msgid "source to import"
msgstr "Quelle zum Importieren"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:747
+#: ../lib/XXV/MODULES/XMLTV.pm:781
msgid "Yes"
msgstr "Ja"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:748
+#: ../lib/XXV/MODULES/XMLTV.pm:782
msgid "No"
msgstr "Nein"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:759
+#: ../lib/XXV/MODULES/XMLTV.pm:793
msgid "Every EPG Data import"
msgstr "Import bei jedem einlesen von EPG Daten"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:760
+#: ../lib/XXV/MODULES/XMLTV.pm:794
msgid "Once every day"
msgstr "Einmalig per Tag"
#--------------------
-#: ../lib/XXV/MODULES/XMLTV.pm:761
+#: ../lib/XXV/MODULES/XMLTV.pm:795
msgid "Once every week"
msgstr "Einmalig per Woche"
@@ -4845,17 +4855,17 @@ msgid "This receive and send Ajax messages."
msgstr "Dies empfängt und sendet AJAX Nachrichten."
#--------------------
-#: ../lib/XXV/OUTPUT/Ajax.pm:282 ../lib/XXV/OUTPUT/Console.pm:306 ../lib/XXV/OUTPUT/Html.pm:530 ../lib/XXV/OUTPUT/Wml.pm:304 ../wml/widgets/dir.tmpl:8
+#: ../lib/XXV/OUTPUT/Ajax.pm:282 ../lib/XXV/OUTPUT/Console.pm:306 ../lib/XXV/OUTPUT/Html.pm:526 ../lib/XXV/OUTPUT/Wml.pm:303 ../wml/widgets/dir.tmpl:8
msgid "Directory '%s' does not exist!"
msgstr "Verzeichnis '%s' existiert leider nicht!"
#--------------------
-#: ../lib/XXV/OUTPUT/Ajax.pm:287 ../lib/XXV/OUTPUT/Console.pm:311 ../lib/XXV/OUTPUT/Html.pm:535 ../lib/XXV/OUTPUT/Wml.pm:309 ../wml/widgets/file.tmpl:8
+#: ../lib/XXV/OUTPUT/Ajax.pm:287 ../lib/XXV/OUTPUT/Console.pm:311 ../lib/XXV/OUTPUT/Html.pm:531 ../lib/XXV/OUTPUT/Wml.pm:308 ../wml/widgets/file.tmpl:8
msgid "File '%s' does not exist!"
msgstr "Datei '%s' existiert leider nicht!"
#--------------------
-#: ../lib/XXV/OUTPUT/Ajax.pm:296 ../lib/XXV/OUTPUT/Console.pm:315 ../lib/XXV/OUTPUT/Html.pm:544 ../lib/XXV/OUTPUT/Wml.pm:313
+#: ../lib/XXV/OUTPUT/Ajax.pm:296 ../lib/XXV/OUTPUT/Console.pm:315 ../lib/XXV/OUTPUT/Html.pm:540 ../lib/XXV/OUTPUT/Wml.pm:312
msgid "Error '%s' (%s) : %s!"
msgstr "Fehler im Feld '%s' (%s) : %s!"
@@ -4936,7 +4946,7 @@ msgid "You can only use one of these elements: %s"
msgstr "Sie können nur einen von diesen Elementen verwenden: %s"
#--------------------
-#: ../lib/XXV/OUTPUT/Console.pm:642 ../lib/XXV/OUTPUT/Html.pm:938
+#: ../lib/XXV/OUTPUT/Console.pm:642 ../lib/XXV/OUTPUT/Html.pm:934
msgid "Module %s not found!"
msgstr "Modul %s nicht gefunden!"
@@ -4951,47 +4961,47 @@ msgid "This receives and sends HTML messages."
msgstr "Dies empfängt und sendet HTML Nachrichten"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:318
+#: ../lib/XXV/OUTPUT/Html.pm:314
msgid "Can't proper parse html widget '%s.tmpl'"
msgstr "Kann widget '%s.tmpl' nicht korrekt übersetzen."
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:319
+#: ../lib/XXV/OUTPUT/Html.pm:315
msgid "Your skin may be outdated, please check project home page for updates!"
msgstr "Der Skin ist möglischerweise veraltet, bitte überprüfe die Homepage des Projekt auf Updates!"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:472
+#: ../lib/XXV/OUTPUT/Html.pm:468
msgid "Authorization required"
msgstr "Berechtigung erforderlich"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:482
+#: ../lib/XXV/OUTPUT/Html.pm:478
msgid "Forbidden"
msgstr "Verboten"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:496 ../lib/XXV/OUTPUT/Wml.pm:274
+#: ../lib/XXV/OUTPUT/Html.pm:492 ../lib/XXV/OUTPUT/Wml.pm:273
msgid "Couldn't open file '%s' : %s!"
msgstr "Kann Datei '%s' nicht öffnen : %s!"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:497
+#: ../lib/XXV/OUTPUT/Html.pm:493
msgid "Not found"
msgstr "Nicht gefunden"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:581
+#: ../lib/XXV/OUTPUT/Html.pm:577
msgid "Please wait ..."
msgstr "Bitte warten ..."
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:956 ../lib/XXV/OUTPUT/Wml.pm:392
+#: ../lib/XXV/OUTPUT/Html.pm:952 ../lib/XXV/OUTPUT/Wml.pm:391
msgid "Back to configuration page."
msgstr "Zurück zur Konfigurationsseite"
#--------------------
-#: ../lib/XXV/OUTPUT/Html.pm:987
+#: ../lib/XXV/OUTPUT/Html.pm:983
msgid "File"
msgstr "Datei"
@@ -5086,27 +5096,27 @@ msgid "SMTP mail server host name"
msgstr "Hostname des SMTP Mail-Server"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:152
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:158
msgid "XXV RSS 1.0"
msgstr "XXV RSS 1.0"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:154 ../lib/XXV/OUTPUT/NEWS/RSS.pm:177
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:160 ../lib/XXV/OUTPUT/NEWS/RSS.pm:183
msgid "Messages from your VDR/XXV"
msgstr "Meldungen von VDR/XXV"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:157
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:163
msgid "XXV messages"
msgstr "XXV Meldungen"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:175
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:181
msgid "XXV RSS 2.0"
msgstr "XXV RSS 2.0"
#--------------------
-#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:204
+#: ../lib/XXV/OUTPUT/NEWS/RSS.pm:210
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 4799b37..c1be9f1 100644
--- a/locale/de/LC_MESSAGES/xxv.mo
+++ b/locale/de/LC_MESSAGES/xxv.mo
Binary files differ