Skip to content

Commit 7b6c718

Browse files
author
dengzhicheng03
committed
feat: list command use chan
1 parent 33c0eda commit 7b6c718

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

lister/list.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package lister
22

33
import (
4-
"github.com/joshmedeski/sesh/v2/model"
54
"slices"
5+
"sync"
6+
7+
"github.com/joshmedeski/sesh/v2/model"
68
)
79

810
type (
@@ -19,6 +21,12 @@ type (
1921
srcStrategy func(*RealLister) (model.SeshSessions, error)
2022
)
2123

24+
type strategyResult struct {
25+
source string
26+
sessions model.SeshSessions
27+
err error
28+
}
29+
2230
var srcStrategies = map[string]srcStrategy{
2331
"tmux": listTmux,
2432
"config": listConfig,
@@ -33,11 +41,32 @@ func (l *RealLister) List(opts ListOptions) (model.SeshSessions, error) {
3341
srcsOrderedIndex := srcs(opts)
3442
srcsOrderedIndex = sortSources(srcsOrderedIndex, l.config.SortOrder)
3543

44+
resultsChan := make(chan strategyResult, len(srcsOrderedIndex))
45+
var wg sync.WaitGroup
46+
3647
for _, src := range srcsOrderedIndex {
37-
sessions, err := srcStrategies[src](l)
38-
if err != nil {
39-
return model.SeshSessions{}, err
48+
wg.Add(1)
49+
go func(s string) {
50+
defer wg.Done()
51+
sessions, err := srcStrategies[s](l)
52+
resultsChan <- strategyResult{source: s, sessions: sessions, err: err}
53+
}(src)
54+
}
55+
56+
wg.Wait()
57+
close(resultsChan)
58+
59+
// Collect results into a map for easy lookup
60+
resultsMap := make(map[string]model.SeshSessions)
61+
for res := range resultsChan {
62+
if res.err != nil {
63+
return model.SeshSessions{}, res.err
4064
}
65+
resultsMap[res.source] = res.sessions
66+
}
67+
68+
for _, src := range srcsOrderedIndex {
69+
sessions := resultsMap[src]
4170
fullOrderedIndex = append(fullOrderedIndex, sessions.OrderedIndex...)
4271
for _, i := range sessions.OrderedIndex {
4372
fullDirectory[i] = sessions.Directory[i]

0 commit comments

Comments
 (0)