# Notify about the end of slicing. # The notifications are sent out using the Growl protocol if installed, and using DBus XWindow protocol. package Slic3r::GUI::Notifier; use Moo; has 'growler' => (is => 'rw'); my $icon = $Slic3r::var->("Slic3r.png"); sub BUILD { my ($self) = @_; if (eval 'use Growl::GNTP; 1') { # register with growl eval { $self->growler(Growl::GNTP->new(AppName => 'Slic3r', AppIcon => $icon)); $self->growler->register([{Name => 'SKEIN_DONE', DisplayName => 'Slicing Done'}]); }; # if register() fails (for example because of a timeout), disable growler at all $self->growler(undef) if $@; } } sub notify { my ($self, $message) = @_; my $title = 'Slicing Done!'; eval { $self->growler->notify(Event => 'SKEIN_DONE', Title => $title, Message => $message) if $self->growler; }; # Net::DBus is broken in multithreaded environment if (0 && eval 'use Net::DBus; 1') { eval { my $session = Net::DBus->session; my $serv = $session->get_service('org.freedesktop.Notifications'); my $notifier = $serv->get_object('/org/freedesktop/Notifications', 'org.freedesktop.Notifications'); $notifier->Notify('Slic3r', 0, $icon, $title, $message, [], {}, -1); undef $Net::DBus::bus_session; }; } } 1;