aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2022-07-11 20:11:19 +0200
committerRobin Jarry <robin@jarry.cc>2022-07-14 23:14:50 +0200
commitc24a57687697411cde3bdcf39700385e7a689798 (patch)
treef7f599ac90555db5dae8f5eeb06a675893ccf500
parenta1a276e002b937e38585c1fe547bd0c00bc525c1 (diff)
downloadaerc-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.go1
-rw-r--r--lib/socket.go11
-rw-r--r--widgets/aerc.go27
3 files changed, 39 insertions, 0 deletions
diff --git a/aerc.go b/aerc.go
index 57259be1..6144e539 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 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 {