Chandra
view release on metacpan or search on metacpan
lib/Chandra/Notify.pm view on Meta::CPAN
package Chandra::Notify;
use strict;
use warnings;
# Load XS functions from Chandra bootstrap
use Chandra ();
our $VERSION = '0.25';
=head1 NAME
Chandra::Notify - Native OS desktop notifications
=head1 SYNOPSIS
use Chandra::Notify;
# Simple notification
Chandra::Notify->send(
title => 'Download Complete',
body => 'report.pdf has finished downloading',
);
# With options
Chandra::Notify->send(
title => 'New Message',
body => 'Alice: Hey, are you there?',
icon => '/path/to/icon.png',
sound => 1,
timeout => 5000,
);
# Check if supported
if (Chandra::Notify->is_supported) {
Chandra::Notify->send(title => 'Hello', body => 'World');
}
=head1 DESCRIPTION
Chandra::Notify provides native desktop notifications across platforms:
=over 4
=item * macOS: Uses UNUserNotificationCenter (10.15+) or NSUserNotification
=item * Linux: Uses libnotify if available, falls back to notify-send
=item * Windows: Uses toast notifications (MessageBox as fallback)
=back
=head1 METHODS
=head2 send(%args)
Send a notification. Returns true on success.
Arguments:
=over 4
=item title - Notification title (required)
=item body - Notification body text
=item icon - Path to icon file
=item sound - Play default notification sound (1 = yes)
=item timeout - Auto-dismiss timeout in milliseconds (Linux/Windows)
=back
=head2 is_supported()
Returns true if notifications are supported on this platform.
=cut
# XS functions: is_supported(), _xs_send()
# These are loaded automatically via Chandra bootstrap
sub is_supported {
return _xs_is_supported();
}
sub send {
my $class = shift;
my %args = @_ == 1 && ref $_[0] eq 'HASH' ? %{$_[0]} : @_;
# Validate title
unless (defined $args{title} && length $args{title}) {
warn "Chandra::Notify: title is required";
return 0;
}
return _xs_send(\%args);
}
# Convenience method for OO interface
sub new {
my $class = shift;
my %defaults = @_;
return bless \%defaults, $class;
}
sub notify {
my $self = shift;
my %args = @_ == 1 && ref $_[0] eq 'HASH' ? %{$_[0]} : @_;
# Merge with defaults
%args = (%$self, %args);
return Chandra::Notify->send(%args);
}
1;
__END__
=head1 EXAMPLES
use Chandra::App;
my $app = Chandra::App->new(title => 'My App');
# Via app integration
$app->notify(
title => 'Task Complete',
body => 'Build finished successfully',
);
=head1 PLATFORM NOTES
=head2 macOS
Requires macOS 10.8+ for NSUserNotification, 10.15+ for UNUserNotificationCenter.
The app must be properly signed to display notifications in some cases.
=head2 Linux
Requires a notification daemon (most desktop environments have one).
libnotify.so.4 is preferred; falls back to notify-send CLI.
=head2 Windows
Currently uses MessageBox as a fallback. Full toast notification support
is planned for a future release.
=head1 SEE ALSO
L<Chandra>, L<Chandra::App>
=cut
( run in 0.694 second using v1.01-cache-2.11-cpan-df04353d9ac )