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::Logind; use App::XScreenSaver::DBus::Saver; # 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 logind => ( is => 'lazy', builder => sub { App::XScreenSaver::DBus::Logind->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 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->logind->start(); $self->saver->start(); $self->reactor->run; } 1;