aboutsummaryrefslogtreecommitdiff
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/account.go18
-rw-r--r--widgets/aerc.go8
-rw-r--r--widgets/msglist.go24
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