App-XScreenSaver-DBus
view release on metacpan or search on metacpan
lib/App/XScreenSaver/DBus/Saver.pm view on Meta::CPAN
package App::XScreenSaver::DBus::Saver;
use v5.20;
use Moo;
use experimental qw(signatures postderef);
use curry;
use Log::Any;
use Try::Tiny;
use IPC::Run;
use App::XScreenSaver::DBus::SaverProxy;
our $VERSION = '1.0.6'; # VERSION
# ABSTRACT: implements the "idle inhibition" protocol
has reactor => ( is => 'ro', required => 1 );
has bus => ( is => 'lazy', builder => sub { Net::DBus->session() } );
has dbus_srv => (
is => 'lazy',
builder => sub { shift->bus->get_service('org.freedesktop.DBus') },
);
has dbus_obj => (
is => 'lazy',
builder => sub { shift->dbus_srv->get_object('/org/freedesktop/DBus') },
);
has service => (
is => 'lazy',
builder => sub {
# this is the service name
shift->bus->export_service('org.freedesktop.ScreenSaver');
},
);
has paths => (
is => 'ro',
default => sub { [qw(/ScreenSaver /org/freedesktop/ScreenSaver)] },
);
has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } );
has _proxies => ( is => 'rw' );
has _prod_id => ( is => 'rw' );
has _inhibits => ( is => 'rw', default => sub { +{} } );
sub start($self) {
# export to dbus
$self->_proxies([ map {
App::XScreenSaver::DBus::SaverProxy->new(
$self->service,
$_,
$self,
)
} $self->paths->@* ]);
$self->_prod_id(
$self->reactor->add_timeout(
60_000,
Net::DBus::Callback->new(
( run in 2.365 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )