summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-12-20 13:10:06 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-12-20 13:10:06 +0000
commit4c79c794a2f843d801604a02262e83506baa1120 (patch)
treee8ee416aede78d53c59131ab5a110f1ae8e012b5 /lib
parentf608b06dfa841be89942d914d8d80b936b65316d (diff)
downloadxxv-4c79c794a2f843d801604a02262e83506baa1120.tar.gz
xxv-4c79c794a2f843d801604a02262e83506baa1120.tar.bz2
* NEWS: Show category on message
* NEWS: Select category name inseed integer value
Diffstat (limited to 'lib')
-rw-r--r--lib/XXV/MODULES/EVENTS.pm4
-rw-r--r--lib/XXV/MODULES/RECORDS.pm1
-rw-r--r--lib/XXV/MODULES/REPORT.pm51
-rw-r--r--lib/XXV/MODULES/SHARE.pm11
-rw-r--r--lib/XXV/MODULES/TIMERS.pm7
-rw-r--r--lib/XXV/OUTPUT/NEWS/JABBER.pm32
-rw-r--r--lib/XXV/OUTPUT/NEWS/MAIL.pm33
-rw-r--r--lib/XXV/OUTPUT/NEWS/RSS.pm92
-rw-r--r--lib/XXV/OUTPUT/NEWS/VDR.pm55
9 files changed, 202 insertions, 84 deletions
diff --git a/lib/XXV/MODULES/EVENTS.pm b/lib/XXV/MODULES/EVENTS.pm
index 47f75f1..7172e7e 100644
--- a/lib/XXV/MODULES/EVENTS.pm
+++ b/lib/XXV/MODULES/EVENTS.pm
@@ -3,8 +3,7 @@ use strict;
use Tools;
use Locale::gettext;
-use File::Basename;
-use File::Find;
+
# This module method must exist for XXV
# ------------------
@@ -14,7 +13,6 @@ sub module {
my $args = {
Name => 'EVENTS',
Prereq => {
- 'Data::Dumper' => 'stringified perl data structures, suitable for both printing and eval',
'Date::Manip' => 'date manipulation routines',
},
Description => gettext(
diff --git a/lib/XXV/MODULES/RECORDS.pm b/lib/XXV/MODULES/RECORDS.pm
index eb73778..416a093 100644
--- a/lib/XXV/MODULES/RECORDS.pm
+++ b/lib/XXV/MODULES/RECORDS.pm
@@ -178,7 +178,6 @@ sub module {
# "Msg=>text" = logmessage =~ /text/
# "Mod=>text" = modname =~ /text/
SearchForEvent => {
- Sub => 'RECORDS',
Msg => 'delr',
},
# Search for a Match and extract the information
diff --git a/lib/XXV/MODULES/REPORT.pm b/lib/XXV/MODULES/REPORT.pm
index a1ac3b1..c9797d9 100644
--- a/lib/XXV/MODULES/REPORT.pm
+++ b/lib/XXV/MODULES/REPORT.pm
@@ -28,6 +28,16 @@ sub module {
default => 'y',
type => 'confirm',
required => gettext('This is required!'),
+ check => sub {
+ my $value = shift;
+ if($value eq 'y') {
+ my $module = main::getModule('EVENTS');
+ if(!$module or $module->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS');
+ }
+ }
+ return $value;
+ },
},
interval => {
description => gettext('Time in hours to send the report.'),
@@ -105,17 +115,17 @@ sub new {
my $erg = $self->init or return error('Problem to initialize modul!');
# Initiat after load modules ...
- main::after(sub{
+ main::after( sub{
my $start = main::getStartTime;
$self->news(
- sprintf(gettext('Restart the xxv system at: %s!'), datum($start)),
+ sprintf(gettext('XXVD System %s started'), main::getVersion),
+ sprintf(gettext('Start time: %s'), datum($start)),
undef,
undef,
- undef,
- 'important',
+ 'important'
);
return 1;
- }, "Send restart message to news modules ...");
+ }, "Send start message to news modules ...");
return $self;
}
@@ -217,6 +227,7 @@ sub news {
Url => $url,
Level => $lev,
LevelName => $levname,
+ category => $obj->translate_level($levname)
};
# Send to all activated News modules
@@ -270,11 +281,13 @@ sub scala {
my $typ = shift || return 10;
$obj->{SCALA} = {
+ 'all' => 1,
'harmless' => 10,
'interesting' => 30,
'veryinteresting'=> 50,
'important' => 70,
'veryimportant' => 100,
+ 'none' => 200,
} unless(exists $obj->{SCALA});
if($typ and exists $obj->{SCALA}->{$typ}) {
@@ -284,5 +297,33 @@ sub scala {
}
}
+# ------------------
+sub get_level_as_array {
+# ------------------
+ my $obj = shift || return error('No object defined!');
+
+ return [
+ [ 1, gettext('All messages') ], # Include all messages, dont use as category
+ [ 10, gettext('Harmless') ],
+ [ 30, gettext('Interesting') ],
+ [ 50, gettext('Very interesting') ],
+ [ 70, gettext('Important') ],
+ [ 100, gettext('Very important') ],
+ [ 200, gettext('None messages') ] # Exclude all messages, dont use as category
+ ];
+}
+
+sub translate_level {
+ my $obj = shift || return error('No object defined!');
+ my $level = shift || 'harmless';
+
+ my $s = $obj->scala($level);
+
+ my $erg = $obj->get_level_as_array();
+ foreach my $w ( @$erg ) {
+ return $w->[1] if($s <= $w->[0]);
+ }
+ return gettext('Harmless');
+}
1;
diff --git a/lib/XXV/MODULES/SHARE.pm b/lib/XXV/MODULES/SHARE.pm
index f37d777..62466cb 100644
--- a/lib/XXV/MODULES/SHARE.pm
+++ b/lib/XXV/MODULES/SHARE.pm
@@ -51,6 +51,17 @@ sub module {
default => 'n',
type => 'confirm',
required => gettext('This is required!'),
+ check => sub {
+ my $value = shift;
+ if($value eq 'y') {
+ my $module = main::getModule('EVENTS');
+ unless($module or $module->{active} eq 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS');
+ }
+ }
+ return $value;
+ },
+
},
rating => {
description => gettext('URL to access popularity web service.'),
diff --git a/lib/XXV/MODULES/TIMERS.pm b/lib/XXV/MODULES/TIMERS.pm
index bd663b9..38acde4 100644
--- a/lib/XXV/MODULES/TIMERS.pm
+++ b/lib/XXV/MODULES/TIMERS.pm
@@ -137,7 +137,6 @@ sub module {
# "Msg=>text" = logmessage =~ /text/
# "Mod=>text" = modname =~ /text/
SearchForEvent => {
- Mod => 'TIMERS',
Msg => 'New timer',
},
# Search for a Match and extract the information
@@ -191,7 +190,6 @@ sub module {
Descr => gettext('Create event entries if the user has deleted a timer.'),
Level => 'interesting',
SearchForEvent => {
- Mod => 'TIMERS',
Msg => 'delt',
},
Match => {
@@ -235,19 +233,18 @@ sub module {
Descr => gettext('Create event entries if the user has toggled a timer.'),
Level => 'interesting',
SearchForEvent => {
- Mod => 'TIMERS',
Msg => 'modt',
},
Match => {
TimerId => qr/modt\s+(\d+)\s(on|off)/s,
- #Type => qr/modt\s+\d+\s+(on|off)/s,
+ Type => qr/modt\s+\d+\s+(on|off)/s
},
Actions => [
q|sub{ my $args = shift;
my $event = shift;
my $timer = getDataById($args->{TimerId}, 'TIMERS', 'Id');
my $title;
- if($timer->{Status} & 1) {
+ if($args->{Type} eq 'on') {
$title = sprintf(gettext("Timer activated: %s"),$timer->{File});
} else {
$title = sprintf(gettext("Timer deactivated: %s"),$timer->{File});
diff --git a/lib/XXV/OUTPUT/NEWS/JABBER.pm b/lib/XXV/OUTPUT/NEWS/JABBER.pm
index c343cac..ba424b3 100644
--- a/lib/XXV/OUTPUT/NEWS/JABBER.pm
+++ b/lib/XXV/OUTPUT/NEWS/JABBER.pm
@@ -71,20 +71,37 @@ Then you must receive a message in your running jabber client.
check => sub {
my $value = shift;
my $erg = $obj->init
- or return error('Problem to initialize news module')
+ or return undef, gettext("Can't initialize news modul!")
if($value eq 'y' and not exists $obj->{JCON});
+ if($value eq 'y') {
+ my $emodule = main::getModule('EVENTS');
+ if(!$emodule or $emodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS');
+ }
+ my $rmodule = main::getModule('REPORT');
+ if(!$rmodule or $rmodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT');
+ }
+ }
return $value;
},
},
level => {
- description => gettext('Minimum level of messages which can be displayed (1 ... 100)'),
+ description => gettext('Category of messages that should displayed'),
default => 1,
- type => 'integer',
+ type => 'list',
+ choices => sub {
+ my $rmodule = main::getModule('REPORT');
+ return undef unless($rmodule);
+ my $erg = $rmodule->get_level_as_array();
+ map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg;
+ return @$erg;
+ },
required => gettext('This is required!'),
check => sub {
my $value = int(shift) || 0;
unless($value >= 1 and $value <= 100) {
- return undef, 'Sorry, but the value must be between 1 and 100';
+ return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100);
}
return $value;
},
@@ -157,8 +174,8 @@ sub new {
main::after(sub{
# The Initprocess
my $erg = $self->init
- or return error('Problem to initialize news modul!');
- }, "NEWS::JABBER: Start initiate the jabber modul ...")
+ or return error("Can't initialize news modul!");
+ }, "NEWS::JABBER: Start initiate news modul ...")
if($self->{active} eq 'y');
return $self;
@@ -168,7 +185,6 @@ sub new {
sub init {
# ------------------
my $obj = shift || return error('No object defined!');
- my $url = sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port});
1;
}
@@ -180,7 +196,7 @@ sub jconnect {
my $jcon = Net::XMPP::Client->new(
debuglevel => 0,
- ) || return error('Problem to create an Jabber Client');
+ ) || return error("Can't create jabber client");
my ($user, $server) = split('\@', $obj->{user});
diff --git a/lib/XXV/OUTPUT/NEWS/MAIL.pm b/lib/XXV/OUTPUT/NEWS/MAIL.pm
index d92cd3b..0fbeca2 100644
--- a/lib/XXV/OUTPUT/NEWS/MAIL.pm
+++ b/lib/XXV/OUTPUT/NEWS/MAIL.pm
@@ -35,20 +35,37 @@ sub module {
check => sub {
my $value = shift;
my $erg = $obj->init
- or return error('Problem to initialize news module')
+ or return undef, gettext("Can't initialize news modul!")
if($value eq 'y' and not exists $obj->{INITE});
return $value;
+ if($value eq 'y') {
+ my $emodule = main::getModule('EVENTS');
+ if(!$emodule or $emodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS');
+ }
+ my $rmodule = main::getModule('REPORT');
+ if(!$rmodule or $rmodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT');
+ }
+ }
},
},
level => {
- description => gettext('Minimum level of messages which can be displayed (1 ... 100)'),
+ description => gettext('Category of messages that should displayed'),
default => 1,
- type => 'integer',
+ type => 'list',
+ choices => sub {
+ my $rmodule = main::getModule('REPORT');
+ return undef unless($rmodule);
+ my $erg = $rmodule->get_level_as_array();
+ map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg;
+ return @$erg;
+ },
required => gettext('This is required!'),
check => sub {
my $value = int(shift) || 0;
unless($value >= 1 and $value <= 100) {
- return undef, 'Sorry, but the value must be between 1 and 100';
+ return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100);
}
return $value;
},
@@ -75,7 +92,7 @@ sub module {
},
from_address => {
description => gettext('Mail address to describe the sender.'),
- default => 'xxv@vdr.de',
+ default => 'xxv@example.com',
type => 'string',
},
smtp => {
@@ -161,7 +178,7 @@ sub new {
# The Initprocess
my $erg = $self->init
- or return error('Problem to initialize news modul!')
+ or return error("Can't initialize news modul!")
if($self->{active} eq 'y');
$self->{TYP} = 'text/plain';
@@ -218,11 +235,11 @@ sub send {
subject => "News from your XXV System!" ,
msg => $content,
msgid => $obj->{COUNT},
- ) || return error sprintf('Problem to send mail: %s', $Mail::SendEasy::ER);
+ ) || return error sprintf("Can't send mail: %s", $Mail::SendEasy::ER);
$obj->{LastReportTime} = time;
- lg sprintf('News Mail with nr. %d successfully send at %s', $obj->{COUNT}, scalar localtime);
+ lg sprintf('Mail %d. send successfully', $obj->{COUNT});
$obj->{NEWSLETTER} = undef;
1;
}
diff --git a/lib/XXV/OUTPUT/NEWS/RSS.pm b/lib/XXV/OUTPUT/NEWS/RSS.pm
index b4d5293..05f2f0d 100644
--- a/lib/XXV/OUTPUT/NEWS/RSS.pm
+++ b/lib/XXV/OUTPUT/NEWS/RSS.pm
@@ -34,20 +34,37 @@ sub module {
check => sub {
my $value = shift;
my $erg = $obj->init
- or return error('Problem to initialize news module')
+ or return undef, gettext("Can't initialize news modul!")
if($value eq 'y' and not exists $obj->{INITE});
+ if($value eq 'y') {
+ my $emodule = main::getModule('EVENTS');
+ if(!$emodule or $emodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS');
+ }
+ my $rmodule = main::getModule('REPORT');
+ if(!$rmodule or $rmodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT');
+ }
+ }
return $value;
},
},
level => {
- description => gettext('Minimum level of messages which can be displayed (1 ... 100)'),
+ description => gettext('Category of messages that should displayed'),
default => 1,
- type => 'integer',
+ type => 'list',
+ choices => sub {
+ my $rmodule = main::getModule('REPORT');
+ return undef unless($rmodule);
+ my $erg = $rmodule->get_level_as_array();
+ map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg;
+ return @$erg;
+ },
required => gettext('This is required!'),
check => sub {
my $value = int(shift) || 0;
unless($value >= 1 and $value <= 100) {
- return undef, 'Sorry, but the value must be between 1 and 100';
+ return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100);
}
return $value;
},
@@ -90,7 +107,7 @@ sub new {
main::after(sub{
# The Initprocess
my $erg = $self->init
- or return error('Problem to initialize news modul!');
+ or return error("Can't initialize news modul!");
}, "NEWS::RSS: Start initiate rss feed ...")
if($self->{active} eq 'y');
@@ -112,7 +129,7 @@ sub init {
sub createRSS {
# ------------------
my $obj = shift || return error('No object defined!');
- my $ver = shift || 1;
+ my $ver = shift || 2;
my $account = sprintf("%s@%s", $ENV{USER}, main::getModule('STATUS')->name);
my $url = sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port});
@@ -120,7 +137,7 @@ sub createRSS {
if($ver == 1) {
$rss = XML::RSS->new(
version => '1.0',
- ) || return error('Problem to create an RSS Object');
+ ) || return error("Can't create rss 1.0 object");
$rss->channel(
@@ -142,24 +159,25 @@ sub createRSS {
} elsif($ver == 2) {
my $lastbuild = (exists $obj->{lastBuildDate} ? $obj->{lastBuildDate} : time);
+ my $lastadd = (exists $obj->{lastAddDate} ? $obj->{lastAddDate} : time);
$rss = XML::RSS->new(
version => '2.0',
- ) || return error('Problem to create an RSS Object');
+ ) || return error("Can't create rss 2.0 object");
$rss->channel(
title => gettext("XXV RSS 2.0"),
'link' => $url,
description => gettext("Important messages from your VDR/XXV"),
language => setlocale(POSIX::LC_MESSAGES),
- pubDate => datum(time, 'rss'),
+ pubDate => datum($lastadd, 'rss'),
lastBuildDate => datum($lastbuild, 'rss'),
managingEditor => $account,
);
}
$obj->{lastBuildDate} = time;
- return $rss;
+ return ($ver, $rss);
}
@@ -169,17 +187,21 @@ sub send {
my $obj = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
- ++$obj->{COUNT};
+ while($obj->{STACK} && scalar @{$obj->{STACK}} > 100) {
+ shift(@{$obj->{STACK}});
+ }
push(@{$obj->{STACK}}, [
+ ++$obj->{COUNT},
entities($vars->{Title}),
entities($vars->{Url}),
entities($vars->{Text}),
datum($vars->{AddDate},'int'),
- $vars->{LevelName},
+ $vars->{category},
]);
+ $obj->{lastAddDate} = time;
- lg sprintf('News RSS with nr. %d successfully send at %s', $obj->{COUNT}, scalar localtime);
+ lg sprintf('Insert rss item (%d)', $obj->{COUNT});
1;
}
@@ -192,14 +214,7 @@ sub read {
return undef, lg('This function is deactivated!')
if($obj->{active} ne 'y');
-
- $vars->{count} = ++$obj->{NEWSCOUNT};
- $vars->{host} = $obj->{host};
- $vars->{port} = main::getModule('HTTPD')->{Port};
-
- $obj->send($vars);
-
- return 1;
+ return $obj->send($vars);
}
# ------------------
@@ -211,20 +226,31 @@ sub req {
return gettext('The module NEWS::RSS is not active!')
if($obj->{active} ne 'y');
- my $rss = $obj->createRSS($params->{version})
- || return error('Problem to create a RSS Object!');
+ my ($ver, $rss) = $obj->createRSS($params->{version});
+ return 0 unless($rss);
foreach my $entry (@{$obj->{STACK}}) {
- my ($title, $link, $descr, $adddate, $level) = @{$entry};
- $rss->add_item(
- title => $title,
- link => $link,
- description => $descr,
- dc => {
- date => $adddate,
- subject => $level
- },
- );
+ my ($item, $title, $link, $descr, $adddate, $category) = @{$entry};
+ if($ver == 1) {
+ $rss->add_item(
+ title => $title,
+ link => $link,
+ description => $descr,
+ dc => {
+ date => $adddate,
+ subject => $category,
+ },
+ );
+ } else {
+ $rss->add_item(
+ title => $title,
+ link => $link,
+ description => $descr,
+ pubDate => $adddate,
+ category => $category,
+ guid => sprintf(gettext('RSS item %d at %s'), $item, $adddate),
+ );
+ }
}
return $rss->as_string;
diff --git a/lib/XXV/OUTPUT/NEWS/VDR.pm b/lib/XXV/OUTPUT/NEWS/VDR.pm
index c0072a9..0578b5a 100644
--- a/lib/XXV/OUTPUT/NEWS/VDR.pm
+++ b/lib/XXV/OUTPUT/NEWS/VDR.pm
@@ -31,20 +31,37 @@ sub module {
check => sub {
my $value = shift;
my $erg = $obj->init
- or return error('Problem to initialize news module')
+ or return undef, gettext("Can't initialize news modul!")
if($value eq 'y' and not exists $obj->{INITE});
+ if($value eq 'y') {
+ my $emodule = main::getModule('EVENTS');
+ if(!$emodule or $emodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'EVENTS');
+ }
+ my $rmodule = main::getModule('REPORT');
+ if(!$rmodule or $rmodule->{active} ne 'y') {
+ return undef, sprintf(gettext("Modul can't activated! This modul depends modul %s."),'REPORT');
+ }
+ }
return $value;
},
},
level => {
- description => gettext('Minimum level of messages which can be displayed (1 ... 100)'),
+ description => gettext('Category of messages that should displayed'),
default => 1,
- type => 'integer',
+ type => 'list',
+ choices => sub {
+ my $rmodule = main::getModule('REPORT');
+ return undef unless($rmodule);
+ my $erg = $rmodule->get_level_as_array();
+ map { my $x = $_->[1]; $_->[1] = $_->[0]; $_->[0] = $x; } @$erg;
+ return @$erg;
+ },
required => gettext('This is required!'),
check => sub {
my $value = int(shift) || 0;
unless($value >= 1 and $value <= 100) {
- return undef, 'Sorry, but the value must be between 1 and 100';
+ return undef, sprintf(gettext('Sorry, but value must be between %d and %d'),1,100);
}
return $value;
},
@@ -87,8 +104,8 @@ sub new {
main::after(sub{
# The Initprocess
my $erg = $self->init
- or return error('Problem to initialize news modul!');
- }, "NEWS::VDR: Start initiate news vdr module ...")
+ or return error("Can't initialize news modul!");
+ }, "NEWS::VDR: Start initiate news modul ...")
if($self->{active} eq 'y');
return $self;
@@ -98,9 +115,8 @@ sub new {
sub init {
# ------------------
my $obj = shift || return error('No object defined!');
- my $url = sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port});
- $obj->{INITE} = 1;
+ $obj->{INITE} = 1;
$obj->{SVDRP} = main::getModule('SVDRP');
1;
@@ -112,19 +128,17 @@ sub send {
my $obj = shift || return error('No object defined!');
my $vars = shift || return error('No data defined!');
- return undef, lg('This function is deactivated!')
+ return lg('This function is deactivated!')
if($obj->{active} ne 'y');
- return undef, lg('Title is not set!')
+ return lg('Title is not set!')
unless($vars->{Title});
my $cmd = sprintf('MESG %s', $vars->{Title});
my $svdrp = $obj->{SVDRP} || return error ('No SVDRP!' );
- $svdrp->command($cmd);
-
- 1;
+ return $svdrp->command($cmd);
}
# ------------------
@@ -134,8 +148,6 @@ sub read {
my $vars = shift || return error('No data defined!');
return $obj->send($vars);
-
- 1;
}
# ------------------
@@ -149,17 +161,18 @@ sub req {
my $vars = {
AddDate => time,
- Title => 'This is only a Test for the xxv news vdr module!',
- Text => 'This is only a Test for the xxv news vdr module!',
+ Title => 'This is only a test from xxv news vdr modul!',
+ Text => 'This is only a test from xxv news vdr modul!',
Cmd => 'request',
Id => 'vdr',
- Url => sprintf("http://%s:%s/", $obj->{host}, main::getModule('HTTPD')->{Port}),
Level => 'harmless',
};
- $obj->read($vars);
-
- return gettext('A message has been sent to your VDR!');
+ if( $obj->read($vars) ) {
+ return gettext("Message was been sent to your VDR!");
+ } else {
+ return gettext("Message chould'nt been sent to your VDR!");
+ }
}