Skip to content

Commit

Permalink
handlematrix: bridge read receipts
Browse files Browse the repository at this point in the history
  • Loading branch information
tulir committed Nov 26, 2024
1 parent 1f5535e commit a6f5e9b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 7 deletions.
2 changes: 2 additions & 0 deletions pkg/connector/backfill.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package connector
import (
"context"
"fmt"
"slices"

"github.com/bluesky-social/indigo/api/chat"
"github.com/rs/zerolog"
Expand All @@ -35,6 +36,7 @@ func (b *BlueskyClient) FetchMessages(ctx context.Context, params bridgev2.Fetch
if err != nil {
return nil, err
}
slices.Reverse(resp.Messages)
convertedMessages := make([]*bridgev2.BackfillMessage, 0, len(resp.Messages))
for _, msg := range resp.Messages {
sender, sentAt, msgID, msgData, err := b.parseMessageDetails(msg.ConvoDefs_MessageView, msg.ConvoDefs_DeletedMessageView)
Expand Down
2 changes: 2 additions & 0 deletions pkg/connector/handlebsky.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ import (
)

func (b *BlueskyClient) HandleEvent(ctx context.Context, evt *chat.ConvoGetLog_Output_Logs_Elem) {
zerolog.Ctx(ctx).Trace().Any("evt", evt).Msg("Received event")
switch {
case evt.ConvoDefs_LogCreateMessage != nil:
b.HandleNewMessage(ctx, evt.ConvoDefs_LogCreateMessage)
default:
}
}

Expand Down
21 changes: 21 additions & 0 deletions pkg/connector/handlematrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,15 @@ import (

"github.com/bluesky-social/indigo/api/chat"
"github.com/bluesky-social/indigo/atproto/syntax"
"github.com/rs/zerolog"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
)

var (
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*BlueskyClient)(nil)
)

func (b *BlueskyClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage) (message *bridgev2.MatrixMessageResponse, err error) {
if !msg.Content.MsgType.IsText() {
return nil, fmt.Errorf("%w %s", bridgev2.ErrUnsupportedMessageType, msg.Content.MsgType)
Expand Down Expand Up @@ -56,3 +61,19 @@ func (b *BlueskyClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.M
StreamOrder: sentAt.UnixMilli(),
}, nil
}

func (b *BlueskyClient) HandleMatrixReadReceipt(ctx context.Context, msg *bridgev2.MatrixReadReceipt) error {
var msgID *string
if msg.ExactMessage != nil {
_, msgIDVal := parseMessageID(msg.ExactMessage.ID)
if msgIDVal != "" {
msgID = &msgIDVal
}
}
resp, err := chat.ConvoUpdateRead(ctx, b.ChatRPC, &chat.ConvoUpdateRead_Input{
ConvoId: parsePortalID(msg.Portal.ID),
MessageId: msgID,
})
zerolog.Ctx(ctx).Trace().Any("resp", resp).Err(err).Msg("Read receipt bridged")
return err
}
14 changes: 7 additions & 7 deletions pkg/connector/ids.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,13 @@ func makeMessageID(chatID networkid.PortalID, msgID string) networkid.MessageID
return networkid.MessageID(fmt.Sprintf("%s:%s", chatID, msgID))
}

//func parseMessageID(id networkid.MessageID) (networkid.PortalID, string) {
// parts := strings.SplitN(string(id), ":", 2)
// if len(parts) != 2 {
// return "", ""
// }
// return networkid.PortalID(parts[0]), parts[1]
//}
func parseMessageID(id networkid.MessageID) (networkid.PortalID, string) {
parts := strings.SplitN(string(id), ":", 2)
if len(parts) != 2 {
return "", ""
}
return networkid.PortalID(parts[0]), parts[1]
}

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

0 comments on commit a6f5e9b

Please sign in to comment.