support "limit" field on filters.

This commit is contained in:
fiatjaf
2022-07-24 19:58:34 -03:00
parent fbb81c868c
commit 13d57303b5
4 changed files with 17 additions and 11 deletions

2
go.mod
View File

@@ -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

4
go.sum
View File

@@ -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=

View File

@@ -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)

View File

@@ -24,7 +24,7 @@ type Informationer interface {
type AdvancedQuerier interface {
BeforeQuery(*nostr.Filter)
AfterQuery(*nostr.Filter)
AfterQuery([]nostr.Event, *nostr.Filter)
}
type AdvancedDeleter interface {