aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--cmd/aerc/main.go23
-rw-r--r--ui/account.go31
-rw-r--r--worker/imap/worker.go28
-rw-r--r--worker/worker.go5
5 files changed, 68 insertions, 20 deletions
diff --git a/.gitignore b/.gitignore
index f1683ec9..144e4e5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
.go
/aerc
+log
diff --git a/cmd/aerc/main.go b/cmd/aerc/main.go
index e33f158f..cda49911 100644
--- a/cmd/aerc/main.go
+++ b/cmd/aerc/main.go
@@ -1,13 +1,30 @@
package main
import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
"time"
+ "github.com/mattn/go-isatty"
+
"git.sr.ht/~sircmpwn/aerc2/config"
"git.sr.ht/~sircmpwn/aerc2/ui"
)
func main() {
+ var logOut io.Writer
+ var logger *log.Logger
+ if !isatty.IsTerminal(os.Stdout.Fd()) {
+ logOut = os.Stdout
+ } else {
+ logOut = ioutil.Discard
+ }
+ logger = log.New(logOut, "", log.LstdFlags|log.Lshortfile)
+ logger.Println("Starting up aerc")
+
conf, err := config.LoadConfig(nil)
if err != nil {
panic(err)
@@ -18,7 +35,11 @@ func main() {
}
defer _ui.Close()
for _, account := range conf.Accounts {
- tab, err := ui.NewAccountTab(&account)
+ logger.Printf("Initializing account %s\n", account.Name)
+ tab, err := ui.NewAccountTab(&account, log.New(
+ logOut,
+ fmt.Sprintf("[%s] ", account.Name),
+ log.LstdFlags|log.Lshortfile))
if err != nil {
panic(err)
}
diff --git a/ui/account.go b/ui/account.go
index 8353db39..59544d41 100644
--- a/ui/account.go
+++ b/ui/account.go
@@ -1,26 +1,29 @@
package ui
import (
- "fmt"
+ "log"
tb "github.com/nsf/termbox-go"
+ "github.com/davecgh/go-spew/spew"
+
"git.sr.ht/~sircmpwn/aerc2/config"
"git.sr.ht/~sircmpwn/aerc2/worker"
"git.sr.ht/~sircmpwn/aerc2/worker/types"
)
type AccountTab struct {
- Config *config.AccountConfig
- Worker worker.Worker
- Parent *UIState
-
+ Config *config.AccountConfig
+ Worker worker.Worker
+ Parent *UIState
+ logger *log.Logger
counter int
- log []string
}
-func NewAccountTab(conf *config.AccountConfig) (*AccountTab, error) {
- work, err := worker.NewWorker(conf.Source)
+func NewAccountTab(conf *config.AccountConfig,
+ logger *log.Logger) (*AccountTab, error) {
+
+ work, err := worker.NewWorker(conf.Source, logger)
if err != nil {
return nil, err
}
@@ -30,6 +33,7 @@ func NewAccountTab(conf *config.AccountConfig) (*AccountTab, error) {
return &AccountTab{
Config: conf,
Worker: work,
+ logger: logger,
}, nil
}
@@ -49,9 +53,6 @@ func (acc *AccountTab) Render(at Geometry) {
}
TFill(at, cell)
TPrintf(&at, cell, "%s %d\n", acc.Name(), acc.counter)
- for _, str := range acc.log {
- TPrintf(&at, cell, "%s\n", str)
- }
acc.counter++
if acc.counter%10000 == 0 {
acc.counter = 0
@@ -64,5 +65,11 @@ func (acc *AccountTab) GetChannel() chan types.WorkerMessage {
}
func (acc *AccountTab) HandleMessage(msg types.WorkerMessage) {
- acc.log = append(acc.log, fmt.Sprintf("<- %T", msg))
+ switch msg.InResponseTo().(type) {
+ case types.Configure:
+ // Avoid printing passwords
+ acc.logger.Printf("<- %T\n", msg)
+ default:
+ acc.logger.Printf("<- %s", spew.Sdump(msg))
+ }
}
diff --git a/worker/imap/worker.go b/worker/imap/worker.go
index 6971f8c9..d3ef715d 100644
--- a/worker/imap/worker.go
+++ b/worker/imap/worker.go
@@ -2,13 +2,16 @@ package imap
import (
"fmt"
+ "log"
"net/url"
"strings"
- "git.sr.ht/~sircmpwn/aerc2/worker/types"
+ "github.com/davecgh/go-spew/spew"
"github.com/emersion/go-imap"
- "github.com/emersion/go-imap/client"
"github.com/emersion/go-imap-idle"
+ "github.com/emersion/go-imap/client"
+
+ "git.sr.ht/~sircmpwn/aerc2/worker/types"
)
var errUnsupported = fmt.Errorf("unsupported command")
@@ -31,13 +34,15 @@ type IMAPWorker struct {
client *imapClient
updates chan client.Update
+ logger *log.Logger
}
-func NewIMAPWorker() *IMAPWorker {
+func NewIMAPWorker(logger *log.Logger) *IMAPWorker {
return &IMAPWorker{
messages: make(chan types.WorkerMessage, 50),
actions: make(chan types.WorkerMessage, 50),
updates: make(chan client.Update, 50),
+ logger: logger,
}
}
@@ -126,11 +131,24 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
return nil
}
+// Logs an action but censors passwords
+func (w *IMAPWorker) logAction(msg types.WorkerMessage) {
+ switch msg := msg.(type) {
+ case types.Configure:
+ src := msg.Config.Source
+ msg.Config.Source = "[obsfucated]"
+ w.logger.Printf("<= %s", spew.Sdump(msg))
+ msg.Config.Source = src
+ default:
+ w.logger.Printf("<= %s", spew.Sdump(msg))
+ }
+}
+
func (w *IMAPWorker) Run() {
for {
select {
case msg := <-w.actions:
- fmt.Printf("<= %T\n", msg)
+ w.logAction(msg)
if err := w.handleMessage(msg); err == errUnsupported {
w.messages <- types.Unsupported{
Message: types.RespondTo(msg),
@@ -146,7 +164,7 @@ func (w *IMAPWorker) Run() {
}
}
case update := <-w.updates:
- fmt.Printf("<= %T\n", update)
+ w.logger.Printf("[= %s", spew.Sdump(update))
}
}
}
diff --git a/worker/worker.go b/worker/worker.go
index c8ec6222..b6658849 100644
--- a/worker/worker.go
+++ b/worker/worker.go
@@ -5,6 +5,7 @@ import (
"git.sr.ht/~sircmpwn/aerc2/worker/types"
"fmt"
+ "log"
"net/url"
)
@@ -15,7 +16,7 @@ type Worker interface {
}
// Guesses the appropriate worker type based on the given source string
-func NewWorker(source string) (Worker, error) {
+func NewWorker(source string, logger *log.Logger) (Worker, error) {
u, err := url.Parse(source)
if err != nil {
return nil, err
@@ -23,7 +24,7 @@ func NewWorker(source string) (Worker, error) {
switch u.Scheme {
case "imap":
case "imaps":
- return imap.NewIMAPWorker(), nil
+ return imap.NewIMAPWorker(logger), nil
}
return nil, fmt.Errorf("Unknown backend %s", u.Scheme)
}