Start building out command subsystem

This commit is contained in:
Drew DeVault 2019-03-10 21:15:24 -04:00
commit b60999c39e
7 changed files with 119 additions and 8 deletions

View file

@ -75,7 +75,7 @@ func NewAccountView(conf *config.AccountConfig,
for {
msg := <-worker.Messages
msg = worker.ProcessMessage(msg)
// TODO: dispatch to appropriate handlers
acct.onMessage(msg)
}
}()
@ -164,3 +164,11 @@ func (acct *AccountView) connected(msg types.WorkerMessage) {
Color(tcell.ColorRed, tcell.ColorDefault)
}
}
func (acct *AccountView) Directories() *DirectoryList {
return acct.dirlist
}
func (acct *AccountView) onMessage(msg types.WorkerMessage) {
// TODO
}

View file

@ -1,7 +1,6 @@
package widgets
import (
"fmt"
"log"
"github.com/gdamore/tcell"
@ -13,11 +12,14 @@ import (
type Aerc struct {
accounts map[string]*AccountView
cmd func(cmd string) error
grid *libui.Grid
tabs *libui.Tabs
}
func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
func NewAerc(conf *config.AercConfig, logger *log.Logger,
cmd func(cmd string) error) *Aerc {
tabs := libui.NewTabs()
mainGrid := libui.NewGrid().Rows([]libui.GridSpec{
@ -37,12 +39,13 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc {
aerc := &Aerc{
accounts: make(map[string]*AccountView),
cmd: cmd,
grid: mainGrid,
tabs: tabs,
}
for _, acct := range conf.Accounts {
view := NewAccountView(&acct, logger, aerc.RunCommand)
view := NewAccountView(&acct, logger, cmd)
aerc.accounts[acct.Name] = view
tabs.Add(view, acct.Name)
}
@ -73,7 +76,6 @@ func (aerc *Aerc) Event(event tcell.Event) bool {
return acct.Event(event)
}
func (aerc *Aerc) RunCommand(cmd string) error {
// TODO
return fmt.Errorf("TODO: execute '%s'", cmd)
func (aerc *Aerc) SelectedAccount() *AccountView {
return aerc.accounts[aerc.tabs.Tabs[aerc.tabs.Selected].Name]
}

View file

@ -103,3 +103,40 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) {
row++
}
}
func (dirlist *DirectoryList) nextPrev(delta int) {
for i, dir := range dirlist.dirs {
if dir == dirlist.selected {
var j int
ndirs := len(dirlist.dirs)
for j = i + delta; j != i; j += delta {
if j < 0 {
j = ndirs - 1
}
if j >= ndirs {
j = 0
}
name := dirlist.dirs[j]
if len(dirlist.conf.Folders) > 1 && name != dirlist.selected {
idx := sort.SearchStrings(dirlist.conf.Folders, name)
if idx == len(dirlist.conf.Folders) ||
dirlist.conf.Folders[idx] != name {
continue
}
}
break
}
dirlist.Select(dirlist.dirs[j])
break
}
}
}
func (dirlist *DirectoryList) Next() {
dirlist.nextPrev(1)
}
func (dirlist *DirectoryList) Prev() {
dirlist.nextPrev(-1)
}