From c6a08b1003a2cb02d86002541ead0f9b38db1beb Mon Sep 17 00:00:00 2001 From: Moritz Poldrack Date: Sat, 4 Mar 2023 10:56:46 +0100 Subject: ipc: use an interface instead of a function list Currently, every function has to be mapped to the according handler with our god-object. To make adding new handlers require less changes, change this mapping into an interface that is satisfied by *widgets.Aerc Signed-off-by: Moritz Poldrack Signed-off-by: Robin Jarry --- aerc.go | 4 +--- lib/ipc/handler.go | 8 ++++++++ lib/ipc/receive.go | 12 +++++------- 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 lib/ipc/handler.go diff --git a/aerc.go b/aerc.go index f4247ed5..49684c53 100644 --- a/aerc.go +++ b/aerc.go @@ -214,13 +214,11 @@ func main() { ui.EnableMouse() } - as, err := ipc.StartServer() + as, err := ipc.StartServer(aerc) if err != nil { log.Warnf("Failed to start Unix server: %v", err) } else { defer as.Close() - as.OnMailto = aerc.Mailto - as.OnMbox = aerc.Mbox } // set the aerc version so that we can use it in the template funcs diff --git a/lib/ipc/handler.go b/lib/ipc/handler.go new file mode 100644 index 00000000..fb8f0e06 --- /dev/null +++ b/lib/ipc/handler.go @@ -0,0 +1,8 @@ +package ipc + +import "net/url" + +type Handler interface { + Mailto(addr *url.URL) error + Mbox(source string) error +} diff --git a/lib/ipc/receive.go b/lib/ipc/receive.go index 11a96e30..0745e3d6 100644 --- a/lib/ipc/receive.go +++ b/lib/ipc/receive.go @@ -17,12 +17,10 @@ import ( type AercServer struct { listener net.Listener - - OnMailto func(addr *url.URL) error - OnMbox func(source string) error + handler Handler } -func StartServer() (*AercServer, error) { +func StartServer(handler Handler) (*AercServer, error) { sockpath := path.Join(xdg.RuntimeDir(), "aerc.sock") // remove the socket if it is not connected to a session if err := ConnectAndExec(nil); err != nil { @@ -33,7 +31,7 @@ func StartServer() (*AercServer, error) { if err != nil { return nil, err } - as := &AercServer{listener: l} + as := &AercServer{listener: l, handler: handler} go as.Serve() return as, nil @@ -107,14 +105,14 @@ func (as *AercServer) handleMessage(req *Request) *Response { if err != nil { return &Response{Error: err.Error()} } - err = as.OnMailto(mailto) + err = as.handler.Mailto(mailto) if err != nil { return &Response{ Error: err.Error(), } } case strings.HasPrefix(req.Arguments[0], "mbox:"): - err = as.OnMbox(req.Arguments[0]) + err = as.handler.Mbox(req.Arguments[0]) if err != nil { return &Response{Error: err.Error()} } -- cgit v1.2.3-54-g00ecf