Fixed windows notification toast integration to be more compliant. Still requires an external program, but one that can be easily downloaded from a reliable source, and be used as standard. Also added a build script for windows, to create a standalone exe.

This commit is contained in:
Matthew Connelly 2015-09-06 01:46:08 +01:00
parent 1a119af804
commit 5ff9ae489c
3 changed files with 30 additions and 1 deletions

BIN
.gitignore vendored Normal file

Binary file not shown.

View File

@ -22,6 +22,8 @@ for ($^O) {
#Speech::Synthesis is a great wrapper for Win32::SAPI5 and should work for Festival
#It unfortunately doesn't work -at all- on modern OSX due to API changes/Carbon deprecation
require Speech::Synthesis unless /darwin/;
#Win32::API needed here for moderately pleasant use of SnoreNotify
require Win32::API if /MSWin32/;
}
my $ME = __PACKAGE__;
@ -68,7 +70,7 @@ sub banner {
#There might be something in Win32::OLE I can use for toast notifications.
#Mac::Carbon probably provides something too, but it's too old to use on modern OSX.
my ($title,$text) = @_;
system($Conf->{general}->{'notify'}->{toast_exe}." \"$title\" \"$text\" \"\"") if $^O eq 'MSWin32';
system($Conf->{general}->{'notify'}->{toast_exe}." -appID MaffC.App-AyudanteLobo -silent -t \"$title\" -m \"$text\"") if $^O eq 'MSWin32';
system("/usr/bin/osascript -e 'display notification \"$text\" with title \"$title\"' &") if $^O eq 'darwin';
#TODO some form of notification banner on *nix
}
@ -131,6 +133,17 @@ sub init {
#indicate we should start
logger(1,"Starting $ME..");
$running = 1;
#set up AppUserModelID for windows' toast notifications
if (defined $Conf->{general}->{'notify'}->{'banner'} and $Conf->{general}->{'notify'}->{'banner'} and length $Conf->{general}->{'notify'}->{toast_exe}) {
my $SetProcessAppID = Win32::API::More->new('shell32', 'SetCurrentProcessExplicitAppUserModelID', 'N', 'n');
logger(9,"Error while loading Shell32:SetCurrentProcessExplicitAppUserModelID via Win32::API: $^E") unless $SetProcessAppID;
#$SetProcessAppID->UseMI64(1); #Commented out because perl complains that no such subroutine exists
my $ret = $SetProcessAppID->Call(unpack('J',pack('p',"MaffC.App-AyudanteLobo")));
logger(9,"Error while calling Shell32:SetCurrentProcessExplicitAppUserModelID: $^E") unless $ret == 0;
#Windows requires a shortcut exist in order for notifications from an AppID to actually succeed, so we create one where the user won't see it.
#This is done upon startup, with no care for if a shortcut already exists. It'll either fail to create, which is fine, or overwrite, which is also fine.
system($Conf->{general}->{'notify'}->{toast_exe}." -install \"Maintenance\\ayudante-lobo-notifier-shim\" $^X MaffC.App-AyudanteLobo");
}
#set up signal handlers so we can handle SIGHUPs and handle quitting gracefully.
$SIG{$_} = \&sigtrap for qw/HUP INT QUIT TERM/;
#then we initialise monitors

16
winbuild.bat Normal file
View File

@ -0,0 +1,16 @@
pp -B -c -S -z 9 ^
-cd ayudante-lobo.pp-deps ^
-o ayudante-lobo.exe ^
-M Cwd ^
-M Date::Format ^
-M Net::SSH2 ^
-M POE::Component::DirWatch::WithCaller ^
-M POSIX ^
-M Speech::Synthesis ^
-M Try::Tiny ^
-M Unix::PID ^
-M Win32::API ^
-M Win32::Clipboard ^
-M Win32::SAPI5 ^
-M YAML ^
ayudante-lobo