aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2023-06-20 11:07:06 -0500
committerRobin Jarry <robin@jarry.cc>2023-06-20 23:16:25 +0200
commit982ee4128c584759e518b6d541ca01cce6c5d547 (patch)
tree092a18234e6fc601e1af81e41aec0289d846479c /widgets
parente984db17e5459b58b566426eb84236bf1b1ee6aa (diff)
downloadaerc-982ee4128c584759e518b6d541ca01cce6c5d547.tar.gz
msgstore: pass context from dirlist to msgstore
Most, if not all, requests to the worker that may need cancellation are sent by the msgstore. These requests are typically only relevant when the msgstore is the selected one. Pass a context from the dirlister to the msgstore when it is selected. This context will be passed in future commits to worker requests. The context is cancelled when a new directory is selected. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Tested-by: Bence Ferdinandy <bence@ferdinandy.com> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'widgets')
-rw-r--r--widgets/dirlist.go41
1 files changed, 22 insertions, 19 deletions
diff --git a/widgets/dirlist.go b/widgets/dirlist.go
index a1d4eddb..3b5c2d91 100644
--- a/widgets/dirlist.go
+++ b/widgets/dirlist.go
@@ -52,15 +52,15 @@ type DirectoryLister interface {
type DirectoryList struct {
Scrollable
- acctConf *config.AccountConfig
- store *lib.DirStore
- dirs []string
- selecting string
- selected string
- spinner *Spinner
- worker *types.Worker
- skipSelect context.Context
- skipSelectCancel context.CancelFunc
+ acctConf *config.AccountConfig
+ store *lib.DirStore
+ dirs []string
+ selecting string
+ selected string
+ spinner *Spinner
+ worker *types.Worker
+ ctx context.Context
+ cancel context.CancelFunc
}
func NewDirectoryList(acctConf *config.AccountConfig,
@@ -69,11 +69,11 @@ func NewDirectoryList(acctConf *config.AccountConfig,
ctx, cancel := context.WithCancel(context.Background())
dirlist := &DirectoryList{
- acctConf: acctConf,
- store: lib.NewDirStore(),
- worker: worker,
- skipSelect: ctx,
- skipSelectCancel: cancel,
+ acctConf: acctConf,
+ store: lib.NewDirStore(),
+ worker: worker,
+ ctx: ctx,
+ cancel: cancel,
}
uiConf := dirlist.UiConfig("")
dirlist.spinner = NewSpinner(uiConf)
@@ -152,10 +152,8 @@ func (dirlist *DirectoryList) ExpandFolder() {
func (dirlist *DirectoryList) Select(name string) {
dirlist.selecting = name
- dirlist.skipSelectCancel()
- ctx, cancel := context.WithCancel(context.Background())
- dirlist.skipSelect = ctx
- dirlist.skipSelectCancel = cancel
+ dirlist.cancel()
+ dirlist.ctx, dirlist.cancel = context.WithCancel(context.Background())
delay := dirlist.UiConfig(name).DirListDelay
go func(ctx context.Context) {
@@ -186,6 +184,11 @@ func (dirlist *DirectoryList) Select(name string) {
sort.Strings(dirlist.dirs)
}
dirlist.sortDirsByFoldersSortConfig()
+ store, ok := dirlist.SelectedMsgStore()
+ if !ok {
+ return
+ }
+ store.SetContext(dirlist.ctx)
}
dirlist.Invalidate()
})
@@ -194,7 +197,7 @@ func (dirlist *DirectoryList) Select(name string) {
log.Tracef("dirlist: skip %s", name)
return
}
- }(ctx)
+ }(dirlist.ctx)
}
func (dirlist *DirectoryList) Selected() string {