Start building out command subsystem
This commit is contained in:
parent
62862d8a9e
commit
b60999c39e
7 changed files with 119 additions and 8 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue