diff options
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/account.go | 18 | ||||
-rw-r--r-- | widgets/aerc.go | 8 | ||||
-rw-r--r-- | widgets/msglist.go | 24 |
3 files changed, 22 insertions, 28 deletions
diff --git a/widgets/account.go b/widgets/account.go index afae1d2..431e7b8 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -65,13 +65,6 @@ func NewAccountView(conf *config.AercConfig, acct *config.AccountConfig, } go worker.Backend.Run() - go func() { - for { - msg := <-worker.Messages - msg = worker.ProcessMessage(msg) - view.onMessage(msg) - } - }() worker.PostAction(&types.Configure{Config: acct}, nil) worker.PostAction(&types.Connect{}, view.connected) @@ -80,6 +73,17 @@ func NewAccountView(conf *config.AercConfig, acct *config.AccountConfig, return view } +func (acct *AccountView) Tick() bool { + select { + case msg := <-acct.worker.Messages: + msg = acct.worker.ProcessMessage(msg) + acct.onMessage(msg) + return true + default: + return false + } +} + func (acct *AccountView) AccountConfig() *config.AccountConfig { return acct.acct } diff --git a/widgets/aerc.go b/widgets/aerc.go index e79e467..187eddb 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -65,6 +65,14 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger, return aerc } +func (aerc *Aerc) Tick() bool { + more := false + for _, acct := range aerc.accounts { + more = acct.Tick() || more + } + return more +} + func (aerc *Aerc) Children() []ui.Drawable { return aerc.grid.Children() } diff --git a/widgets/msglist.go b/widgets/msglist.go index 08f7ea4..ddfb92a 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -2,7 +2,6 @@ package widgets import ( "log" - "sync/atomic" "github.com/gdamore/tcell" @@ -20,7 +19,7 @@ type MessageList struct { scroll int selected int spinner *Spinner - store atomic.Value // *lib.MessageStore + store *lib.MessageStore } func NewMessageList(conf *config.AercConfig, logger *log.Logger) *MessageList { @@ -30,7 +29,6 @@ func NewMessageList(conf *config.AercConfig, logger *log.Logger) *MessageList { selected: 0, spinner: NewSpinner(), } - ml.store.Store((*lib.MessageStore)(nil)) ml.spinner.OnInvalidate(func(_ ui.Drawable) { ml.Invalidate() }) @@ -53,8 +51,6 @@ func (ml *MessageList) Draw(ctx *ui.Context) { return } - store.Lock() - var ( needsHeaders []uint32 row int = 0 @@ -94,8 +90,6 @@ func (ml *MessageList) Draw(ctx *ui.Context) { tcell.StyleDefault, "%s", msg) } - store.Unlock() - if len(needsHeaders) != 0 { store.FetchHeaders(needsHeaders, nil) ml.spinner.Start() @@ -113,13 +107,11 @@ func (ml *MessageList) storeUpdate(store *lib.MessageStore) { return } - store.Lock() if len(store.Uids) > 0 { for ml.selected >= len(store.Uids) { ml.Prev() } } - store.Unlock() ml.Invalidate() } @@ -129,7 +121,7 @@ func (ml *MessageList) SetStore(store *lib.MessageStore) { ml.scroll = 0 ml.selected = 0 } - ml.store.Store(store) + ml.store = store if store != nil { ml.spinner.Stop() store.OnUpdate(ml.storeUpdate) @@ -140,29 +132,21 @@ func (ml *MessageList) SetStore(store *lib.MessageStore) { } func (ml *MessageList) Store() *lib.MessageStore { - return ml.store.Load().(*lib.MessageStore) + return ml.store } func (ml *MessageList) Empty() bool { store := ml.Store() - store.Lock() - defer store.Unlock() - return store == nil || len(store.Uids) == 0 } func (ml *MessageList) Selected() *types.MessageInfo { store := ml.Store() - store.Lock() - defer store.Unlock() - return store.Messages[store.Uids[len(store.Uids)-ml.selected-1]] } func (ml *MessageList) Select(index int) { store := ml.Store() - store.Lock() - defer store.Unlock() ml.selected = index for ; ml.selected < 0; ml.selected = len(store.Uids) + ml.selected { @@ -181,8 +165,6 @@ func (ml *MessageList) Select(index int) { func (ml *MessageList) nextPrev(delta int) { store := ml.Store() - store.Lock() - defer store.Unlock() if store == nil || len(store.Uids) == 0 { return |