diff options
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/account.go | 52 | ||||
-rw-r--r-- | widgets/aerc.go | 7 |
2 files changed, 56 insertions, 3 deletions
diff --git a/widgets/account.go b/widgets/account.go index a2c5ce7..1f0cc6a 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -1,18 +1,29 @@ package widgets import ( + "log" + "git.sr.ht/~sircmpwn/aerc2/config" "git.sr.ht/~sircmpwn/aerc2/lib/ui" + "git.sr.ht/~sircmpwn/aerc2/worker" + "git.sr.ht/~sircmpwn/aerc2/worker/types" ) type AccountView struct { conf *config.AccountConfig grid *ui.Grid + logger *log.Logger onInvalidate func(d ui.Drawable) + worker *types.Worker } func NewAccountView(conf *config.AccountConfig, - statusbar ui.Drawable) *AccountView { + logger *log.Logger, statusbar ui.Drawable) (*AccountView, error) { + + worker, err := worker.NewWorker(conf.Source, logger) + if err != nil { + return nil, err + } grid := ui.NewGrid().Rows([]ui.GridSpec{ {ui.SIZE_WEIGHT, 1}, @@ -25,7 +36,44 @@ func NewAccountView(conf *config.AccountConfig, ui.NewFill('s'), ui.BORDER_RIGHT)).Span(2, 1) grid.AddChild(ui.NewFill('.')).At(0, 1) grid.AddChild(statusbar).At(1, 1) - return &AccountView{conf: conf, grid: grid} + + acct := &AccountView{ + conf: conf, + grid: grid, + logger: logger, + worker: worker, + } + + go worker.Backend.Run() + go func() { + for { + msg := <-worker.Messages + msg = worker.ProcessMessage(msg) + // TODO: dispatch to appropriate handlers + } + }() + + worker.PostAction(&types.Configure{Config: conf}, nil) + worker.PostAction(&types.Connect{}, acct.connected) + + return acct, nil +} + +func (acct *AccountView) connected(msg types.WorkerMessage) { + switch msg := msg.(type) { + case *types.Done: + acct.logger.Println("Connected.") + acct.worker.PostAction(&types.ListDirectories{}, nil) + case *types.CertificateApprovalRequest: + // TODO: Ask the user + acct.logger.Println("Approving certificate") + acct.worker.PostAction(&types.ApproveCertificate{ + Message: types.RespondTo(msg), + Approved: true, + }, acct.connected) + default: + acct.logger.Println("Connection failed.") + } } func (acct *AccountView) OnInvalidate(onInvalidate func(d ui.Drawable)) { diff --git a/widgets/aerc.go b/widgets/aerc.go index 3bd082e..4351f3b 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -42,7 +42,12 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc { mainGrid.AddChild(tabs.TabContent).At(1, 0).Span(1, 2) for _, acct := range conf.Accounts { - tabs.Add(NewAccountView(&acct, statusbar), acct.Name) + view, err := NewAccountView(&acct, logger, statusbar) + if err != nil { + // TODO: something useful (update statusline?) + panic(err) + } + tabs.Add(view, acct.Name) } return &Aerc{ |