aboutsummaryrefslogtreecommitdiff
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/msgviewer.go57
1 files changed, 50 insertions, 7 deletions
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go
index e94ece4..9d80c74 100644
--- a/widgets/msgviewer.go
+++ b/widgets/msgviewer.go
@@ -109,7 +109,7 @@ index 0000000..1c55bfe
func NewMessageViewer() *MessageViewer {
grid := ui.NewGrid().Rows([]ui.GridSpec{
- {ui.SIZE_EXACT, 3},
+ {ui.SIZE_EXACT, 4},
{ui.SIZE_WEIGHT, 1},
}).Columns([]ui.GridSpec{
{ui.SIZE_WEIGHT, 1},
@@ -119,6 +119,7 @@ func NewMessageViewer() *MessageViewer {
{ui.SIZE_EXACT, 1},
{ui.SIZE_EXACT, 1},
{ui.SIZE_EXACT, 1},
+ {ui.SIZE_EXACT, 1},
}).Columns([]ui.GridSpec{
{ui.SIZE_WEIGHT, 1},
{ui.SIZE_WEIGHT, 1},
@@ -139,7 +140,19 @@ func NewMessageViewer() *MessageViewer {
Value: "[PATCH todo.sr.ht v2 1/3 Alter Event fields " +
"and migrate data]",
}).At(1, 0).Span(1, 2)
- headers.AddChild(ui.NewFill(' ')).At(2, 0).Span(1, 2)
+ headers.AddChild(
+ &HeaderView{
+ Name: "PGP",
+ Value: "✓ Valid PGP signature from Ivan Habunek",
+ }).At(2, 0).Span(1, 2)
+ headers.AddChild(ui.NewFill(' ')).At(3, 0).Span(1, 2)
+
+ body := ui.NewGrid().Rows([]ui.GridSpec{
+ {ui.SIZE_WEIGHT, 1},
+ }).Columns([]ui.GridSpec{
+ {ui.SIZE_WEIGHT, 1},
+ {ui.SIZE_EXACT, 20},
+ })
cmd := exec.Command("sh", "-c", "./contrib/hldiff.py | less -R")
pipe, _ := cmd.StdinPipe()
@@ -152,9 +165,13 @@ func NewMessageViewer() *MessageViewer {
}()
}
term.Focus(true)
+ body.AddChild(term).At(0, 0)
+
+ body.AddChild(ui.NewBordered(
+ &MultipartView{}, ui.BORDER_LEFT)).At(0, 1)
grid.AddChild(headers).At(0, 0)
- grid.AddChild(term).At(1, 0)
+ grid.AddChild(body).At(1, 0)
return &MessageViewer{grid, term}
}
@@ -189,10 +206,14 @@ type HeaderView struct {
func (hv *HeaderView) Draw(ctx *ui.Context) {
size := runewidth.StringWidth(" " + hv.Name + " ")
- ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault)
- style := tcell.StyleDefault.Reverse(true)
- ctx.Printf(0, 0, style, " "+hv.Name+" ")
- style = tcell.StyleDefault
+ var style tcell.Style
+ if hv.Name == "PGP" {
+ style = tcell.StyleDefault.Foreground(tcell.ColorGreen)
+ } else {
+ style = tcell.StyleDefault
+ }
+ ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', style)
+ ctx.Printf(0, 0, tcell.StyleDefault.Reverse(true), " "+hv.Name+" ")
ctx.Printf(size, 0, style, " "+hv.Value)
}
@@ -205,3 +226,25 @@ func (hv *HeaderView) Invalidate() {
func (hv *HeaderView) OnInvalidate(fn func(d ui.Drawable)) {
hv.onInvalidate = fn
}
+
+type MultipartView struct {
+ onInvalidate func(d ui.Drawable)
+}
+
+func (mpv *MultipartView) Draw(ctx *ui.Context) {
+ ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault)
+ ctx.Fill(0, 0, ctx.Width(), 1, ' ', tcell.StyleDefault.Reverse(true))
+ ctx.Printf(0, 0, tcell.StyleDefault.Reverse(true), "text/plain")
+ ctx.Printf(0, 1, tcell.StyleDefault, "text/html")
+ ctx.Printf(0, 2, tcell.StyleDefault, "application/pgp-si…")
+}
+
+func (mpv *MultipartView) Invalidate() {
+ if mpv.onInvalidate != nil {
+ mpv.onInvalidate(mpv)
+ }
+}
+
+func (mpv *MultipartView) OnInvalidate(fn func(d ui.Drawable)) {
+ mpv.onInvalidate = fn
+}