···9798func (s *Server) RegisterHandlersPlaceStream(e *echo.Echo) error {
99 e.GET("/xrpc/place.stream.graph.getFollowingUser", s.HandlePlaceStreamGraphGetFollowingUser)
100+ e.GET("/xrpc/place.stream.live.getSegments", s.HandlePlaceStreamLiveGetSegments)
101 return nil
102}
103···110 var handleErr error
111 // func (s *Server) handlePlaceStreamGraphGetFollowingUser(ctx context.Context,subjectDID string,userDID string) (*placestreamtypes.GraphGetFollowingUser_Output, error)
112 out, handleErr = s.handlePlaceStreamGraphGetFollowingUser(ctx, subjectDID, userDID)
113+ if handleErr != nil {
114+ return handleErr
115+ }
116+ return c.JSON(200, out)
117+}
118+119+func (s *Server) HandlePlaceStreamLiveGetSegments(c echo.Context) error {
120+ ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandlePlaceStreamLiveGetSegments")
121+ defer span.End()
122+ before := c.QueryParam("before")
123+124+ var limit int
125+ if p := c.QueryParam("limit"); p != "" {
126+ var err error
127+ limit, err = strconv.Atoi(p)
128+ if err != nil {
129+ return err
130+ }
131+ } else {
132+ limit = 50
133+ }
134+ userDID := c.QueryParam("userDID")
135+ var out *placestreamtypes.LiveGetSegments_Output
136+ var handleErr error
137+ // func (s *Server) handlePlaceStreamLiveGetSegments(ctx context.Context,before string,limit int,userDID string) (*placestreamtypes.LiveGetSegments_Output, error)
138+ out, handleErr = s.handlePlaceStreamLiveGetSegments(ctx, before, limit, userDID)
139 if handleErr != nil {
140 return handleErr
141 }
+34
pkg/streamplace/livegetSegments.go
···0000000000000000000000000000000000
···1+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
2+3+package streamplace
4+5+// schema: place.stream.live.getSegments
6+7+import (
8+ "context"
9+10+ "github.com/bluesky-social/indigo/xrpc"
11+)
12+13+// LiveGetSegments_Output is the output of a place.stream.live.getSegments call.
14+type LiveGetSegments_Output struct {
15+ Segments []*Segment_SegmentView `json:"segments,omitempty" cborgen:"segments,omitempty"`
16+}
17+18+// LiveGetSegments calls the XRPC method "place.stream.live.getSegments".
19+//
20+// userDID: The DID of the potentially-following user
21+func LiveGetSegments(ctx context.Context, c *xrpc.Client, before string, limit int64, userDID string) (*LiveGetSegments_Output, error) {
22+ var out LiveGetSegments_Output
23+24+ params := map[string]interface{}{
25+ "before": before,
26+ "limit": limit,
27+ "userDID": userDID,
28+ }
29+ if err := c.Do(ctx, xrpc.Query, "", "place.stream.live.getSegments", params, nil, &out); err != nil {
30+ return nil, err
31+ }
32+33+ return &out, nil
34+}
+6
pkg/streamplace/streamsegment.go
···40 Num int64 `json:"num" cborgen:"num"`
41}
4200000043// Segment_Video is a "video" in the place.stream.segment schema.
44type Segment_Video struct {
45 Codec string `json:"codec" cborgen:"codec"`
···40 Num int64 `json:"num" cborgen:"num"`
41}
4243+// Segment_SegmentView is a "segmentView" in the place.stream.segment schema.
44+type Segment_SegmentView struct {
45+ Cid string `json:"cid" cborgen:"cid"`
46+ Record *util.LexiconTypeDecoder `json:"record" cborgen:"record"`
47+}
48+49// Segment_Video is a "video" in the place.stream.segment schema.
50type Segment_Video struct {
51 Codec string `json:"codec" cborgen:"codec"`