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 )