diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-03-31 14:24:53 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-03-31 14:24:53 -0400 |
commit | bbdf9df75e8597e38cf1d90145f22aab9bd95178 (patch) | |
tree | e721502779327758956694edffbd6e01762801e9 /config/config.go | |
parent | 711d22891bd50646d1cf925fbf0b8a760c638fd0 (diff) | |
download | aerc-bbdf9df75e8597e38cf1d90145f22aab9bd95178.tar.gz |
Add basic filter implementation
Diffstat (limited to 'config/config.go')
-rw-r--r-- | config/config.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/config/config.go b/config/config.go index e5e332e7..8d460ca6 100644 --- a/config/config.go +++ b/config/config.go @@ -22,6 +22,12 @@ type UIConfig struct { EmptyMessage string `ini:"empty-message"` } +const ( + FILTER_MIMETYPE = iota + FILTER_HEADER + FILTER_HEADER_REGEX +) + type AccountConfig struct { Default string Name string @@ -38,10 +44,23 @@ type BindingConfig struct { Terminal *KeyBindings } +type FilterConfig struct { + FilterType int + Filter string + Command string +} + +type ViewerConfig struct { + Pager string + Alternatives []string +} + type AercConfig struct { Bindings BindingConfig Ini *ini.File `ini:"-"` Accounts []AccountConfig `ini:"-"` + Filters []FilterConfig `ini:"-"` + Viewer ViewerConfig `ini:"-"` Ui UIConfig } @@ -135,6 +154,34 @@ func LoadConfig(root *string) (*AercConfig, error) { EmptyMessage: "(no messages)", }, } + if filters, err := file.GetSection("filters"); err == nil { + // TODO: Parse the filter more finely, e.g. parse the regex + for match, cmd := range filters.KeysHash() { + filter := FilterConfig{ + Command: cmd, + Filter: match, + } + if strings.Contains(match, "~:") { + filter.FilterType = FILTER_HEADER_REGEX + } else if strings.ContainsRune(match, ':') { + filter.FilterType = FILTER_HEADER + } else { + filter.FilterType = FILTER_MIMETYPE + } + config.Filters = append(config.Filters, filter) + } + } + if viewer, err := file.GetSection("viewer"); err == nil { + if err := viewer.MapTo(&config.Viewer); err != nil { + return nil, err + } + for key, val := range viewer.KeysHash() { + switch key { + case "alternatives": + config.Viewer.Alternatives = strings.Split(val, ",") + } + } + } if ui, err := file.GetSection("ui"); err == nil { if err := ui.MapTo(&config.Ui); err != nil { return nil, err |