Skip to content

Commit a6f5e9b

Browse files
committed
handlematrix: bridge read receipts
1 parent 1f5535e commit a6f5e9b

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

pkg/connector/backfill.go

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package connector
1919
import (
2020
"context"
2121
"fmt"
22+
"slices"
2223

2324
"github.com/bluesky-social/indigo/api/chat"
2425
"github.com/rs/zerolog"
@@ -35,6 +36,7 @@ func (b *BlueskyClient) FetchMessages(ctx context.Context, params bridgev2.Fetch
3536
if err != nil {
3637
return nil, err
3738
}
39+
slices.Reverse(resp.Messages)
3840
convertedMessages := make([]*bridgev2.BackfillMessage, 0, len(resp.Messages))
3941
for _, msg := range resp.Messages {
4042
sender, sentAt, msgID, msgData, err := b.parseMessageDetails(msg.ConvoDefs_MessageView, msg.ConvoDefs_DeletedMessageView)

pkg/connector/handlebsky.go

+2
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ import (
3030
)
3131

3232
func (b *BlueskyClient) HandleEvent(ctx context.Context, evt *chat.ConvoGetLog_Output_Logs_Elem) {
33+
zerolog.Ctx(ctx).Trace().Any("evt", evt).Msg("Received event")
3334
switch {
3435
case evt.ConvoDefs_LogCreateMessage != nil:
3536
b.HandleNewMessage(ctx, evt.ConvoDefs_LogCreateMessage)
37+
default:
3638
}
3739
}
3840

pkg/connector/handlematrix.go

+21
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@ import (
2222

2323
"github.com/bluesky-social/indigo/api/chat"
2424
"github.com/bluesky-social/indigo/atproto/syntax"
25+
"github.com/rs/zerolog"
2526
"maunium.net/go/mautrix/bridgev2"
2627
"maunium.net/go/mautrix/bridgev2/database"
2728
)
2829

30+
var (
31+
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*BlueskyClient)(nil)
32+
)
33+
2934
func (b *BlueskyClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage) (message *bridgev2.MatrixMessageResponse, err error) {
3035
if !msg.Content.MsgType.IsText() {
3136
return nil, fmt.Errorf("%w %s", bridgev2.ErrUnsupportedMessageType, msg.Content.MsgType)
@@ -56,3 +61,19 @@ func (b *BlueskyClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.M
5661
StreamOrder: sentAt.UnixMilli(),
5762
}, nil
5863
}
64+
65+
func (b *BlueskyClient) HandleMatrixReadReceipt(ctx context.Context, msg *bridgev2.MatrixReadReceipt) error {
66+
var msgID *string
67+
if msg.ExactMessage != nil {
68+
_, msgIDVal := parseMessageID(msg.ExactMessage.ID)
69+
if msgIDVal != "" {
70+
msgID = &msgIDVal
71+
}
72+
}
73+
resp, err := chat.ConvoUpdateRead(ctx, b.ChatRPC, &chat.ConvoUpdateRead_Input{
74+
ConvoId: parsePortalID(msg.Portal.ID),
75+
MessageId: msgID,
76+
})
77+
zerolog.Ctx(ctx).Trace().Any("resp", resp).Err(err).Msg("Read receipt bridged")
78+
return err
79+
}

pkg/connector/ids.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ func makeMessageID(chatID networkid.PortalID, msgID string) networkid.MessageID
7070
return networkid.MessageID(fmt.Sprintf("%s:%s", chatID, msgID))
7171
}
7272

73-
//func parseMessageID(id networkid.MessageID) (networkid.PortalID, string) {
74-
// parts := strings.SplitN(string(id), ":", 2)
75-
// if len(parts) != 2 {
76-
// return "", ""
77-
// }
78-
// return networkid.PortalID(parts[0]), parts[1]
79-
//}
73+
func parseMessageID(id networkid.MessageID) (networkid.PortalID, string) {
74+
parts := strings.SplitN(string(id), ":", 2)
75+
if len(parts) != 2 {
76+
return "", ""
77+
}
78+
return networkid.PortalID(parts[0]), parts[1]
79+
}
8080

8181
func (b *BlueskyClient) makeEventSender(userDID string) (bridgev2.EventSender, error) {
8282
userID, err := makeUserIDFromString(userDID)

0 commit comments

Comments
 (0)