diff options
Diffstat (limited to 'config/hooks.go')
-rw-r--r-- | config/hooks.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/config/hooks.go b/config/hooks.go new file mode 100644 index 00000000..9bbd9031 --- /dev/null +++ b/config/hooks.go @@ -0,0 +1,62 @@ +package config + +import ( + "strings" + + "git.sr.ht/~rjarry/aerc/log" + "github.com/go-ini/ini" +) + +type HooksConfig struct { + MailReceived string `ini:"mail-received"` +} + +var Hooks HooksConfig + +func parseHooks(file *ini.File) error { + err := MapToStruct(file.Section("hooks"), &Hooks, true) + if err != nil { + return err + } + + newEmail := file.Section("triggers").Key("new-email").String() + if Hooks.MailReceived == "" && newEmail != "" { + Hooks.MailReceived = convertNewEmailTrigger(newEmail) + Warnings = append(Warnings, Warning{ + Title: "DEPRECATION NOTICE: [triggers].new-email", + Body: ` +The new-email trigger has been replaced by [hooks].email-received. + +Your configuration in this instance was automatically converted to: + +[hooks] +mail-received = ` + Hooks.MailReceived + ` + +Please verify the accuracy of the above translation. + +Your configuration file was not changed. To make this change permanent and to +dismiss this deprecation warning on launch, copy the above lines into aerc.conf +and remove new-email from it. See aerc-config(5) for more details. +`, + }) + } + + log.Debugf("aerc.conf: [hooks] %#v", Hooks) + return nil +} + +func convertNewEmailTrigger(old string) string { + translations := map[string]string{ + "%a": "$AERC_FROM_ADDRESS", + "%n": "$AERC_FROM_NAME", + "%s": "$AERC_SUBJECT", + "%f": "$AERC_FROM_NAME <$AERC_FROM_ADDRESS>", + "%u": `$(echo "$AERC_FROM_ADDRESS" | cut -d@ -f1)`, + "%v": `$(echo "$AERC_FROM_NAME" | cut -d' ' -f1)`, + } + for replace, with := range translations { + old = strings.ReplaceAll(old, replace, with) + } + old = strings.TrimPrefix(old, "exec ") + return strings.ReplaceAll(old, "%%", "%") +} |