our
$VERSION
=
'0.1'
;
sub
init {
my
$self
=
shift
;
$self
->{config}{applets} = pd_read(
$self
->{config}{applet_file});
foreach
my
$event
(
keys
%{
$self
->{config}{applets}}) {
foreach
my
$applet
(
keys
%{
$self
->{config}{applets}{
$event
}}) {
$self
->{applets}{
$event
}{
$applet
} = {
'condition'
=>
sub
{
eval
(
$self
->{config}{applets}{
$event
}{
$applet
}{condition})},
'action'
=>
sub
{
eval
(
$self
->{config}{applets}{
$event
}{
$applet
}{action})},
};
}
$self
->register_event(
$event
);
}
}
sub
event {
my
$self
=
shift
;
my
$event
=
shift
;
map
{
if
(
$_
->{condition}->(
@_
)) {
$_
->{action}->(
$self
,
@_
); } }
values
%{
$self
->{applets}{
$event
}};
}
sub
list {
my
$self
=
shift
;
my
$mode
=
defined
wantarray
?
'message'
:
''
;
$self
->parent->
print
(
"The following applets are currently running: "
,
$mode
);
map
{
$self
->parent->
print
(
"$_\n"
,
$mode
)}
map
{
"event "
.
$_
.
":\n"
.
join
(
"\n"
,
keys
%{
$self
->{applets}{
$_
}}) }
keys
%{
$self
->{applets}};
if
(
defined
wantarray
) {
return
[
keys
%{
$self
->{applets}}];
}
}
sub
add_applet {
my
$self
=
shift
;
my
(
$name
,
$event
,
$condition
,
$action
) =
@_
;
$self
->{config}{applets}{
$event
}{
$name
} = {
'condition'
=>
$condition
,
'action'
=>
$action
};
$self
->{applets}{
$event
}{
$name
} = {
'condition'
=>
sub
{
eval
(
$condition
)},
'action'
=>
sub
{
eval
(
$action
)} };
unless
(
grep
{/^
$event
$/}
$self
->registered_events) {
$self
->register_event(
$event
); }
}
sub
delete_applet {
my
$self
=
shift
;
my
$name
=
shift
;
for
(
grep
{
grep
{/^
$_
$/}
keys
%{
$self
->{applets}{
$_
}} }
keys
%{
$self
->{applets}}) {
delete
$self
->{applets}{
$_
}{
$name
};
delete
$self
->{config}{applets}{
$_
}{
$name
};
}
}
sub
round_up {
my
$self
=
shift
;
if
(
$self
->parent->{shell}{round_up}) {
pd_write(
$self
->{config}{applet_file},
$self
->{config}{applets}) ||
print
"file write failed\n"
;
}
}
1;