about summary refs log tree commit diff stats
path: root/config/triggers.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/triggers.go')
-rw-r--r--config/triggers.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/config/triggers.go b/config/triggers.go
new file mode 100644
index 0000000..d31f267
--- /dev/null
+++ b/config/triggers.go
@@ -0,0 +1,49 @@
+package config
+
+import (
+	"errors"
+	"fmt"
+
+	"github.com/google/shlex"
+
+	"git.sr.ht/~sircmpwn/aerc/lib/format"
+	"git.sr.ht/~sircmpwn/aerc/models"
+)
+
+func (trig *TriggersConfig) ExecTrigger(triggerCmd string,
+	triggerFmt func(string) (string, error)) error {
+
+	if len(triggerCmd) == 0 {
+		return errors.New("Trigger command empty")
+	}
+	triggerCmdParts, err := shlex.Split(triggerCmd)
+	if err != nil {
+		return err
+	}
+
+	var command []string
+	for _, part := range triggerCmdParts {
+		formattedPart, err := triggerFmt(part)
+		if err != nil {
+			return err
+		}
+		command = append(command, formattedPart)
+	}
+	return trig.ExecuteCommand(command)
+}
+
+func (trig *TriggersConfig) ExecNewEmail(account *AccountConfig,
+	conf *AercConfig, msg *models.MessageInfo) {
+	err := trig.ExecTrigger(trig.NewEmail,
+		func(part string) (string, error) {
+			formatstr, args, err := format.ParseMessageFormat(part,
+				conf.Ui.TimestampFormat, account.Name, 0, msg)
+			if err != nil {
+				return "", err
+			}
+			return fmt.Sprintf(formatstr, args...), nil
+		})
+	if err != nil {
+		fmt.Printf("Error from the new-email trigger: %s\n", err)
+	}
+}