aboutsummaryrefslogtreecommitdiff
path: root/widgets/msgviewer.go
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/msgviewer.go')
-rw-r--r--widgets/msgviewer.go32
1 files changed, 22 insertions, 10 deletions
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go
index 2c77aeb..c7ac44c 100644
--- a/widgets/msgviewer.go
+++ b/widgets/msgviewer.go
@@ -16,10 +16,11 @@ import (
)
type MessageViewer struct {
- mail io.Reader
- pipe io.Writer
- grid *ui.Grid
- term *Terminal
+ cmd *exec.Cmd
+ source io.Reader
+ sink io.WriteCloser
+ grid *ui.Grid
+ term *Terminal
}
func formatAddresses(addrs []*imap.Address) string {
@@ -92,22 +93,33 @@ func NewMessageViewer(store *lib.MessageStore,
grid.AddChild(body).At(1, 0)
viewer := &MessageViewer{
- pipe: pipe,
+ cmd: cmd,
+ sink: pipe,
grid: grid,
term: term,
}
store.FetchBodyPart(msg.Uid, 0, func(reader io.Reader) {
- viewer.mail = reader
- go func() {
- io.Copy(pipe, reader)
- pipe.Close()
- }()
+ viewer.source = reader
+ viewer.attemptCopy()
})
+ term.OnStart = func() {
+ viewer.attemptCopy()
+ }
+
return viewer
}
+func (mv *MessageViewer) attemptCopy() {
+ if mv.source != nil && mv.cmd.Process != nil {
+ go func() {
+ io.Copy(mv.sink, mv.source)
+ mv.sink.Close()
+ }()
+ }
+}
+
func (mv *MessageViewer) Draw(ctx *ui.Context) {
mv.grid.Draw(ctx)
}