The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
sub init {
my $self = shift;
$self->SUPER::init(@_);
my $class = 'Plagger::Plugin::Notify::Eject::' . lc($^O);
eval "require $class;";
if ($@) {
Plagger->context->error("Eject plugin doesn't run on your platform $^O");
}
bless $self, $class;
}
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'publish.feed' => \&update,
'publish.finalize' => \&finalize,
);
$self->{count} = 0;
}
sub update {
my($self, $context, $args) = @_;
$self->{count}++ if $args->{feed}->count;
}
sub finalize {
my($self, $context, $args) = @_;
$self->eject if $self->{count};
}
sub eject { $_[1]->log(warn => 'Subclass should override this') }
1;
__END__
=head1 NAME
Plagger::Plugin::Notify::Eject - Notify feed updates to CD Drive
=head1 SYNOPSIS
- module: Notify::Eject
=head1 DESCRIPTION
This class ejects the CD each time a notification is triggered.
This class relies on helper classes for the functionality for the
particular operating system you are working on. Provided in the
main Plagger distribution are helper classes for Linux, FreeBSD,
Microsoft Windows (MSWin32) and Mac OS X (Darwin.)
=head2 Writing helper classes
This module relies on a helper class existing that is named after
the architecture name returned in C<$^O>.
Each module must simply subclass this module and implement the
C<eject> method. For example, for the hypothetical HAL2000 system:
package Plagger::Plugin::Notify::Eject::hal2000;
use base qw( Plagger::Plugin::Notify::Eject );
sub eject {
system("eject_the_cd_bay_doors_hal");
}
1;
=head1 AUTHOR
Kazuhiro Osawa
=head1 SEE ALSO
L<Plagger>, L<Plagger::Plugin::Notify::Eject::linux>, L<Plagger::Plugin::Notify::Eject::freebsd>,
L<Plagger::Plugin::Notify::Eject::mswin32>, L<Plagger::Plugin::Notify::Eject::darwin>
=cut