From 326c94973acd10aef681af0f53fec3233f48c269 Mon Sep 17 00:00:00 2001 From: Bohdan Horbeshko Date: Sat, 13 Sep 2025 17:01:09 -0400 Subject: [PATCH] Treat incoming probe presence same as available only first time after transport restart --- Makefile | 2 +- telegabber.go | 2 +- xmpp/handlers.go | 43 ++++++++++++++++++++++++++++--------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index dca71a3..254c3b1 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ COMMIT := $(shell git rev-parse --short HEAD) TD_COMMIT := "5bbfc1cf5dab94f82e02f3430ded7241d4653551" -VERSION := "v1.12.4" +VERSION := "v1.12.5" MAKEOPTS := "-j4" all: diff --git a/telegabber.go b/telegabber.go index c68ade6..df34b58 100644 --- a/telegabber.go +++ b/telegabber.go @@ -16,7 +16,7 @@ import ( goxmpp "gosrc.io/xmpp" ) -var version string = "1.12.4" +var version string = "1.12.5" var commit string var sm *goxmpp.StreamManager diff --git a/xmpp/handlers.go b/xmpp/handlers.go index 3c3b370..8e5da5c 100644 --- a/xmpp/handlers.go +++ b/xmpp/handlers.go @@ -7,6 +7,7 @@ import ( "sort" "strconv" "strings" + "sync" "dev.narayana.im/narayana/telegabber/persistence" "dev.narayana.im/narayana/telegabber/telegram" @@ -25,6 +26,10 @@ const ( TypeVCard4 ) +// kludge for client resuming after the transport restart (by full jids) +var probeFired = make(map[string]bool) +var probeFiredLock = sync.Mutex{} + func logPacketType(p stanza.Packet) { log.Warnf("Ignoring packet: %T\n", p) } @@ -410,23 +415,31 @@ func handlePresence(s xmpp.Sender, p stanza.Presence) { if err != nil { log.Error(errors.Wrap(err, "TDlib connection failure")) } else { - for status := range session.StatusesRange() { - show, description, typ := status.Destruct() - newArgs := []args.V{ - gateway.SPImmed(false), + var probeFiredForFrom bool + probeFiredLock.Lock() + _, probeFiredForFrom = probeFired[p.From] + probeFired[p.From] = true + probeFiredLock.Unlock() + + if p.Type != "probe" || !probeFiredForFrom { + for status := range session.StatusesRange() { + show, description, typ := status.Destruct() + newArgs := []args.V{ + gateway.SPImmed(false), + } + if typ != "" { + newArgs = append(newArgs, gateway.SPType(typ)) + } + go session.ProcessStatusUpdate( + status.ID, + description, + show, + newArgs..., + ) } - if typ != "" { - newArgs = append(newArgs, gateway.SPType(typ)) - } - go session.ProcessStatusUpdate( - status.ID, - description, - show, - newArgs..., - ) + probeClientFeatures(p.From, component) + session.UpdateChatNicknames() } - probeClientFeatures(p.From, component) - session.UpdateChatNicknames() } }() }