~sircmpwn/aerc

072b5f453ccb8c3d79f55be80f5db9e71cf17a31 — Reto Brunner 2 years ago d4416e7
Close backends prior to shutdown

We need some way to signal the backends that we are about to shutdown,
allowing them to clean up (for example in notmuch committing the db changes).
This commit implements a hook which gets called upon shutdown, providing
backends implement the io.Closer interface.
2 files changed, 20 insertions(+), 0 deletions(-)

M aerc.go
M widgets/aerc.go
M aerc.go => aerc.go +1 -0
@@ 178,4 178,5 @@ func main() {
			time.Sleep(16 * time.Millisecond)
		}
	}
	aerc.CloseBackends()
}

M widgets/aerc.go => widgets/aerc.go +19 -0
@@ 2,6 2,7 @@ package widgets

import (
	"errors"
	"io"
	"log"
	"net/url"
	"strings"


@@ 405,3 406,21 @@ func (aerc *Aerc) Mailto(addr *url.URL) error {
	})
	return nil
}

func (aerc *Aerc) CloseBackends() error {
	var returnErr error
	for _, acct := range aerc.accounts {
		var raw interface{} = acct.worker.Backend
		c, ok := raw.(io.Closer)
		if !ok {
			continue
		}
		err := c.Close()
		if err != nil {
			returnErr = err
			aerc.logger.Printf("Closing backend failed for %v: %v\n",
				acct.Name(), err)
		}
	}
	return returnErr
}