From dd178262bb1d01f9f7d4710431547041bde52d89 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Sat, 8 Jun 2019 11:29:26 -0700 Subject: [PATCH] Select user's preferred mimetype in MessageViewer This implements selecting the most preferred mimetype under the 'View->Alternatives' configuration setting when viewing a message. Mimetypes in the alternatives array are weighted by their position, where the lower the index in the array the higher the priority, so this is taken into account during selection. If no message part matches a mimetype in the alternatives array, then it selects the first mimetype in the message. --- widgets/msgviewer.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index 52407b7..10c2182 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -160,14 +160,25 @@ func createSwitcher(switcher *PartSwitcher, conf *config.AercConfig, if err != nil { return err } - switcher.selected = -1 + selectedPriority := -1 for i, pv := range switcher.parts { pv.OnInvalidate(func(_ ui.Drawable) { switcher.Invalidate() }) - // TODO: switch to user's preferred mimetype, if configured + // Switch to user's preferred mimetype if switcher.selected == -1 && pv.part.MIMEType != "multipart" { switcher.selected = i + } else if selectedPriority == -1 { + for idx, m := range conf.Viewer.Alternatives { + if m != pv.part.MIMEType+"/"+pv.part.MIMESubType { + continue + } + priority := len(conf.Viewer.Alternatives) - idx + if priority > selectedPriority { + selectedPriority = priority + switcher.selected = i + } + } } } }