From 67d30e007b8f2b2ee10529bc76460adcdf7e6c10 Mon Sep 17 00:00:00 2001 From: dakkar Date: Thu, 6 May 2021 15:08:15 +0100 Subject: compact the code --- lib/App/XScreenSaver/DBus.pm | 25 ++--- lib/App/XScreenSaver/DBus/InhibitSleep.pm | 123 ------------------------ lib/App/XScreenSaver/DBus/Lock.pm | 111 ---------------------- lib/App/XScreenSaver/DBus/Logind.pm | 153 ++++++++++++++++++++++++++++++ 4 files changed, 159 insertions(+), 253 deletions(-) delete mode 100644 lib/App/XScreenSaver/DBus/InhibitSleep.pm delete mode 100644 lib/App/XScreenSaver/DBus/Lock.pm create mode 100644 lib/App/XScreenSaver/DBus/Logind.pm (limited to 'lib/App') diff --git a/lib/App/XScreenSaver/DBus.pm b/lib/App/XScreenSaver/DBus.pm index db9355f..60b12db 100644 --- a/lib/App/XScreenSaver/DBus.pm +++ b/lib/App/XScreenSaver/DBus.pm @@ -4,9 +4,8 @@ use Moo; use experimental qw(signatures postderef); use Net::DBus::Reactor; use Log::Any; -use App::XScreenSaver::DBus::InhibitSleep; +use App::XScreenSaver::DBus::Logind; use App::XScreenSaver::DBus::Saver; -use App::XScreenSaver::DBus::Lock; # VERSION # ABSTRACT: main application class @@ -26,15 +25,15 @@ has reactor => ( builder => sub { Net::DBus::Reactor->main() }, ); -=attr C +=attr C -instance of L<< C >>. +instance of L<< C >>. =cut -has inhibit_sleep => ( +has logind => ( is => 'lazy', - builder => sub { App::XScreenSaver::DBus::InhibitSleep->new() }, + builder => sub { App::XScreenSaver::DBus::Logind->new() }, ); =attr C @@ -50,17 +49,6 @@ has saver => ( }, ); -=attr C - -instance of L<< C >>. - -=cut - -has lock => ( - is => 'lazy', - builder => sub { App::XScreenSaver::DBus::Lock->new() }, -); - =attr C a logger @@ -77,9 +65,8 @@ not return =cut sub run($self) { - $self->inhibit_sleep->start(); + $self->logind->start(); $self->saver->start(); - $self->lock->start(); $self->reactor->run; } diff --git a/lib/App/XScreenSaver/DBus/InhibitSleep.pm b/lib/App/XScreenSaver/DBus/InhibitSleep.pm deleted file mode 100644 index 226facf..0000000 --- a/lib/App/XScreenSaver/DBus/InhibitSleep.pm +++ /dev/null @@ -1,123 +0,0 @@ -package App::XScreenSaver::DBus::InhibitSleep; -use v5.20; -use Moo; -use experimental qw(signatures postderef); -use curry; -use Net::DBus; -use IPC::Run; -use Log::Any; -# VERSION -# ABSTRACT: implements the logind "inhibitor locks" protocol - -=head1 SYNOPSIS - - use Net::DBus::Reactor; - use App::XScreenSaver::DBus::InhibitSleep; - my $is = App::XScreenSaver::DBus::InhibitSleep->new; - $is->start; - - Net::DBus::Reactor->new->run; - -=attr C - -the DBus system bus - -=cut - -has bus => ( is => 'lazy', builder => sub { Net::DBus->system() } ); - -=attr C - -the (e)logind DBus service - -=cut - -has logind_srv => ( - is => 'lazy', - builder => sub { shift->bus->get_service('org.freedesktop.login1') }, -); - -=attr C - -the (e)logind DBus object - -=cut - -has logind_obj => ( - is => 'lazy', - builder => sub { shift->logind_srv->get_object('/org/freedesktop/login1') }, -); - -=attr C - -the file descriptor that logind gives us when we ask for a lock; we -close it to release the lock - -=cut - -has inhibit_fd => ( is => 'rwp' ); - -=attr C - -a logger - -=cut - -has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); - -=method C - -starts listening to the C signal from (e)logind, and -takes the lock - -=cut - -sub start($self) { - $self->logind_obj->connect_to_signal( - 'PrepareForSleep', - $self->curry::weak::_going_to_sleep, - ); - $self->_inhibit(); - return; -} - -sub _inhibit($self) { - return if $self->inhibit_fd; - $self->_set_inhibit_fd( - $self->logind_obj->Inhibit( - 'sleep', - 'xscreensaver','locking before sleep', - 'delay', - ) - ); - $self->log->debugf('got logind inhibit fd %d',$self->inhibit_fd); - return; -} - -sub _going_to_sleep($self,$before) { - if ($before) { - $self->log->debug('locking'); - $self->_xscreensaver_command('-suspend'); - $self->log->debug('locked'); - $self->_set_inhibit_fd(undef); - } - else { - $self->log->debug('woken up'); - $self->_xscreensaver_command('-deactivate'); - $self->_inhibit(); - } - return; -} - -sub _xscreensaver_command($self,$command) { - my ($out, $err); - IPC::Run::run( - ['xscreensaver-command',$command], - \undef, \$out, \$err, - ); - $self->log->tracef('xscreensaver-command %s said <%s>',$command,$out); - $self->log->warnf('xscreensaver-command %s errored <%s>',$command,$err) - if $err; -} - -1; diff --git a/lib/App/XScreenSaver/DBus/Lock.pm b/lib/App/XScreenSaver/DBus/Lock.pm deleted file mode 100644 index 22410f2..0000000 --- a/lib/App/XScreenSaver/DBus/Lock.pm +++ /dev/null @@ -1,111 +0,0 @@ -package App::XScreenSaver::DBus::Lock; -use v5.20; -use Moo; -use experimental qw(signatures postderef); -use curry; -use Net::DBus; -use IPC::Run; -use Log::Any; -# VERSION -# ABSTRACT: implements the logind "session lock" protocol - -=head1 SYNOPSIS - - use Net::DBus::Reactor; - use App::XScreenSaver::DBus::Lock; - my $is = App::XScreenSaver::DBus::Lock->new; - $is->start; - - Net::DBus::Reactor->new->run; - -=attr C - -the DBus system bus - -=cut - -has bus => ( is => 'lazy', builder => sub { Net::DBus->system() } ); - -=attr C - -the (e)logind DBus service - -=cut - -has logind_srv => ( - is => 'lazy', - builder => sub { shift->bus->get_service('org.freedesktop.login1') }, -); - -=attr C - -the (e)logind DBus object - -=cut - -has logind_obj => ( - is => 'lazy', - builder => sub { shift->logind_srv->get_object('/org/freedesktop/login1') }, -); - -=attr C - -the (e)logind session DBus object - -=cut - -has session_obj => ( - is => 'lazy', - builder => sub($self) { - my $session_path = $self->logind_obj->GetSessionByPID($$); - return $self->logind_srv->get_object($session_path); - }, -); - -=attr C - -a logger - -=cut - -has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); - -=method C - -starts listening to the C and C signals from the -session, and activates the screen saver - -=cut - -sub start($self) { - $self->session_obj->connect_to_signal( - 'Lock', - $self->curry::weak::_lock, - ); - $self->session_obj->connect_to_signal( - 'Unlock', - $self->curry::weak::_unlock, - ); - return; -} - -sub _lock($self) { - $self->_xscreensaver_command('-lock'); -} - -sub _unlock($self) { - $self->_xscreensaver_command('-deactivate'); -} - -sub _xscreensaver_command($self,$command) { - my ($out, $err); - IPC::Run::run( - ['xscreensaver-command',$command], - \undef, \$out, \$err, - ); - $self->log->tracef('xscreensaver-command %s said <%s>',$command,$out); - $self->log->warnf('xscreensaver-command %s errored <%s>',$command,$err) - if $err; -} - -1; diff --git a/lib/App/XScreenSaver/DBus/Logind.pm b/lib/App/XScreenSaver/DBus/Logind.pm new file mode 100644 index 0000000..b8abad3 --- /dev/null +++ b/lib/App/XScreenSaver/DBus/Logind.pm @@ -0,0 +1,153 @@ +package App::XScreenSaver::DBus::Logind; +use v5.20; +use Moo; +use experimental qw(signatures postderef); +use curry; +use Net::DBus; +use IPC::Run; +use Log::Any; +# VERSION +# ABSTRACT: implements the logind "inhibitor locks" and "session lock" protocols + +=head1 SYNOPSIS + + use Net::DBus::Reactor; + use App::XScreenSaver::DBus::Logind; + my $is = App::XScreenSaver::DBus::Logind->new; + $is->start; + + Net::DBus::Reactor->new->run; + +=attr C + +the DBus system bus + +=cut + +has bus => ( is => 'lazy', builder => sub { Net::DBus->system() } ); + +=attr C + +the (e)logind DBus service + +=cut + +has logind_srv => ( + is => 'lazy', + builder => sub { shift->bus->get_service('org.freedesktop.login1') }, +); + +=attr C + +the (e)logind DBus object + +=cut + +has logind_obj => ( + is => 'lazy', + builder => sub { shift->logind_srv->get_object('/org/freedesktop/login1') }, +); + +=attr C + +the (e)logind session DBus object + +=cut + +has session_obj => ( + is => 'lazy', + builder => sub($self) { + my $session_path = $self->logind_obj->GetSessionByPID($$); + return $self->logind_srv->get_object($session_path); + }, +); + +=attr C + +the file descriptor that logind gives us when we ask for a lock; we +close it to release the lock + +=cut + +has inhibit_fd => ( is => 'rwp' ); + +=attr C + +a logger + +=cut + +has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); + +=method C + +starts listening to the C signal from (e)logind, and +takes the lock + +=cut + +sub start($self) { + $self->logind_obj->connect_to_signal( + 'PrepareForSleep', + $self->curry::weak::_going_to_sleep, + ); + $self->session_obj->connect_to_signal( + 'Lock', + $self->curry::weak::_lock, + ); + $self->session_obj->connect_to_signal( + 'Unlock', + $self->curry::weak::_unlock, + ); + $self->_inhibit(); + return; +} + +sub _inhibit($self) { + return if $self->inhibit_fd; + $self->_set_inhibit_fd( + $self->logind_obj->Inhibit( + 'sleep', + 'xscreensaver','locking before sleep', + 'delay', + ) + ); + $self->log->debugf('got logind inhibit fd %d',$self->inhibit_fd); + return; +} + +sub _going_to_sleep($self,$before) { + if ($before) { + $self->log->debug('locking'); + $self->_xscreensaver_command('-suspend'); + $self->log->debug('locked'); + $self->_set_inhibit_fd(undef); + } + else { + $self->log->debug('woken up'); + $self->_xscreensaver_command('-deactivate'); + $self->_inhibit(); + } + return; +} + +sub _lock($self) { + $self->_xscreensaver_command('-lock'); +} + +sub _unlock($self) { + $self->_xscreensaver_command('-deactivate'); +} + +sub _xscreensaver_command($self,$command) { + my ($out, $err); + IPC::Run::run( + ['xscreensaver-command',$command], + \undef, \$out, \$err, + ); + $self->log->tracef('xscreensaver-command %s said <%s>',$command,$out); + $self->log->warnf('xscreensaver-command %s errored <%s>',$command,$err) + if $err; +} + +1; -- cgit v1.2.3