From 002dc1e84d9ae5454278d5267c0b0ea012012e17 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 2 May 2025 15:19:16 -0300 Subject: [PATCH] allow custom CheckDuplicate in pool subscriptions. --- pool.go | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/pool.go b/pool.go index da50650..075de59 100644 --- a/pool.go +++ b/pool.go @@ -246,12 +246,14 @@ func (pool *Pool) FetchMany( ) chan RelayEvent { seenAlready := xsync.NewMapOf[ID, struct{}]() - opts.CheckDuplicate = func(id ID, relay string) bool { - _, exists := seenAlready.LoadOrStore(id, struct{}{}) - if exists && pool.duplicateMiddleware != nil { - pool.duplicateMiddleware(relay, id) + if opts.CheckDuplicate == nil { + opts.CheckDuplicate = func(id ID, relay string) bool { + _, exists := seenAlready.LoadOrStore(id, struct{}{}) + if exists && pool.duplicateMiddleware != nil { + pool.duplicateMiddleware(relay, id) + } + return exists } - return exists } return pool.subManyEoseNonOverwriteCheckDuplicate(ctx, urls, filter, opts) @@ -393,12 +395,14 @@ func (pool *Pool) subMany( }() } - opts.CheckDuplicate = func(id ID, relay string) bool { - _, exists := seenAlready.Load(id) - if exists && pool.duplicateMiddleware != nil { - pool.duplicateMiddleware(relay, id) + if opts.CheckDuplicate == nil { + opts.CheckDuplicate = func(id ID, relay string) bool { + _, exists := seenAlready.Load(id) + if exists && pool.duplicateMiddleware != nil { + pool.duplicateMiddleware(relay, id) + } + return exists } - return exists } pending := xsync.NewCounter() @@ -691,12 +695,14 @@ func (pool *Pool) BatchedSubManyEose( wg.Add(len(dfs)) seenAlready := xsync.NewMapOf[ID, struct{}]() - opts.CheckDuplicate = func(id ID, relay string) bool { - _, exists := seenAlready.LoadOrStore(id, struct{}{}) - if exists && pool.duplicateMiddleware != nil { - pool.duplicateMiddleware(relay, id) + if opts.CheckDuplicate == nil { + opts.CheckDuplicate = func(id ID, relay string) bool { + _, exists := seenAlready.LoadOrStore(id, struct{}{}) + if exists && pool.duplicateMiddleware != nil { + pool.duplicateMiddleware(relay, id) + } + return exists } - return exists } for _, df := range dfs {