From 2337b9ce3a871572a4a3bfa6cc5f428c0b9cf5af Mon Sep 17 00:00:00 2001 From: highesttt Date: Wed, 16 Sep 2026 14:46:27 -0400 Subject: [PATCH] chatsync: fixed accepted chats returning to requests --- pkg/connector/chatsync.go | 24 ++++++++++++++++++------ pkg/connector/chatsync_test.go | 8 ++++---- pkg/connector/handletwit.go | 1 + 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/pkg/connector/chatsync.go b/pkg/connector/chatsync.go index 599147a..e151a12 100644 --- a/pkg/connector/chatsync.go +++ b/pkg/connector/chatsync.go @@ -89,14 +89,23 @@ func xchatInboxItemTrust(item *response.XChatInboxItem) *bool { } func applyXChatTrustToChatInfo(info *bridgev2.ChatInfo, trusted bool) { - info.MessageRequest = ptr.Ptr(!trusted) info.ExtraUpdates = bridgev2.MergeExtraUpdaters(info.ExtraUpdates, func(_ context.Context, portal *bridgev2.Portal) bool { meta, ok := portal.Metadata.(*PortalMetadata) - if !ok || meta == nil || (meta.XChatTrusted != nil && *meta.XChatTrusted == trusted) { + if !ok || meta == nil { return false } - meta.XChatTrusted = ptr.Ptr(trusted) - return true + effectiveTrusted := trusted + if meta.XChatTrusted != nil && *meta.XChatTrusted { + effectiveTrusted = true + } + messageRequest := !effectiveTrusted + changed := portal.MessageRequest != messageRequest + portal.MessageRequest = messageRequest + if meta.XChatTrusted == nil || *meta.XChatTrusted != effectiveTrusted { + meta.XChatTrusted = ptr.Ptr(effectiveTrusted) + changed = true + } + return changed }) } @@ -120,8 +129,11 @@ func (tc *TwitterClient) syncXChatTrust( return false } meta, _ := portal.Metadata.(*PortalMetadata) - messageRequest := !*trusted - if meta != nil && meta.XChatTrusted != nil && *meta.XChatTrusted == *trusted && portal.MessageRequest == messageRequest { + effectiveTrusted := *trusted + if meta != nil && meta.XChatTrusted != nil && *meta.XChatTrusted { + effectiveTrusted = true + } + if meta != nil && meta.XChatTrusted != nil && *meta.XChatTrusted == effectiveTrusted && portal.MessageRequest == !effectiveTrusted { return true } diff --git a/pkg/connector/chatsync_test.go b/pkg/connector/chatsync_test.go index 078d81e..60825ab 100644 --- a/pkg/connector/chatsync_test.go +++ b/pkg/connector/chatsync_test.go @@ -38,13 +38,13 @@ func TestXChatItemTrustControlsMessageRequest(t *testing.T) { } return } - if info.MessageRequest == nil || *info.MessageRequest == *trusted { - t.Fatalf("MessageRequest = %v", info.MessageRequest) + if info.MessageRequest != nil || info.ExtraUpdates == nil { + t.Fatalf("trust update was not deferred: MessageRequest = %v", info.MessageRequest) } meta := &PortalMetadata{} portal := &bridgev2.Portal{Portal: &database.Portal{Metadata: meta}} - if !info.ExtraUpdates(t.Context(), portal) || meta.XChatTrusted == nil || *meta.XChatTrusted != *trusted { - t.Fatalf("XChatTrusted = %v", meta.XChatTrusted) + if !info.ExtraUpdates(t.Context(), portal) || meta.XChatTrusted == nil || *meta.XChatTrusted != *trusted || portal.MessageRequest == *trusted { + t.Fatalf("XChatTrusted = %v, MessageRequest = %t", meta.XChatTrusted, portal.MessageRequest) } } } diff --git a/pkg/connector/handletwit.go b/pkg/connector/handletwit.go index 834a740..bfc5434 100644 --- a/pkg/connector/handletwit.go +++ b/pkg/connector/handletwit.go @@ -768,6 +768,7 @@ func (tc *TwitterClient) HandlePollingEvent(evt types.TwitterEvent, inbox *respo if chatInfo == nil { return false } + applyXChatTrustToChatInfo(chatInfo, true) return tc.userLogin.QueueRemoteEvent(&simplevent.ChatResync{ EventMeta: simplevent.EventMeta{