summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2008-05-09 20:43:07 +0000
committerAndreas Brachold <vdr07@deltab.de>2008-05-09 20:43:07 +0000
commit45a83ae70347e03cec97821a8bc55c3d04574d05 (patch)
tree94f8eb69f30c609063c961f87dc29eb38d06bc7f /lib
parent07a8421cdf6fd70d217de1b1b6367752a4b42620 (diff)
downloadxxv-45a83ae70347e03cec97821a8bc55c3d04574d05.tar.gz
xxv-45a83ae70347e03cec97821a8bc55c3d04574d05.tar.bz2
* SHARE: Submit event data delayed and transmit data as block
* SHARE: use persist random id * UTF-8: Reorder defines * UTF-8: Replace 'SET NAMES' with 'set character set' * alist: Move generation of channels name from template to perl code * skins: header add generator meta-tag with version * RECORDS: Replace character by Hexnibble * HTTPD: Speedup lookup find skins * HTTPD: Build options for start page delayed, avoid wrong UTF8 translation * CHRONICLE: add cgi-parameter start/limit for paging query * EPG: now: add cgi-parameter __cgrp=all to get all data * CHRONICLE: Add message to console by delete entry * OUTPUT/Ajax: optimize callback 'questions'
Diffstat (limited to 'lib')
-rw-r--r--lib/Tools.pm6
-rw-r--r--lib/XXV/MODULES/AUTOTIMER.pm31
-rw-r--r--lib/XXV/MODULES/CHANNELS.pm13
-rw-r--r--lib/XXV/MODULES/CHRONICLE.pm118
-rw-r--r--lib/XXV/MODULES/CONFIG.pm11
-rw-r--r--lib/XXV/MODULES/EPG.pm124
-rw-r--r--lib/XXV/MODULES/EVENTS.pm5
-rw-r--r--lib/XXV/MODULES/GRAB.pm5
-rw-r--r--lib/XXV/MODULES/HTTPD.pm49
-rw-r--r--lib/XXV/MODULES/INTERFACE.pm5
-rw-r--r--lib/XXV/MODULES/LOGREAD.pm5
-rw-r--r--lib/XXV/MODULES/MEDIALIB.pm5
-rw-r--r--lib/XXV/MODULES/MOVETIMER.pm5
-rw-r--r--lib/XXV/MODULES/MUSIC.pm7
-rw-r--r--lib/XXV/MODULES/RECORDS.pm22
-rw-r--r--lib/XXV/MODULES/REMOTE.pm5
-rw-r--r--lib/XXV/MODULES/REPORT.pm5
-rw-r--r--lib/XXV/MODULES/ROBOT.pm5
-rw-r--r--lib/XXV/MODULES/SHARE.pm154
-rw-r--r--lib/XXV/MODULES/STATUS.pm5
-rw-r--r--lib/XXV/MODULES/STREAM.pm5
-rw-r--r--lib/XXV/MODULES/SVDRP.pm5
-rw-r--r--lib/XXV/MODULES/TELNET.pm5
-rw-r--r--lib/XXV/MODULES/TIMERS.pm5
-rw-r--r--lib/XXV/MODULES/USER.pm5
-rw-r--r--lib/XXV/MODULES/VTX.pm5
-rw-r--r--lib/XXV/MODULES/WAPD.pm7
-rw-r--r--lib/XXV/MODULES/XMLTV.pm13
-rw-r--r--lib/XXV/OUTPUT/Ajax.pm59
-rw-r--r--lib/XXV/OUTPUT/Html.pm9
30 files changed, 530 insertions, 173 deletions
diff --git a/lib/Tools.pm b/lib/Tools.pm
index e4a1b5d..682fdde 100644
--- a/lib/Tools.pm
+++ b/lib/Tools.pm
@@ -6,7 +6,6 @@ use FindBin qw($RealBin);
use lib sprintf("%s", $RealBin);
use lib sprintf("%s/../lib", $RealBin);
use Locale::gettext qw/!gettext/;
-use utf8;
use Encode;
use Data::Dumper;
@@ -756,11 +755,6 @@ sub setcharset($) {
sub gettext($) {
my $text = shift;
- unless($CHARSET) {
- my ($stack, $evalon) = &stackTrace;
- print $stack if($evalon != 1);
- }
-
unless($LOCALE) {
$LOCALE = Locale::gettext->domain_raw("xxv");
$LOCALE->codeset($CHARSET);
diff --git a/lib/XXV/MODULES/AUTOTIMER.pm b/lib/XXV/MODULES/AUTOTIMER.pm
index 8f54038..ca43d20 100644
--- a/lib/XXV/MODULES/AUTOTIMER.pm
+++ b/lib/XXV/MODULES/AUTOTIMER.pm
@@ -230,9 +230,14 @@ ORDER BY
# ------------------
sub new {
# ------------------
- my($class, %attr) = @_;
- my $self = {};
- bless($self, $class);
+ my($class, %attr) = @_;
+ my $self = {};
+ bless($self, $class);
+
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
# paths
$self->{paths} = delete $attr{'-paths'};
@@ -1220,7 +1225,26 @@ sub list {
my $fields = $sth->{'NAME'};
my $erg = $sth->fetchall_arrayref();
+
+
+ my $exclude;
+ if($obj->{exclude}) {
+ $sql .= sprintf('NOT (%s)', $obj->{exclude});
+ }
+ my $channels = main::getModule('CHANNELS')->ChannelHash('Id',$exclude);
+
map {
+ if($_->[3]) {
+ my @ch;
+ foreach my $c (split(',',$_->[3])) {
+ my $name = $channels->{$c} ? $channels->{$c}->{'Name'} : undef;
+ unless($name) {
+ $name = sprintf(gettext('Unknown channel : %s'),$c);
+ }
+ push(@ch, $name);
+ }
+ $_->[3] = join(',',@ch);
+ }
$_->[5] = fmttime($_->[5]);
$_->[6] = fmttime($_->[6]);
} @$erg;
@@ -1234,7 +1258,6 @@ sub list {
};
if($console->typ eq 'HTML') {
$info->{sortable} = '1';
- $info->{channels} = main::getModule('CHANNELS')->ChannelHash('Id');
$info->{timers} = main::getModule('TIMERS')->getTimersByAutotimer();
}
$console->table($erg, $info );
diff --git a/lib/XXV/MODULES/CHANNELS.pm b/lib/XXV/MODULES/CHANNELS.pm
index d821ca6..5d4a036 100644
--- a/lib/XXV/MODULES/CHANNELS.pm
+++ b/lib/XXV/MODULES/CHANNELS.pm
@@ -135,15 +135,18 @@ sub status {
# ------------------
sub new {
# ------------------
- my($class, %attr) = @_;
- my $self = {};
- bless($self, $class);
+ my($class, %attr) = @_;
+ my $self = {};
+ bless($self, $class);
+
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
# paths
$self->{paths} = delete $attr{'-paths'};
- $self->{charset} = delete $attr{'-charset'};
-
# who am I
$self->{MOD} = $self->module;
diff --git a/lib/XXV/MODULES/CHRONICLE.pm b/lib/XXV/MODULES/CHRONICLE.pm
index 2b1b790..c833fd8 100644
--- a/lib/XXV/MODULES/CHRONICLE.pm
+++ b/lib/XXV/MODULES/CHRONICLE.pm
@@ -54,9 +54,14 @@ sub module {
# ------------------
sub new {
# ------------------
- my($class, %attr) = @_;
- my $self = {};
- bless($self, $class);
+ my($class, %attr) = @_;
+ my $self = {};
+ bless($self, $class);
+
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
# paths
$self->{paths} = delete $attr{'-paths'};
@@ -162,6 +167,8 @@ sub list {
my $self = shift;
my $watcher = shift || return error('No watcher defined!');
my $console = shift || return error('No console defined!');
+ my $data = shift;
+ my $params = shift;
my %f = (
'id' => gettext('Service'),
@@ -186,16 +193,49 @@ SELECT SQL_CACHE
FROM CHRONICLE WHERE id > 0
ORDER BY starttime
|;
- my $sth = $self->{dbh}->prepare($sql);
- $sth->execute()
+
+ my $rows = 0;
+ my $sth;
+ my $limit = $console->{cgi} && $console->{cgi}->param('limit') ? CORE::int($console->{cgi}->param('limit')) : 0;
+ if($limit > 0) {
+ # Query total count of rows
+ my $rsth = $self->{dbh}->prepare($sql);
+ $rsth->execute()
+ or return error sprintf("Couldn't execute query: %s.",$rsth->errstr);
+ $rows = $rsth->rows;
+ if($rows <= $limit) {
+ $sth = $rsth;
+ } else {
+ # Add limit query
+ if($console->{cgi}->param('start')) {
+ $sql .= " LIMIT " . CORE::int($console->{cgi}->param('start'));
+ $sql .= "," . $limit;
+ } else {
+ $sql .= " LIMIT " . $limit;
+ }
+ }
+ }
+
+ unless($sth) {
+ $sth = $self->{dbh}->prepare($sql);
+ $sth->execute()
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ $rows = $sth->rows unless($rows);
+ }
+
my $fields = $sth->{'NAME'};
my $erg = $sth->fetchall_arrayref();
- map {
- $_->[3] = datum($_->[3],'weekday');
- } @$erg;
- unshift(@$erg, $fields);
- $console->table($erg);
+
+ unless($console->typ eq 'AJAX') {
+ map {
+ $_->[3] = datum($_->[3],'weekday');
+ } @$erg;
+ unshift(@$erg, $fields);
+ }
+ my $info = {
+ rows => $rows
+ };
+ $console->table($erg,$info);
return 1;
}
@@ -207,6 +247,7 @@ sub search {
my $watcher = shift || return error('No watcher defined!');
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 $params = shift;
my $query = buildsearch("title",$text);
@@ -233,16 +274,51 @@ SELECT SQL_CACHE
FROM CHRONICLE
|;
$sql .= sprintf("WHERE %s ORDER BY starttime",$query->{query});
- my $sth = $self->{dbh}->prepare($sql);
- $sth->execute(@{$query->{term}})
+
+
+
+ my $rows = 0;
+ my $sth;
+ my $limit = $console->{cgi} && $console->{cgi}->param('limit') ? CORE::int($console->{cgi}->param('limit')) : 0;
+ if($limit > 0) {
+ # Query total count of rows
+ my $rsth = $self->{dbh}->prepare($sql);
+ $rsth->execute(@{$query->{term}})
+ or return error sprintf("Couldn't execute query: %s.",$rsth->errstr);
+ $rows = $rsth->rows;
+ if($rows <= $limit) {
+ $sth = $rsth;
+ } else {
+ # Add limit query
+ if($console->{cgi}->param('start')) {
+ $sql .= " LIMIT " . CORE::int($console->{cgi}->param('start'));
+ $sql .= "," . $limit;
+ } else {
+ $sql .= " LIMIT " . $limit;
+ }
+ }
+ }
+
+ unless($sth) {
+ $sth = $self->{dbh}->prepare($sql);
+ $sth->execute(@{$query->{term}})
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ $rows = $sth->rows unless($rows);
+ }
+
my $fields = $sth->{'NAME'};
my $erg = $sth->fetchall_arrayref();
- map {
- $_->[3] = datum($_->[3],'weekday');
- } @$erg;
- unshift(@$erg, $fields);
- $console->table($erg);
+
+ unless($console->typ eq 'AJAX') {
+ map {
+ $_->[3] = datum($_->[3],'weekday');
+ } @$erg;
+ unshift(@$erg, $fields);
+ }
+ my $info = {
+ rows => $rows
+ };
+ $console->table($erg,$info);
return 1;
}
@@ -262,7 +338,13 @@ sub delete {
$sth->execute(@ids)
or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
- return 1;
+ $console->message(sprintf gettext("Chronicle entry %s deleted."), join(',', @ids));
+ debug sprintf('Chronicle entry "%s" is deleted%s',
+ join(',', @ids),
+ ( $console->{USER} && $console->{USER}->{Name} ? sprintf(' from user: %s', $console->{USER}->{Name}) : "" )
+ );
+ $console->redirect({url => '?cmd=chrlist', wait => 1})
+ if($console->typ eq 'HTML');
}
1;
diff --git a/lib/XXV/MODULES/CONFIG.pm b/lib/XXV/MODULES/CONFIG.pm
index bbe8751..8ff319e 100644
--- a/lib/XXV/MODULES/CONFIG.pm
+++ b/lib/XXV/MODULES/CONFIG.pm
@@ -70,9 +70,14 @@ sub module {
# ------------------
sub new {
# ------------------
- my($class, %attr) = @_;
- my $self = {};
- bless($self, $class);
+ my($class, %attr) = @_;
+ my $self = {};
+ bless($self, $class);
+
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/EPG.pm b/lib/XXV/MODULES/EPG.pm
index 35631e3..7e49470 100644
--- a/lib/XXV/MODULES/EPG.pm
+++ b/lib/XXV/MODULES/EPG.pm
@@ -162,6 +162,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
@@ -1008,13 +1013,26 @@ INSERT INTO NEXTEPG select
FROM EPG as e, CHANNELS as c
WHERE e.channel_id = c.Id
AND e.starttime > NOW()
-AND c.GRP = ?
+|;
+if($cgrp ne 'all') {
+ $sqltemp .= qq|
+ AND c.GRP = ?
+|; }
+
+ $sqltemp .= qq|
GROUP BY c.Id
|;
+
+
my $sthtemp = $obj->{dbh}->prepare($sqltemp);
- $sthtemp->execute($cgrp)
+ if($cgrp ne 'all') {
+ $sthtemp->execute($cgrp)
+ or return con_err($console, sprintf("Couldn't execute query: %s.",$sthtemp->errstr));
+ } else {
+ $sthtemp->execute()
or return con_err($console, sprintf("Couldn't execute query: %s.",$sthtemp->errstr));
+ }
my %f = (
'Service' => gettext('Service'),
@@ -1059,13 +1077,52 @@ WHERE
AND n.channel_id = c.Id
AND c.GRP = g.Id
AND e.starttime = n.nexttime
+|;
+
+if($cgrp ne 'all') {
+ $sql .= qq|
AND c.GRP = ?
-ORDER BY
- c.POS|;
+|; }
+
+ $sql .= qq|
+ORDER BY c.POS
+|;
+
+ my $rows;
+ my $sth;
+ my $limit = $console->{cgi} && $console->{cgi}->param('limit') ? CORE::int($console->{cgi}->param('limit')) : 0;
+ if($limit > 0) {
+ # Query total count of rows
+ my $rsth = $obj->{dbh}->prepare($sql);
+ if($cgrp ne 'all') {
+ $rsth->execute($cgrp)
+ or return error sprintf("Couldn't execute query: %s.",$rsth->errstr);
+ } else {
+ $rsth->execute()
+ or return error sprintf("Couldn't execute query: %s.",$rsth->errstr);
+ }
+ $rows = $rsth->rows;
+ if($rows <= $limit) {
+ $sth = $rsth;
+ } else {
+ # Add limit query
+ if($console->{cgi}->param('start')) {
+ $sql .= " LIMIT " . CORE::int($console->{cgi}->param('start'));
+ $sql .= "," . $limit;
+ } else {
+ $sql .= " LIMIT " . $limit;
+ }
+ }
+ }
+
+ unless($sth) {
+ $sth = $obj->{dbh}->prepare($sql);
+ $sth->execute(($cgrp ne 'all') ? $cgrp : undef)
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ $rows = $sth->rows unless($rows);
+ }
+
- my $sth = $obj->{dbh}->prepare($sql);
- $sth->execute($cgrp)
- or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
my $fields = $sth->{'NAME'};
my $erg = $sth->fetchall_arrayref();
unless($console->typ eq 'AJAX') {
@@ -1080,6 +1137,7 @@ ORDER BY
periods => $obj->{periods},
cgroups => $cgroups,
channelgroup => $cgrp,
+ rows => $rows
}
);
}
@@ -1151,16 +1209,53 @@ WHERE
AND c.GRP = g.Id
AND ? BETWEEN UNIX_TIMESTAMP(e.starttime)
AND (UNIX_TIMESTAMP(e.starttime) + e.duration)
- AND c.GRP = ?
-ORDER BY
- c.POS|;
+|;
+
+ my $term;
+ push(@{$term},$zeit);
+ if($cgrp ne 'all') {
+ push(@{$term},$cgrp);
+
+ $sql .= qq|
+ AND c.GRP = ?
+ |;
+ }
+
+ $sql .= qq|
+ORDER BY c.POS
+|;
+
+ my $rows;
+ my $sth;
+ my $limit = $console->{cgi} && $console->{cgi}->param('limit') ? CORE::int($console->{cgi}->param('limit')) : 0;
+ if($limit > 0) {
+ # Query total count of rows
+ my $rsth = $obj->{dbh}->prepare($sql);
+ $rsth->execute(@{$term})
+ or return error sprintf("Couldn't execute query: %s.",$rsth->errstr);
+ $rows = $rsth->rows;
+ if($rows <= $limit) {
+ $sth = $rsth;
+ } else {
+ # Add limit query
+ if($console->{cgi}->param('start')) {
+ $sql .= " LIMIT " . CORE::int($console->{cgi}->param('start'));
+ $sql .= "," . $limit;
+ } else {
+ $sql .= " LIMIT " . $limit;
+ }
+ }
+ }
+
+ unless($sth) {
+ $sth = $obj->{dbh}->prepare($sql);
+ $sth->execute(@{$term})
+ or return error sprintf("Couldn't execute query: %s.",$sth->errstr);
+ $rows = $sth->rows unless($rows);
+ }
- my $sth = $obj->{dbh}->prepare($sql);
- $sth->execute($zeit, $cgrp)
- or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
my $fields = $sth->{'NAME'};
my $erg = $sth->fetchall_arrayref();
-
unless($console->typ eq 'AJAX') {
# map {
# $_->[5] = datum($_->[5],'short');
@@ -1174,6 +1269,7 @@ ORDER BY
periods => $obj->{periods},
cgroups => $cgroups,
channelgroup => $cgrp,
+ rows => $rows
}
);
}
diff --git a/lib/XXV/MODULES/EVENTS.pm b/lib/XXV/MODULES/EVENTS.pm
index f6b3937..fb458ee 100644
--- a/lib/XXV/MODULES/EVENTS.pm
+++ b/lib/XXV/MODULES/EVENTS.pm
@@ -64,7 +64,10 @@ sub new {
my $self = {};
bless($self, $class);
- $self->{Trenner} = "\n#-- NextSub --#\n";
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/GRAB.pm b/lib/XXV/MODULES/GRAB.pm
index 996ac90..30c6a4b 100644
--- a/lib/XXV/MODULES/GRAB.pm
+++ b/lib/XXV/MODULES/GRAB.pm
@@ -134,6 +134,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/HTTPD.pm b/lib/XXV/MODULES/HTTPD.pm
index 2106d75..f9d6bb0 100644
--- a/lib/XXV/MODULES/HTTPD.pm
+++ b/lib/XXV/MODULES/HTTPD.pm
@@ -91,18 +91,11 @@ sub module {
default => 'now',
type => 'list',
required => gettext('This is required!'),
- choices => [
- [ gettext('Schema'), 'schema'],
- [ gettext('Running now'), 'now'],
- [ gettext('Program guide'), 'program'],
- [ gettext('Autotimer'), 'alist'],
- [ gettext('Timers'), 'tlist'],
- [ gettext('Recordings'), 'rlist'],
- [ gettext('Music'), 'mlist'],
- [ gettext('Remote'), 'remote'],
- [ gettext('Teletext'), 'vtxpage'],
- [ gettext('Status'), 'sa'],
- ],
+ choices => sub {
+ my $erg = $self->_get_startpage_as_array();
+ map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg;
+ return $erg;
+ }
},
Debug => {
description => gettext('Dump additional debugging information, required only for software development.'),
@@ -127,11 +120,14 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
- $self->{charset} = delete $attr{'-charset'};
-
# who am I
$self->{MOD} = $self->module;
@@ -531,8 +527,14 @@ sub findskins
{
my $self = shift || return error('No object defined!');
my @skins;
- find({ wanted => sub{
+
+ my $max_depth = $self->{paths}->{HTMLDIR} =~ tr[/][];
+
+ find({ wanted => sub {
+ my $depth = $File::Find::dir =~ tr[/][];
+
if(-d $File::Find::name
+ and ( $depth <= $max_depth )
and ( -e $File::Find::name.'/index.tmpl'
or -e $File::Find::name.'/index.html')
) {
@@ -634,5 +636,22 @@ sub checkvalue {
if(ref $console);
}
+# ------------------
+sub _get_startpage_as_array {
+# ------------------
+ my $self = shift || return error('No object defined!');
+ return [
+ [ 'schema', gettext('Schema')],
+ [ 'now', gettext('Running now')],
+ [ 'program',gettext('Program guide')],
+ [ 'alist', gettext('Autotimer')],
+ [ 'tlist', gettext('Timers')],
+ [ 'rlist', gettext('Recordings')],
+ [ 'mlist', gettext('Music')],
+ [ 'remote', gettext('Remote')],
+ [ 'vtxpage',gettext('Teletext')],
+ [ 'sa', gettext('Status')]
+ ];
+}
1;
diff --git a/lib/XXV/MODULES/INTERFACE.pm b/lib/XXV/MODULES/INTERFACE.pm
index 243ac15..84d3dca 100644
--- a/lib/XXV/MODULES/INTERFACE.pm
+++ b/lib/XXV/MODULES/INTERFACE.pm
@@ -55,6 +55,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/LOGREAD.pm b/lib/XXV/MODULES/LOGREAD.pm
index a211922..4665c55 100644
--- a/lib/XXV/MODULES/LOGREAD.pm
+++ b/lib/XXV/MODULES/LOGREAD.pm
@@ -67,6 +67,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/MEDIALIB.pm b/lib/XXV/MODULES/MEDIALIB.pm
index 76eb612..794c9fb 100644
--- a/lib/XXV/MODULES/MEDIALIB.pm
+++ b/lib/XXV/MODULES/MEDIALIB.pm
@@ -160,6 +160,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/MOVETIMER.pm b/lib/XXV/MODULES/MOVETIMER.pm
index 648359c..6b92d30 100644
--- a/lib/XXV/MODULES/MOVETIMER.pm
+++ b/lib/XXV/MODULES/MOVETIMER.pm
@@ -74,6 +74,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/MUSIC.pm b/lib/XXV/MODULES/MUSIC.pm
index d15e4d9..ad705cc 100644
--- a/lib/XXV/MODULES/MUSIC.pm
+++ b/lib/XXV/MODULES/MUSIC.pm
@@ -160,11 +160,14 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
- $self->{charset} = delete $attr{'-charset'};
-
# who am I
$self->{MOD} = $self->module;
diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm
index 74d6da7..4c2ffef 100644
--- a/lib/XXV/MODULES/RECORDS.pm
+++ b/lib/XXV/MODULES/RECORDS.pm
@@ -234,6 +234,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
@@ -414,14 +419,13 @@ sub parseData {
my $dataHash = {};
foreach my $record (@{$vdata}) {
- if($record =~ /\s+\d+´\s+/) { # VDR is patched with recording length patch
- # 250-1 01.11 15:14* 50´ Discovery~Die Rose von Kerrymore Spielfilm D/2000
- ($id, $date, $hour, $minute, $state, $duration, $title)
+ if($record =~ /\s+\d+\xB4\s+/) { # VDR is patched with recording length patch
+ ($id, $date, $hour, $minute, $state, $duration, $title)
= $record =~ /^250[\-|\s](\d+)\s+([\d|\.]+)\s+(\d+)\:(\d+)(.?)\s*(\d*).*?\s+(.+)/si;
} else { # Vanilla VDR
- # 250-1 01.11 15:14* Discovery~Die Rose von Kerrymore Spielfilm D/2000
- ($id, $date, $hour, $minute, $state, $title)
- = $record =~ /^250[\-|\s](\d+)\s+([\d|\.]+)\s+(\d+)\:(\d+)(.?).*?\s+(.+)/si;
+ # 250-1 01.11 15:14* Discovery~Die Rose von Kerrymore Spielfilm D/2000
+ ($id, $date, $hour, $minute, $state, $title)
+ = $record =~ /^250[\-|\s](\d+)\s+([\d|\.]+)\s+(\d+)\:(\d+)(.?).*?\s+(.+)/si;
}
unless($id) {
@@ -2229,7 +2233,7 @@ sub conv {
);
my $output;
- if(open P, $command .' |') { # Kommando ausführen und stdout einlesen
+ if(open P, $command .' |') { # execute command and read result from stdout
@$output = <P>;
close P;
if( $? >> 8 > 0) {
@@ -2377,8 +2381,8 @@ sub translate {
if($vfat eq 'y')
{
- $title =~ s/([^üäößa-z0-9\&\!\-\s\.\@\~\,\(\)\%\+])/sprintf('#%X', ord($1))/seig;
- $title =~ s/[^üäößa-z0-9\!\&\-\#\.\@\~\,\(\)\%\+]/_/sig;
+ $title =~ s/([^\xDC\xC4\xD6\xFC\xE4\xF6\xDFa-z0-9\&\!\-\s\.\@\~\,\(\)\%\+])/sprintf('#%X', ord($1))/seig;
+ $title =~ s/[^\xDC\xC4\xD6\xFC\xE4\xF6\xDFa-z0-9\!\&\-\#\.\@\~\,\(\)\%\+]/_/sig;
# Windows couldn't handle '.' at the end of directory names
$title =~ s/(\.$)/\#2E/sig;
$title =~ s/(\.~)/\#2E~/sig;
diff --git a/lib/XXV/MODULES/REMOTE.pm b/lib/XXV/MODULES/REMOTE.pm
index e313672..972ee86 100644
--- a/lib/XXV/MODULES/REMOTE.pm
+++ b/lib/XXV/MODULES/REMOTE.pm
@@ -77,6 +77,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/REPORT.pm b/lib/XXV/MODULES/REPORT.pm
index eb6edcf..dfcdc72 100644
--- a/lib/XXV/MODULES/REPORT.pm
+++ b/lib/XXV/MODULES/REPORT.pm
@@ -74,6 +74,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/ROBOT.pm b/lib/XXV/MODULES/ROBOT.pm
index 6e88113..e030abe 100644
--- a/lib/XXV/MODULES/ROBOT.pm
+++ b/lib/XXV/MODULES/ROBOT.pm
@@ -46,6 +46,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/SHARE.pm b/lib/XXV/MODULES/SHARE.pm
index 3a78718..6188298 100644
--- a/lib/XXV/MODULES/SHARE.pm
+++ b/lib/XXV/MODULES/SHARE.pm
@@ -10,22 +10,34 @@ $SIG{CHLD} = 'IGNORE';
# ------------------
sub AUTOLOAD {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $cmd = (split('::', $AUTOLOAD))[-1];
return if($cmd eq 'DESTROY');
- # Den Hash per Hand nachpflegen
- # bis zum nächsten Refresh ...
if($cmd eq 'setEventLevel') {
- $obj->StoreEventLevel($_[0],$_[1]);
- $_[2] += $obj->{TimeOffset} if(exists $obj->{TimeOffset});
+ # Den Hash per Hand nachpflegen
+ # bis zum nächsten Refresh ...
+ $self->StoreEventLevel($_[0],$_[1]);
+ $_[2] += $self->{TimeOffset} if(exists $self->{TimeOffset});
+
+ # Den Hash in Warteschlange einfügen ...
+ foreach my $d (@{$self->{setEventLevelQueue}}) {
+ if($d->[0] == $_[0]) {
+ $d->[1] = $_[1];
+ $d->[2] = $_[2];
+ return 1;
+ }
+ }
+ push(@{$self->{setEventLevelQueue}}, [$_[0],$_[1],$_[2]] );
+ return 1;
}
- if($obj->{SOAP} && $obj->{active} eq 'y') {
- my $erg = $obj->CmdToService($obj->{SOAP}, $cmd, $obj->{SessionId}, @_);
+ if($self->{SOAP} && $self->{active} eq 'y') {
+ my $erg = $self->CmdToService($self->{SOAP}, $cmd, $self->{randomid}, @_);
return $erg;
}
+ return 0;
}
@@ -33,7 +45,7 @@ sub AUTOLOAD {
# ------------------
sub module {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $args = {
Name => 'SHARE',
Prereq => {
@@ -74,14 +86,18 @@ sub module {
type => 'integer',
required => gettext('This is required!'),
},
+ randomid => {
+ default => "",
+ type => 'hidden'
+ }
},
Commands => {
topten => {
description => gettext("Display the TopTen list of timers."),
short => 't10',
- callback => sub{ $obj->TopTen(@_) },
- },
- },
+ callback => sub{ $self->TopTen(@_) },
+ }
+ }
};
return $args;
}
@@ -93,6 +109,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
@@ -102,6 +123,8 @@ sub new {
# read the DB Handle
$self->{dbh} = delete $attr{'-dbh'};
+ $self->{MOD}->{Preferences}->{randomid}->{default} = $self->generateRandomID();
+
# all configvalues to $self without parents (important for ConfigModule)
map {
$self->{$_} = $attr{'-config'}->{$self->{MOD}->{Name}}->{$_};
@@ -126,21 +149,21 @@ sub new {
# ------------------
sub _init {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
- $obj->{SessionId} = $obj->generateUniqueId
- unless($obj->{SessionId});
+ $self->{randomid} = $self->generateRandomID()
+ unless($self->{randomid});
my $version = 27; # Must be increment if rows of table changed
# this tables hasen't handmade user data,
# therefore old table could dropped if updated rows
# remove old table, if updated version
- if(!tableUpdated($obj->{dbh},'SHARE',$version,1)) {
+ if(!tableUpdated($self->{dbh},'SHARE',$version,1)) {
return 0;
}
- $obj->{dbh}->do(qq|
+ $self->{dbh}->do(qq|
CREATE TABLE IF NOT EXISTS SHARE (
eventid int unsigned default '0',
level float,
@@ -153,37 +176,44 @@ sub _init {
main::after(sub{
- $obj->{SOAP} = $obj->ConnectToService($obj->{SessionId},$obj->{rating});
+ $self->{SOAP} = $self->ConnectToService($self->{randomid},$self->{rating});
- unless($obj->{SOAP}) {
- error sprintf("Couldn't connect to popularity web service %s!", $obj->{rating});
+ unless($self->{SOAP}) {
+ error sprintf("Couldn't connect to popularity web service %s!", $self->{rating});
return 0;
} else {
- my $servertime = $obj->getServerTime();
+ my $servertime = $self->getServerTime();
if($servertime) {
my $offset = time - $servertime;
if($offset > 60 || $offset < -60) {
- $obj->{TimeOffset} = $offset;
+ $self->{TimeOffset} = $offset;
lg sprintf('Popularity web service has time offset %d seconds.',$offset);
}
}
}
return 1;
- }, "SHARE: Connect to popularity web service ...",4) if($obj->{active} eq 'y');
+ }, "SHARE: Connect to popularity web service ...",4) if($self->{active} eq 'y');
main::after(sub{
- if($obj->{SOAP}) {
- $obj->getSoapData();
+ if($self->{SOAP}) {
+ $self->getSoapData();
Event->timer(
- interval => $obj->{update} * 3600,
+ interval => $self->{update} * 3600,
prio => 6, # -1 very hard ... 6 very low
cb => sub{
- $obj->getSoapData()
+ $self->getSoapData();
+ },
+ );
+ Event->timer(
+ interval => ($self->{update}/12) * 1800,
+ prio => 6, # -1 very hard ... 6 very low
+ cb => sub{
+ $self->flushEventLevelQueue();
},
);
}
- return 1;
- }, "SHARE: Update data with popularity web service ...",48) if($obj->{active} eq 'y');
+ return 1;
+ }, "SHARE: Update data with popularity web service ...",48) if($self->{active} eq 'y');
return 1;
}
@@ -191,14 +221,14 @@ sub _init {
# ------------------
sub getSoapData {
# ------------------
- my $obj = shift || return error('No object defined!');
- return unless($obj->{SOAP} and $obj->{active} eq 'y');
+ my $self = shift || return error('No object defined!');
+ return unless($self->{SOAP} and $self->{active} eq 'y');
lg 'Start interval to get popularity top ten events!';
- my $topevents = $obj->getTopTen(1000);
+ my $topevents = $self->getTopTen(1000);
my $time = time;
foreach my $t (@$topevents) {
- my $sth = $obj->{dbh}->prepare('REPLACE INTO SHARE(eventid, level, quantity, rank, addtime) VALUES (?,?,?,?,FROM_UNIXTIME(?))');
+ my $sth = $self->{dbh}->prepare('REPLACE INTO SHARE(eventid, level, quantity, rank, addtime) VALUES (?,?,?,?,FROM_UNIXTIME(?))');
$sth->execute(
$t->{e}, # eventid
$t->{l}, # level
@@ -208,39 +238,39 @@ sub getSoapData {
);
}
- my $dsth = $obj->{dbh}->prepare('DELETE FROM SHARE WHERE addtime != FROM_UNIXTIME(?)');
+ my $dsth = $self->{dbh}->prepare('DELETE FROM SHARE WHERE addtime != FROM_UNIXTIME(?)');
$dsth->execute($time);
}
# ------------------
-sub generateUniqueId {
+sub generateRandomID {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
- my $sessionId;
+ my $randomid;
for(my $i=0 ; $i< 16 ;)
{
my $j = chr(int(rand(127)));
if($j =~ /[a-zA-Z0-9]/)
{
- $sessionId .=$j;
+ $randomid .=$j;
$i++;
}
}
- return $sessionId;
+ return $randomid;
}
# ------------------
sub ConnectToService {
# ------------------
- my $obj = shift || return error('No object defined!');
- my $sid = shift || $obj->{SessionId} || return error('No session id defined!');
+ my $self = shift || return error('No object defined!');
+ my $sid = shift || $self->{randomid} || return error('No session id defined!');
my $service = shift;
return undef
- if($obj->{active} ne 'y');
+ if($self->{active} ne 'y');
my $version = main::getVersion();
@@ -256,13 +286,13 @@ sub ConnectToService {
my $usrkey;
if($webservice) {
- $usrkey = $obj->CmdToService($webservice,'getUsrKey',$obj->{SessionId})
+ $usrkey = $self->CmdToService($webservice,'getUsrKey',$self->{randomid})
or error "Couldn't get user key";
- error "Response contain wrong answer" if($usrkey ne $obj->{SessionId});
+ error "Response contain wrong answer" if($usrkey ne $self->{randomid});
}
return $webservice
- if($usrkey eq $obj->{SessionId});
+ if($usrkey eq $self->{randomid});
return undef;
}
@@ -270,7 +300,7 @@ sub ConnectToService {
# ------------------
sub getEventLevel {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $eid = shift || return;
my $sql = qq|
@@ -280,7 +310,7 @@ where
eventid = ?
|;
- my $sth = $obj->{dbh}->prepare($sql);
+ my $sth = $self->{dbh}->prepare($sql);
$sth->execute($eid)
or return error(sprintf("Event '%s' does not exist in the database!",$eid));
my $erg = $sth->fetchrow_hashref();
@@ -290,11 +320,11 @@ where
# ------------------
sub StoreEventLevel {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $eid = shift || return;
my $level = shift || return;
- my $sth = $obj->{dbh}->prepare('REPLACE INTO SHARE(eventid, level, quantity, rank, addtime) VALUES (?,?,1,1,NOW())');
+ my $sth = $self->{dbh}->prepare('REPLACE INTO SHARE(eventid, level, quantity, rank, addtime) VALUES (?,?,1,1,NOW())');
$sth->execute(
$eid, # eventid
$level # level
@@ -304,7 +334,7 @@ sub StoreEventLevel {
# ------------------
sub TopTen {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $watcher = shift || return error('No watcher defined!');
my $console = shift || return error('No console defined!');
my $anzahl = shift || 10;
@@ -364,7 +394,7 @@ sub TopTen {
LIMIT ?
|;
- my $sth = $obj->{dbh}->prepare($sql);
+ my $sth = $self->{dbh}->prepare($sql);
$sth->execute($anzahl)
or return con_err($console, sprintf("Couldn't execute query: %s.",$sth->errstr));
my $fields = $sth->{'NAME'};
@@ -378,17 +408,35 @@ sub TopTen {
}
# ------------------
+sub flushEventLevelQueue {
+# ------------------
+ my $self = shift || return error('No object defined!');
+
+ do {
+ my @Queue = splice(@{$self->{setEventLevelQueue}},0,25);
+ if(scalar @Queue) {
+ lg(sprintf("Flush %d item from event level queue",scalar @Queue));
+ my $result = $self->setEventArray(\@Queue);
+ if($result != 1) {
+ error(sprintf("Wrong response from soap service setEventArray(%s)", $result));
+ }
+ }
+ } while (scalar @{$self->{setEventLevelQueue}});
+
+}
+
+# ------------------
sub CmdToService {
# ------------------
- my $obj = shift || return error('No object defined!');
+ my $self = shift || return error('No object defined!');
my $service = shift || return error('No service defined!');
my $cmd = shift || return error('No command defined!');
my @arg = @_;
- lg(sprintf("CmdToService : %s - %s",$cmd, join(", ",@arg)));
+ lg(sprintf("Call %s from soap service : %s",$cmd, $arg[0]));
my $res = eval "\$service->$cmd(\@arg)";
- $@ ? return error('SyntaxError: $@')
+ $@ ? return error("SyntaxError: $@")
: return $res;
}
diff --git a/lib/XXV/MODULES/STATUS.pm b/lib/XXV/MODULES/STATUS.pm
index 1b0dc60..75eb80e 100644
--- a/lib/XXV/MODULES/STATUS.pm
+++ b/lib/XXV/MODULES/STATUS.pm
@@ -129,6 +129,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/STREAM.pm b/lib/XXV/MODULES/STREAM.pm
index 9f96a3d..c4deab0 100644
--- a/lib/XXV/MODULES/STREAM.pm
+++ b/lib/XXV/MODULES/STREAM.pm
@@ -131,6 +131,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/SVDRP.pm b/lib/XXV/MODULES/SVDRP.pm
index 0a02831..e18eeff 100644
--- a/lib/XXV/MODULES/SVDRP.pm
+++ b/lib/XXV/MODULES/SVDRP.pm
@@ -68,6 +68,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/TELNET.pm b/lib/XXV/MODULES/TELNET.pm
index 1564bc5..47b4585 100644
--- a/lib/XXV/MODULES/TELNET.pm
+++ b/lib/XXV/MODULES/TELNET.pm
@@ -92,6 +92,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm
index f788af9..c542d9a 100644
--- a/lib/XXV/MODULES/TIMERS.pm
+++ b/lib/XXV/MODULES/TIMERS.pm
@@ -364,6 +364,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/USER.pm b/lib/XXV/MODULES/USER.pm
index 95cf1f3..76eebe6 100644
--- a/lib/XXV/MODULES/USER.pm
+++ b/lib/XXV/MODULES/USER.pm
@@ -153,6 +153,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/VTX.pm b/lib/XXV/MODULES/VTX.pm
index bc7ba39..ffb5173 100644
--- a/lib/XXV/MODULES/VTX.pm
+++ b/lib/XXV/MODULES/VTX.pm
@@ -74,6 +74,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
diff --git a/lib/XXV/MODULES/WAPD.pm b/lib/XXV/MODULES/WAPD.pm
index ff5dcc6..4ff424f 100644
--- a/lib/XXV/MODULES/WAPD.pm
+++ b/lib/XXV/MODULES/WAPD.pm
@@ -95,11 +95,14 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
- $self->{charset} = delete $attr{'-charset'};
-
# who am I
$self->{MOD} = $self->module;
diff --git a/lib/XXV/MODULES/XMLTV.pm b/lib/XXV/MODULES/XMLTV.pm
index 753ffcd..b3ed74b 100644
--- a/lib/XXV/MODULES/XMLTV.pm
+++ b/lib/XXV/MODULES/XMLTV.pm
@@ -4,7 +4,6 @@ use strict;
use File::Find;
use File::Basename;
use Tools;
-use utf8;
use Encode;
# This module method must exist for XXV
@@ -81,11 +80,14 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'};
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# paths
$self->{paths} = delete $attr{'-paths'};
- $self->{charset} = delete $attr{'-charset'};
-
# who am I
$self->{MOD} = $self->module;
@@ -347,11 +349,12 @@ sub _ProcessXML {
my $text = shift;
my $xdata = $self->{xml}->XMLin($text);
- # Ausgabe
return error "Missing channel" unless $xdata->{channel};
return error "Missing program data" unless $xdata->{programme};
+ # Create output
+
my $epgdata = '';
@@ -731,7 +734,7 @@ sub findfiles
find({ wanted => sub{
if(-r $File::Find::name) {
if($File::Find::name =~ /\.xml$/sig # Lookup for *.xml
- or $File::Find::name =~ /\.tpl$/sig) { # Lookup for *.xml
+ or $File::Find::name =~ /\.tpl$/sig) { # Lookup for *.tpl
my $l = basename($File::Find::name);
push(@files,[$l,$l]);
}
diff --git a/lib/XXV/OUTPUT/Ajax.pm b/lib/XXV/OUTPUT/Ajax.pm
index 927e4f6..a072c68 100644
--- a/lib/XXV/OUTPUT/Ajax.pm
+++ b/lib/XXV/OUTPUT/Ajax.pm
@@ -1,7 +1,6 @@
package XXV::OUTPUT::Ajax;
use strict;
-use utf8;
use Encode;
use vars qw($AUTOLOAD);
use Tools;
@@ -38,10 +37,9 @@ sub AUTOLOAD {
my $name = (split('::', $AUTOLOAD))[-1];
return if($name eq 'DESTROY');
- $self->{nopack} = 1;
$self->out( $data, $params, $name );
- $self->{call} = '';
+ #$self->{call} = '';
}
# ------------------
@@ -51,6 +49,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'} || 'ISO-8859-1';
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# who am I
$self->{MOD} = $self->module;
@@ -78,9 +81,6 @@ sub new {
$self->{debug} = $attr{'-debug'}
|| 0;
- $self->{charset} = $attr{'-charset'}
- || 'ISO-8859-15';
-
$self->{types} = {
'xml' => 'application/xml; charset='. $self->{charset},
'json' => 'application/json; charset='. $self->{charset},
@@ -102,6 +102,13 @@ sub new {
}
$self->{TYP} = 'AJAX';
+ # Forward name of Server for CGI::server_software
+ $ENV{'SERVER_SOFTWARE'} = sprintf("xxvd %s",main::getVersion());
+ $ENV{'SERVER_PROTOCOL'} = 'HTTP/1.1';
+
+ eval "use Compress::Zlib";
+ $self->{Zlib} = ($@ ? 0 : 1);
+
return $self;
}
@@ -299,6 +306,9 @@ sub question {
my $out = [];
if(ref $questions eq 'ARRAY') {
@$quest = @$questions;
+ } else {
+ @$quest = [ $questions ];
+ }
while (my ($name, $data) = splice(@$quest, 0, 2)) {
my $type = $data->{typ} || 'string';
my $def ;
@@ -321,33 +331,16 @@ sub question {
}
}
- push(@$out,[$name,$data->{msg},$type,$def,$data->{req} ? 1 : 0,$data->{readonly} ? 1 : 0,$choices]);
- }
- $self->out( $out, 0 , 'question' );
- } else {
- my $type = $questions->{typ} || 'string';
- my $def ;
- if(ref $questions->{def} eq 'CODE') {
- $def = $questions->{def}();
- } elsif(ref $questions->{def} eq 'ARRAY') {
- $def = join(',',@{$questions->{def}});
- } else {
- $def = $questions->{def};
- }
+ if($type eq 'list'
+ && $data->{options}
+ && $data->{options} eq 'multi') {
+ $type = 'multilist';
+ }
- my $choices ;
- if($questions->{choices}) {
- if(ref $questions->{choices} eq 'CODE') {
- $choices = $questions->{choices}();
- } else {
- $choices = $questions->{choices};
- }
+ push(@$out,[$name,$data->{msg},$type,$def,$data->{req} ? 1 : 0,$data->{readonly} ? 1 : 0,$choices]);
}
-
- push(@$out,[$type,$questions->{msg},$type,$def,$questions->{req} ? 1 : 0,$questions->{readonly} ? 1 : 0,$choices]);
$self->out( $out, 0 , 'question' );
- }
- return undef;
+ return undef;
}
# ------------------
@@ -367,7 +360,7 @@ sub msg {
$self->out( $msg, { state => $state }, 'msg' );
- $self->{call} = '';
+ #$self->{call} = '';
}
# ------------------
@@ -400,8 +393,8 @@ sub setCall {
my $self = shift || return error('No object defined!');
my $name = shift || return error('No name defined!');
- $self->{call} = $name;
- return $self->{call};
+ #$self->{call} = $name;
+ #return $self->{call};
}
# ------------------
diff --git a/lib/XXV/OUTPUT/Html.pm b/lib/XXV/OUTPUT/Html.pm
index b918e81..1b0ece7 100644
--- a/lib/XXV/OUTPUT/Html.pm
+++ b/lib/XXV/OUTPUT/Html.pm
@@ -58,6 +58,11 @@ sub new {
my $self = {};
bless($self, $class);
+ $self->{charset} = delete $attr{'-charset'} || 'ISO-8859-1';
+ if($self->{charset} eq 'UTF-8'){
+ eval 'use utf8';
+ }
+
# who am I
$self->{MOD} = $self->module;
@@ -97,9 +102,6 @@ sub new {
$self->{debug} = $attr{'-debug'}
|| 0;
- $self->{charset} = $attr{'-charset'}
- || 'ISO-8859-1';
-
$self->{TYP} = 'HTML';
# Forward name of Server for CGI::server_software
@@ -433,6 +435,7 @@ sub statusmsg {
$self->{output_header} = $self->{cgi}->header(
-type => $typ,
-status => $status,
+ -charset => $self->{charset},
%{$arg},
);
}