package App::XScreenSaver::DBus; use Moo; use experimental 'signatures'; use Net::DBus::Reactor; use App::XScreenSaver::DBus::InhibitSleep; use App::XScreenSaver::DBus::Saver; has reactor => ( is => 'lazy', builder => sub { Net::DBus::Reactor->main() }, ); has inhibit_sleep => ( is => 'lazy', builder => sub { App::XScreenSaver::DBus::InhibitSleep->new() }, ); has saver => ( is => 'lazy', builder => sub($self) { App::XScreenSaver::DBus::Saver->new(reactor => $self->reactor); }, ); has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); sub run($self) { $self->inhibit_sleep->start(); $self->saver->start(); $self->reactor->run; } 1;