From 3ee3715ae7777dd6c1804974e2e293406fd1fe54 Mon Sep 17 00:00:00 2001
From: Andinus <andinus@nand.sh>
Date: Wed, 25 Mar 2020 00:13:51 +0530
Subject: Add apod support & fix errors

---
 notification/notif.go         |  8 ++++++++
 notification/notify_darwin.go | 25 +++++++++++++++++++++++++
 notification/notify_unix.go   | 21 +++++++++++++++++++++
 3 files changed, 54 insertions(+)
 create mode 100644 notification/notif.go
 create mode 100644 notification/notify_darwin.go
 create mode 100644 notification/notify_unix.go

(limited to 'notification')

diff --git a/notification/notif.go b/notification/notif.go
new file mode 100644
index 0000000..b436c19
--- /dev/null
+++ b/notification/notif.go
@@ -0,0 +1,8 @@
+package notification
+
+// Notif struct holds information about the notification. Other
+// parameters like urgency & timeout could be added when required.
+type Notif struct {
+	Title   string
+	Message string
+}
diff --git a/notification/notify_darwin.go b/notification/notify_darwin.go
new file mode 100644
index 0000000..bddaf9e
--- /dev/null
+++ b/notification/notify_darwin.go
@@ -0,0 +1,25 @@
+// +build darwin
+
+package notification
+
+import (
+	"fmt"
+	"os/exec"
+	"strconv"
+)
+
+// Notify sends a desktop notification to the user using osascript. It
+// handles information in the form of Notif struct. It returns an
+// error (if exists).
+func (n Notif) Notify() error {
+	// This script cuts out parts of notification, this bug was
+	// confirmed on macOS Catalina 10.15.3, fix not yet known.
+	err := exec.Command("osascript", "-e",
+		`display notification `+strconv.Quote(n.Message)+` with title `+strconv.Quote(n.Title)).Run()
+	if err != nil {
+		err = fmt.Errorf("%s\n%s",
+			"notify_darwin.go: failed to sent notification with osascript",
+			err.Error())
+	}
+	return err
+}
diff --git a/notification/notify_unix.go b/notification/notify_unix.go
new file mode 100644
index 0000000..a6fc3ac
--- /dev/null
+++ b/notification/notify_unix.go
@@ -0,0 +1,21 @@
+// +build linux netbsd openbsd freebsd dragonfly
+
+package notification
+
+import (
+	"fmt"
+	"os/exec"
+)
+
+// Notify sends a desktop notification to the user using libnotify. It
+// handles information in the form of Notif struct. It returns an
+// error (if exists).
+func (n Notif) Notify() error {
+	err := exec.Command("notify-send", n.Title, n.Message).Run()
+	if err != nil {
+		err = fmt.Errorf("%s\n%s",
+			"notify_unix.go: failed to sent notification with notify-send",
+			err.Error())
+	}
+	return err
+}
-- 
cgit 1.4.1-2-gfad0