diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-07-11 20:11:19 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-07-14 23:14:50 +0200 |
commit | c24a57687697411cde3bdcf39700385e7a689798 (patch) | |
tree | f7f599ac90555db5dae8f5eeb06a675893ccf500 | |
parent | a1a276e002b937e38585c1fe547bd0c00bc525c1 (diff) | |
download | aerc-c24a57687697411cde3bdcf39700385e7a689798.tar.gz |
aerc: use aerc as an mbox viewer
Use Aerc as an mbox viewer. Open an mbox file from the command line in a
new tab with the mbox backend. Provide a convenient and quick way to
display emails from an mbox.
Usage: aerc mbox://<path>
where the path can either be a directory or an mbox file. If it is a
directory, every file with an .mbox suffix will be loaded as a folder.
The account config will be copied from the selected account. This allows
the answer emails in the mbox account.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | aerc.go | 1 | ||||
-rw-r--r-- | lib/socket.go | 11 | ||||
-rw-r--r-- | widgets/aerc.go | 27 |
3 files changed, 39 insertions, 0 deletions
@@ -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 ae1ce339..902a7be2 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 fffbf021..58956467 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 = "<user@localhost>" + } + 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 { |