BEGIN {
my
%both
= (
activeTorrentCount
=> number,
downloadSpeed
=> number,
pausedTorrentCount
=> number,
torrentCount
=> number,
uploadSpeed
=> number,
);
for
my
$camel
(
keys
%both
) {
(
my
$name
=
$camel
) =~ s/([A-Z]+)/{
"_"
.
lc
($1) }/ge;
__PACKAGE__->meta->add_attribute(
$name
=> (
is
=>
'ro'
,
isa
=>
$both
{
$camel
},
coerce
=> 1,
writer
=>
"_set_$name"
,
clearer
=>
"clear_$name"
,
lazy
=> 1,
default
=>
sub
{
my
$self
=
shift
;
my
$val
=
delete
$self
->_tmp_store->{
$name
};
if
(
defined
$val
) {
return
$val
;
}
else
{
$self
->_clear_tmp_store;
return
delete
$self
->_tmp_store->{
$name
};
}
},
));
}
__PACKAGE__->meta->add_attribute(
_tmp_store
=> (
is
=>
'ro'
,
isa
=>
'HashRef'
,
lazy
=> 1,
builder
=>
'read_all'
,
clearer
=>
'_clear_tmp_store'
,
));
__PACKAGE__->meta->add_method(
read_all
=>
sub
{
my
$self
=
shift
;
my
$lazy
=
$self
->lazy_write;
my
(
%res
,
$rpc
);
$rpc
=
$self
->client->rpc(
'session-stats'
) or
return
;
$self
->lazy_write(1);
for
my
$camel
(
keys
%both
) {
my
$name
= __PACKAGE__->_camel2Normal(
$camel
);
my
$writer
=
"_set_$name"
;
$res
{
$name
} =
$rpc
->{
$camel
};
$self
->
$writer
(
$rpc
->{
$camel
});
}
$self
->lazy_write(
$lazy
);
return
\
%res
;
});
}
1;