diff options
| author | Dax Raad <[email protected]> | 2025-05-30 20:47:56 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-05-30 20:48:36 -0400 |
| commit | f3da73553c45f17e04b1e77cb13eb0fca714d1bd (patch) | |
| tree | a24317a19e1ab2a89da50db669dc6894f15d00d1 /packages/tui/pkg/client | |
| parent | 9a26b3058ffc1023e5c7e54b6d571c903d15888e (diff) | |
| download | opencode-f3da73553c45f17e04b1e77cb13eb0fca714d1bd.tar.gz opencode-f3da73553c45f17e04b1e77cb13eb0fca714d1bd.zip | |
sync
Diffstat (limited to 'packages/tui/pkg/client')
| -rw-r--r-- | packages/tui/pkg/client/.gitignore | 2 | ||||
| -rw-r--r-- | packages/tui/pkg/client/client.go | 4 | ||||
| -rw-r--r-- | packages/tui/pkg/client/event.go | 53 |
3 files changed, 59 insertions, 0 deletions
diff --git a/packages/tui/pkg/client/.gitignore b/packages/tui/pkg/client/.gitignore new file mode 100644 index 000000000..c56971e89 --- /dev/null +++ b/packages/tui/pkg/client/.gitignore @@ -0,0 +1,2 @@ +gen +generated-*.go diff --git a/packages/tui/pkg/client/client.go b/packages/tui/pkg/client/client.go new file mode 100644 index 000000000..bf2d5038e --- /dev/null +++ b/packages/tui/pkg/client/client.go @@ -0,0 +1,4 @@ +package client + +//go:generate bun run ../../js/src/index.ts generate +//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --package=client --generate=types,client,models -o generated-client.go ./gen/openapi.json diff --git a/packages/tui/pkg/client/event.go b/packages/tui/pkg/client/event.go new file mode 100644 index 000000000..f5aab2d26 --- /dev/null +++ b/packages/tui/pkg/client/event.go @@ -0,0 +1,53 @@ +package client + +import ( + "bufio" + "context" + "encoding/json" + "net/http" + "strings" +) + +func (c *Client) Event(ctx context.Context) (<-chan any, error) { + events := make(chan any) + req, err := http.NewRequestWithContext(ctx, "GET", c.Server+"event", nil) + if err != nil { + return nil, err + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + + go func() { + defer close(events) + defer resp.Body.Close() + + scanner := bufio.NewScanner(resp.Body) + for scanner.Scan() { + line := scanner.Text() + if strings.HasPrefix(line, "data: ") { + data := strings.TrimPrefix(line, "data: ") + + var event Event + if err := json.Unmarshal([]byte(data), &event); err != nil { + continue + } + + val, err := event.ValueByDiscriminator() + if err != nil { + continue + } + + select { + case events <- val: + case <-ctx.Done(): + return + } + } + } + }() + + return events, nil +} |
