\ Linux specific notification stuff
\ Copyright (C) 2016 Bernd Paysan
\ This program is free software: you can redistribute it and/or modify
\ it under the terms of the GNU Affero General Public License as published by
\ the Free Software Foundation, either version 3 of the License, or
\ (at your option) any later version.
\ This program is distributed in the hope that it will be useful,
\ but WITHOUT ANY WARRANTY; without even the implied warranty of
\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\ GNU Affero General Public License for more details.
\ You should have received a copy of the GNU Affero General Public License
\ along with this program. If not, see .
: escape-<&> ( addr u -- )
bounds ?DO case i c@
'<' of ." <" endof
'>' of ." >" endof
'&' of ." &" endof
emit 0 endcase LOOP ;
: build-notification ( -- ) ;
: notify@ ( -- addr u )
config:notify-text# @ IF
notify-otr? @ config:notify-text# @ 0> and IF
"[otr] message"
ELSE notify$ $@ ['] escape-<&> $tmp THEN
ELSE "encrypted message" THEN ;
Variable notify-send
Variable upath
: !upath ( -- )
"PATH" getenv upath $!
upath $@ bounds ?DO I c@ ':' = IF 0 I c! THEN LOOP
"notify-send" upath open-path-file 0= IF
rot close-file throw
over c@ '/' <> IF
pad $1000 get-dir notify-send $! '/' notify-send c$+!
THEN
notify-send $+!
THEN
upath $off ;
Variable net2o-logo
: !net2o-logo ( -- )
s" ../doc/net2o-logo.png" open-fpath-file 0= IF
rot close-file throw
over c@ '/' <> IF
pad $1000 get-dir net2o-logo $! '/' net2o-logo c$+!
THEN
net2o-logo $+!
THEN ;
!upath !net2o-logo
: 0string ( addr u -- cstr )
over 0= IF 2drop s" " THEN
1+ save-mem over + 1- 0 swap c! ;
0 Value content-string
0 Value title-string
10 cells buffer: notify-args
: !notify-args ( -- )
here >r notify-args dp !
"notify-send\0" drop ,
"-a\0" drop ,
"net2o\0" drop ,
"-c\0" drop ,
"im.received\0" drop ,
net2o-logo $@len IF
"-i\0" drop ,
net2o-logo $@ 0string ,
THEN
here to title-string 0 ,
here to content-string 0 ,
0 , \ must be terminated by null pointer
r> dp ! ;
!notify-args
:noname defers 'cold
notify-send off upath off net2o-logo off
!upath !net2o-logo !notify-args ; is 'cold
: linux-notification ( -- ) notify-send $@len 0= ?EXIT
title-string 0 ?free content-string 0 ?free
['] notify-title $tmp dup 0= IF 2drop EXIT THEN
notify@ dup 0= IF 2drop 2drop EXIT THEN
0string content-string !
0string title-string !
notify-send $@ notify-args fork+exec ;