diff --git a/aerc.go b/aerc.go index 57259be..6144e53 100644 --- a/aerc.go +++ b/aerc.go @@ -200,6 +200,7 @@ func main() { } 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/socket.go b/lib/socket.go index ae1ce33..902a7be 100644 --- a/lib/socket.go +++ b/lib/socket.go @@ -21,6 +21,7 @@ type AercServer struct { logger *log.Logger listener net.Listener OnMailto func(addr *url.URL) error + OnMbox func(source string) error } func StartServer(logger *log.Logger) (*AercServer, error) { @@ -92,6 +93,16 @@ func (as *AercServer) handleClient(conn net.Conn) { } else { conn.Write([]byte("result: success\n")) } + case "mbox": + var err error + if as.OnMbox != nil { + err = as.OnMbox(msg) + } + if err != nil { + conn.Write([]byte(fmt.Sprintf("result: %v\n", err))) + } else { + conn.Write([]byte("result: success\n")) + } } } as.logger.Printf("Closed Unix connection %d", clientId) diff --git a/widgets/aerc.go b/widgets/aerc.go index fffbf02..5895646 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -618,6 +618,33 @@ func (aerc *Aerc) Mailto(addr *url.URL) error { return nil } +func (aerc *Aerc) Mbox(source string) error { + acctConf := config.AccountConfig{} + if selectedAcct := aerc.SelectedAccount(); selectedAcct != nil { + acctConf = *selectedAcct.acct + info := fmt.Sprintf("Loading outgoing mbox mail settings from account [%s]", selectedAcct.Name()) + aerc.PushStatus(info, 10*time.Second) + aerc.Logger().Println(info) + } else { + acctConf.From = "" + } + acctConf.Name = "mbox" + acctConf.Source = source + acctConf.Default = "INBOX" + acctConf.Archive = "Archive" + acctConf.Postpone = "Drafts" + acctConf.CopyTo = "Sent" + + mboxView, err := NewAccountView(aerc, aerc.conf, &acctConf, aerc.logger, aerc, nil) + if err != nil { + aerc.NewTab(errorScreen(err.Error(), aerc.conf.Ui), acctConf.Name) + } else { + aerc.accounts[acctConf.Name] = mboxView + aerc.NewTab(mboxView, acctConf.Name) + } + return nil +} + func (aerc *Aerc) CloseBackends() error { var returnErr error for _, acct := range aerc.accounts {