Move ex line into account
This commit is contained in:
parent
b76deea963
commit
c286d3da6b
2 changed files with 58 additions and 66 deletions
|
@ -1,6 +1,7 @@
|
|||
package widgets
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
|
@ -16,15 +17,19 @@ type AccountView struct {
|
|||
conf *config.AccountConfig
|
||||
grid *ui.Grid
|
||||
logger *log.Logger
|
||||
interactive ui.Interactive
|
||||
onInvalidate func(d ui.Drawable)
|
||||
status *StatusLine
|
||||
statusline *StatusLine
|
||||
statusbar *ui.Stack
|
||||
worker *types.Worker
|
||||
}
|
||||
|
||||
func NewAccountView(conf *config.AccountConfig,
|
||||
logger *log.Logger, statusbar ui.Drawable) *AccountView {
|
||||
func NewAccountView(
|
||||
conf *config.AccountConfig, logger *log.Logger) *AccountView {
|
||||
|
||||
status := NewStatusLine()
|
||||
statusbar := ui.NewStack()
|
||||
statusline := NewStatusLine()
|
||||
statusbar.Push(statusline)
|
||||
|
||||
grid := ui.NewGrid().Rows([]ui.GridSpec{
|
||||
{ui.SIZE_WEIGHT, 1},
|
||||
|
@ -36,28 +41,27 @@ func NewAccountView(conf *config.AccountConfig,
|
|||
grid.AddChild(ui.NewBordered(
|
||||
ui.NewFill('s'), ui.BORDER_RIGHT)).Span(2, 1)
|
||||
grid.AddChild(ui.NewFill('.')).At(0, 1)
|
||||
grid.AddChild(status).At(1, 1)
|
||||
grid.AddChild(statusbar).At(1, 1)
|
||||
|
||||
worker, err := worker.NewWorker(conf.Source, logger)
|
||||
if err != nil {
|
||||
acct := &AccountView{
|
||||
// TODO: Update status line with error
|
||||
return &AccountView{
|
||||
conf: conf,
|
||||
grid: grid,
|
||||
logger: logger,
|
||||
status: status,
|
||||
statusline: statusline,
|
||||
}
|
||||
// TODO: Update status line with error
|
||||
return acct
|
||||
}
|
||||
|
||||
acct := &AccountView{
|
||||
conf: conf,
|
||||
grid: grid,
|
||||
logger: logger,
|
||||
status: status,
|
||||
statusline: statusline,
|
||||
statusbar: statusbar,
|
||||
worker: worker,
|
||||
}
|
||||
logger.Printf("My grid is %p; status %p", grid, status)
|
||||
|
||||
go worker.Backend.Run()
|
||||
go func() {
|
||||
|
@ -71,31 +75,26 @@ func NewAccountView(conf *config.AccountConfig,
|
|||
worker.PostAction(&types.Configure{Config: conf}, nil)
|
||||
worker.PostAction(&types.Connect{}, acct.connected)
|
||||
|
||||
go func() {
|
||||
time.Sleep(10 * time.Second)
|
||||
status.Set("Test")
|
||||
}()
|
||||
|
||||
return acct
|
||||
}
|
||||
|
||||
func (acct *AccountView) connected(msg types.WorkerMessage) {
|
||||
switch msg := msg.(type) {
|
||||
case *types.Done:
|
||||
acct.status.Set("Connected.")
|
||||
acct.statusline.Set("Connected.")
|
||||
acct.logger.Println("Connected.")
|
||||
acct.worker.PostAction(&types.ListDirectories{}, nil)
|
||||
case *types.CertificateApprovalRequest:
|
||||
// TODO: Ask the user
|
||||
acct.logger.Println("Approved unknown certificate.")
|
||||
acct.status.Push("Approved unknown certificate.", 5*time.Second)
|
||||
acct.statusline.Push("Approved unknown certificate.", 5*time.Second)
|
||||
acct.worker.PostAction(&types.ApproveCertificate{
|
||||
Message: types.RespondTo(msg),
|
||||
Approved: true,
|
||||
}, acct.connected)
|
||||
default:
|
||||
acct.logger.Println("Connection failed.")
|
||||
acct.status.Set("Connection failed.").
|
||||
acct.statusline.Set("Connection failed.").
|
||||
Color(tcell.ColorRed, tcell.ColorDefault)
|
||||
}
|
||||
}
|
||||
|
@ -113,3 +112,27 @@ func (acct *AccountView) Invalidate() {
|
|||
func (acct *AccountView) Draw(ctx *ui.Context) {
|
||||
acct.grid.Draw(ctx)
|
||||
}
|
||||
|
||||
func (acct *AccountView) Event(event tcell.Event) bool {
|
||||
if acct.interactive != nil {
|
||||
return acct.interactive.Event(event)
|
||||
}
|
||||
switch event := event.(type) {
|
||||
case *tcell.EventKey:
|
||||
if event.Rune() == ':' {
|
||||
exline := NewExLine(func(command string) {
|
||||
acct.statusline.Push(
|
||||
fmt.Sprintf("TODO: execute %s", command), 3*time.Second)
|
||||
acct.statusbar.Pop()
|
||||
acct.interactive = nil
|
||||
}, func() {
|
||||
acct.statusbar.Pop()
|
||||
acct.interactive = nil
|
||||
})
|
||||
acct.interactive = exline
|
||||
acct.statusbar.Push(exline)
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
package widgets
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/gdamore/tcell"
|
||||
|
||||
|
@ -15,9 +13,6 @@ type Aerc struct {
|
|||
accounts map[string]*AccountView
|
||||
grid *libui.Grid
|
||||
tabs *libui.Tabs
|
||||
statusbar *libui.Stack
|
||||
statusline *StatusLine
|
||||
interactive libui.Interactive
|
||||
}
|
||||
|
||||
func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
|
||||
|
@ -31,10 +26,6 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
|
|||
{libui.SIZE_WEIGHT, 1},
|
||||
})
|
||||
|
||||
statusbar := libui.NewStack()
|
||||
statusline := NewStatusLine()
|
||||
statusbar.Push(statusline)
|
||||
|
||||
// TODO: Grab sidebar size from config and via :set command
|
||||
mainGrid.AddChild(libui.NewText("aerc").
|
||||
Strategy(libui.TEXT_CENTER).
|
||||
|
@ -45,7 +36,7 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
|
|||
accts := make(map[string]*AccountView)
|
||||
|
||||
for _, acct := range conf.Accounts {
|
||||
view := NewAccountView(&acct, logger, statusbar)
|
||||
view := NewAccountView(&acct, logger)
|
||||
accts[acct.Name] = view
|
||||
tabs.Add(view, acct.Name)
|
||||
}
|
||||
|
@ -53,8 +44,6 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
|
|||
return &Aerc{
|
||||
accounts: accts,
|
||||
grid: mainGrid,
|
||||
statusbar: statusbar,
|
||||
statusline: statusline,
|
||||
tabs: tabs,
|
||||
}
|
||||
}
|
||||
|
@ -74,26 +63,6 @@ func (aerc *Aerc) Draw(ctx *libui.Context) {
|
|||
}
|
||||
|
||||
func (aerc *Aerc) Event(event tcell.Event) bool {
|
||||
switch event := event.(type) {
|
||||
case *tcell.EventKey:
|
||||
if event.Rune() == ':' {
|
||||
exline := NewExLine(func(command string) {
|
||||
aerc.statusline.Push(fmt.Sprintf("TODO: execute %s", command),
|
||||
3*time.Second)
|
||||
aerc.statusbar.Pop()
|
||||
aerc.interactive = nil
|
||||
}, func() {
|
||||
aerc.statusbar.Pop()
|
||||
aerc.interactive = nil
|
||||
})
|
||||
aerc.interactive = exline
|
||||
aerc.statusbar.Push(exline)
|
||||
return true
|
||||
}
|
||||
}
|
||||
if aerc.interactive != nil {
|
||||
return aerc.interactive.Event(event)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
acct, _ := aerc.tabs.Tabs[aerc.tabs.Selected].Content.(*AccountView)
|
||||
return acct.Event(event)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue