package App::XScreenSaver::DBus; use v5.20; use Moo; use experimental qw(signatures postderef); use Net::DBus::Reactor; use Log::Any; use App::XScreenSaver::DBus::InhibitSleep; use App::XScreenSaver::DBus::Saver; use App::XScreenSaver::DBus::Lock; # VERSION # ABSTRACT: main application class =head1 SYNOPSIS use App::XScreenSaver::DBus; App::XScreenSaver::DBus->new->run; =attr C the event loop =cut has reactor => ( is => 'lazy', builder => sub { Net::DBus::Reactor->main() }, ); =attr C instance of L<< C >>. =cut has inhibit_sleep => ( is => 'lazy', builder => sub { App::XScreenSaver::DBus::InhibitSleep->new() }, ); =attr C instance of L<< C >>. =cut has saver => ( is => 'lazy', builder => sub($self) { App::XScreenSaver::DBus::Saver->new(reactor => $self->reactor); }, ); =attr C instance of L<< C >>. =cut has lock => ( is => 'lazy', builder => sub { App::XScreenSaver::DBus::Lock->new() }, ); =attr C a logger =cut has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); =method C registers the DBus services and runs the event loop; this method does not return =cut sub run($self) { $self->inhibit_sleep->start(); $self->saver->start(); $self->lock->start(); $self->reactor->run; } 1;