diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-05-21 14:44:33 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2023-05-21 14:44:33 +0200 |
| commit | d4dbb47ac776471eb8a9f91a97da40b9b6621a74 (patch) | |
| tree | ea6dc9824b3bc821d6618fe41472050277f6d25b | |
| parent | f638d3975225b895e7b0a8fb79c6c6de288a732a (diff) | |
| download | WRMS-d4dbb47ac776471eb8a9f91a97da40b9b6621a74.tar.gz WRMS-d4dbb47ac776471eb8a9f91a97da40b9b6621a74.zip | |
paralyze searching
| -rw-r--r-- | TODO | 4 | ||||
| -rw-r--r-- | main.go | 12 | ||||
| -rw-r--r-- | player.go | 23 | ||||
| -rw-r--r-- | wrms.go | 1 |
4 files changed, 33 insertions, 7 deletions
@@ -1,4 +1,5 @@ ## Fronted +- [ ] support incremental search results ## Web Backend @@ -6,7 +7,8 @@ ## Backends -- [ ] Split paralyze search +- [X] paralyze search + - [ ] report results incrementally - [X] Implement local storage backend - [X] Implement upload - [ ] Remove uploaded songs after were played @@ -9,6 +9,7 @@ import ( "io/ioutil" "net/http" "strings" + "time" "muhq.space/go/wrms/llog" @@ -36,7 +37,16 @@ func searchHandler(w http.ResponseWriter, r *http.Request) { llog.Debug("Searching for %s", pattern) - results := wrms.Player.Search(pattern) + start := time.Now() + resultsChan := wrms.Player.Search(pattern) + results := []Song{} + + for result := range resultsChan { + results = append(results, result...) + } + + llog.Debug("searching for %s took %v", pattern, time.Since(start)) + data, err := json.Marshal(Event{"search", results}) if err != nil { llog.Error("Encoding the search result failed with %s", err) @@ -3,6 +3,7 @@ package main import ( "io" "os/exec" + "sync" "syscall" "muhq.space/go/wrms/llog" @@ -110,10 +111,24 @@ func (player *Player) Pause() { } } -func (player *Player) Search(pattern string) []Song { - results := []Song{} +func (player *Player) Search(pattern string) chan []Song { + var wg sync.WaitGroup + wg.Add(len(player.Backends)) + + ch := make(chan []Song) + for _, backend := range player.Backends { - results = append(results, backend.Search(pattern)...) + backend := backend + go func() { + ch <- backend.Search(pattern) + wg.Done() + }() } - return results + + go func() { + wg.Wait() + close(ch) + }() + + return ch } @@ -112,7 +112,6 @@ func (wrms *Wrms) Next() { } wrms.CurrentSong = *next - } func (wrms *Wrms) PlayPause() { |
