From 13d57303b5a21df7ffb1df9ea7e448d2a0f77a2e Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sun, 24 Jul 2022 19:58:34 -0300 Subject: [PATCH] support "limit" field on filters. --- go.mod | 2 +- go.sum | 4 ++-- handlers.go | 20 +++++++++++++------- interface.go | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 9c2aa92..0188b30 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/PuerkitoBio/goquery v1.8.0 github.com/cockroachdb/pebble v0.0.0-20220723153705-3fc374e4dc66 - github.com/fiatjaf/go-nostr v0.7.3 + github.com/fiatjaf/go-nostr v0.7.4 github.com/gorilla/mux v1.8.0 github.com/gorilla/websocket v1.4.2 github.com/grokify/html-strip-tags-go v0.0.1 diff --git a/go.sum b/go.sum index 4686ca7..7d4189d 100644 --- a/go.sum +++ b/go.sum @@ -134,8 +134,8 @@ github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHj github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fergusstrange/embedded-postgres v1.10.0 h1:YnwF6xAQYmKLAXXrrRx4rHDLih47YJwVPvg8jeKfdNg= -github.com/fiatjaf/go-nostr v0.7.3 h1:Z95U2qTTj3a41+ybopYjfKZ+bMpNFM43ARA7B4IOYVs= -github.com/fiatjaf/go-nostr v0.7.3/go.mod h1:pbJCdZzBKPB8wgQDipS5POnOV1afhcFzJUIwJ5qKSrU= +github.com/fiatjaf/go-nostr v0.7.4 h1:Qtn78VELVlxhbJMtZSn5nNolvnPSH01frfCIGG+znbw= +github.com/fiatjaf/go-nostr v0.7.4/go.mod h1:pbJCdZzBKPB8wgQDipS5POnOV1afhcFzJUIwJ5qKSrU= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/handlers.go b/handlers.go index 537d446..ddbd28e 100644 --- a/handlers.go +++ b/handlers.go @@ -195,22 +195,28 @@ func handleWebsocket(relay Relay) func(http.ResponseWriter, *http.Request) { return } + filter := &filters[i] + if advancedQuerier != nil { - advancedQuerier.BeforeQuery(&filters[i]) + advancedQuerier.BeforeQuery(filter) } - events, err := store.QueryEvents(&filters[i]) + events, err := store.QueryEvents(filter) if err == nil { + if advancedQuerier != nil { + advancedQuerier.AfterQuery(events, filter) + } + + if filter.Limit > 0 && len(events) > filter.Limit { + events = events[0:filter.Limit] + } + for _, event := range events { ws.WriteJSON([]interface{}{"EVENT", id, event}) } - } - if advancedQuerier != nil { - advancedQuerier.AfterQuery(&filters[i]) + ws.WriteJSON([]interface{}{"EOSE", id}) } - - ws.WriteJSON([]interface{}{"EOSE", id}) } setListener(id, ws, filters) diff --git a/interface.go b/interface.go index a89a06b..acb8503 100644 --- a/interface.go +++ b/interface.go @@ -24,7 +24,7 @@ type Informationer interface { type AdvancedQuerier interface { BeforeQuery(*nostr.Filter) - AfterQuery(*nostr.Filter) + AfterQuery([]nostr.Event, *nostr.Filter) } type AdvancedDeleter interface {