Simplify approach to directory list
This doesn't really need to be abstract tbh
This commit is contained in:
parent
257affcd48
commit
cf66462000
2 changed files with 35 additions and 8 deletions
|
@ -122,13 +122,25 @@ func (acct *AccountView) Event(event tcell.Event) bool {
|
|||
func (acct *AccountView) connected(msg types.WorkerMessage) {
|
||||
switch msg := msg.(type) {
|
||||
case *types.Done:
|
||||
acct.statusline.Set("Connected.")
|
||||
acct.logger.Println("Connected.")
|
||||
acct.dirlist.UpdateList()
|
||||
acct.statusline.Set("Listing mailboxes...")
|
||||
acct.logger.Println("Listing mailboxes...")
|
||||
acct.dirlist.UpdateList(func(dirs []string) {
|
||||
var dir string
|
||||
for _, _dir := range dirs {
|
||||
if _dir == "INBOX" {
|
||||
dir = _dir
|
||||
break
|
||||
}
|
||||
}
|
||||
if dir == "" {
|
||||
dir = dirs[0]
|
||||
}
|
||||
acct.dirlist.Select(dir)
|
||||
acct.logger.Println("Connected.")
|
||||
acct.statusline.Set("Connected.")
|
||||
})
|
||||
case *types.CertificateApprovalRequest:
|
||||
// TODO: Ask the user
|
||||
acct.logger.Println("Approved unknown certificate.")
|
||||
acct.statusline.Push("Approved unknown certificate.", 5*time.Second)
|
||||
acct.worker.PostAction(&types.ApproveCertificate{
|
||||
Message: types.RespondTo(msg),
|
||||
Approved: true,
|
||||
|
|
|
@ -16,6 +16,7 @@ type DirectoryList struct {
|
|||
dirs []string
|
||||
logger *log.Logger
|
||||
onInvalidate func(d ui.Drawable)
|
||||
selected string
|
||||
worker *types.Worker
|
||||
}
|
||||
|
||||
|
@ -25,7 +26,7 @@ func NewDirectoryList(conf *config.AccountConfig,
|
|||
return &DirectoryList{conf: conf, logger: logger, worker: worker}
|
||||
}
|
||||
|
||||
func (dirlist *DirectoryList) UpdateList() {
|
||||
func (dirlist *DirectoryList) UpdateList(done func(dirs []string)) {
|
||||
var dirs []string
|
||||
dirlist.worker.PostAction(
|
||||
&types.ListDirectories{}, func(msg types.WorkerMessage) {
|
||||
|
@ -37,10 +38,18 @@ func (dirlist *DirectoryList) UpdateList() {
|
|||
sort.Strings(dirs)
|
||||
dirlist.dirs = dirs
|
||||
dirlist.Invalidate()
|
||||
if done != nil {
|
||||
done(dirs)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (dirlist *DirectoryList) Select(name string) {
|
||||
dirlist.selected = name
|
||||
dirlist.Invalidate()
|
||||
}
|
||||
|
||||
func (dirlist *DirectoryList) OnInvalidate(onInvalidate func(d ui.Drawable)) {
|
||||
dirlist.onInvalidate = onInvalidate
|
||||
}
|
||||
|
@ -58,14 +67,20 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) {
|
|||
if row >= ctx.Height() {
|
||||
break
|
||||
}
|
||||
if len(dirlist.conf.Folders) > 1 {
|
||||
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
|
||||
}
|
||||
}
|
||||
ctx.Printf(0, row, tcell.StyleDefault, "%s", name)
|
||||
style := tcell.StyleDefault
|
||||
if name == dirlist.selected {
|
||||
style = style.Background(tcell.ColorWhite).
|
||||
Foreground(tcell.ColorBlack)
|
||||
}
|
||||
ctx.Fill(0, row, ctx.Width(), 1, ' ', style)
|
||||
ctx.Printf(0, row, style, "%s", name)
|
||||
row++
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue