summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/pkg/client
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-30 20:47:56 -0400
committerDax Raad <[email protected]>2025-05-30 20:48:36 -0400
commitf3da73553c45f17e04b1e77cb13eb0fca714d1bd (patch)
treea24317a19e1ab2a89da50db669dc6894f15d00d1 /packages/tui/pkg/client
parent9a26b3058ffc1023e5c7e54b6d571c903d15888e (diff)
downloadopencode-f3da73553c45f17e04b1e77cb13eb0fca714d1bd.tar.gz
opencode-f3da73553c45f17e04b1e77cb13eb0fca714d1bd.zip
sync
Diffstat (limited to 'packages/tui/pkg/client')
-rw-r--r--packages/tui/pkg/client/.gitignore2
-rw-r--r--packages/tui/pkg/client/client.go4
-rw-r--r--packages/tui/pkg/client/event.go53
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
+}