diff --git a/crier/crier.fnl b/crier/crier.fnl index bfe2f45..ab9e22f 100644 --- a/crier/crier.fnl +++ b/crier/crier.fnl @@ -101,11 +101,14 @@ (fn delete-notification [id] (let [widget (. notifications id)] - (tset notifications id nil) - (window.box:remove widget.widget) - (update-window) - false - )) + (if widget + (do + (tset notifications id nil) + (window.box:remove widget.widget) + (update-window) + true) + (values nil "no notification with that id")))) + (fn update-notification-widget [widget noti] (doto widget @@ -126,7 +129,6 @@ (let [summary (Gtk.Label { :name "summary" }) body (Gtk.Label) icon (Gtk.Image) - cancel-me (fn [] (delete-notification id)) event-box (Gtk.EventBox { :on_button_press_event #(emit-action id "default") }) @@ -185,7 +187,7 @@ timeout (timeout-ms noti)] (when timeout (lgi.GLib.timeout_add - lgi.GLib.PRIORITY_DEFAULT timeout #(delete-notification id))) + lgi.GLib.PRIORITY_DEFAULT timeout #(do (delete-notification id) nil))) (update-notification-widget widget noti) (tset notifications id widget) @@ -220,6 +222,9 @@ "GetCapabilities" #["actions" "body" "persistence"] "GetServerInformation" #(values "crier" "telent" "0.1" "1.2") "Notify" #(add-notification (make-notification $...)) + "CloseNotification" (fn [id] + (let [(won err) (delete-notification id)] + (if won (values) (error err)))) }) (fn args-signature [args] @@ -229,14 +234,18 @@ sig) (fn handle-dbus-method-call [conn sender path interface method params invocation] - (print interface) (when (and (= path dbus-service-attrs.path) (= interface dbus-service-attrs.interface)) (let [p (dbus.variant.strip params) info (interface-info:lookup_method method) - ret (table.pack ((. dbus-methods method) (table.unpack p))) sig (args-signature info.out_args)] - (invocation:return_value (GV (.. "(" sig ")") ret))))) + (match (table.pack (pcall (. dbus-methods method) (table.unpack p))) + [true & vals] + (invocation:return_value (GV (.. "(" sig ")") vals)) + _ + (invocation:return_value nil))))) + + (fn handle-dbus-get [conn sender path interface name] (when (and (= path dbus-service-attrs.path)