aboutsummaryrefslogtreecommitdiff
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)
+ }
+}