Skip to content

Commit

Permalink
connector: handle decorated messages
Browse files Browse the repository at this point in the history
Signed-off-by: Sumner Evans <[email protected]>
  • Loading branch information
sumnerevans committed Feb 7, 2025
1 parent f1ed2ff commit b9ce3fb
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 5 deletions.
19 changes: 19 additions & 0 deletions pkg/connector/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"maunium.net/go/mautrix/bridge/status"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/networkid"
"maunium.net/go/mautrix/bridgev2/simplevent"
)

type LinkedInClient struct {
Expand Down Expand Up @@ -97,6 +98,24 @@ func (l *LinkedInClient) onRealtimeConnectError(ctx context.Context, err error)
}

func (l *LinkedInClient) onDecoratedMessage(ctx context.Context, msg *types2.DecoratedMessageRealtime) {
l.main.Bridge.QueueRemoteEvent(l.userLogin, &simplevent.Message[*types2.DecoratedMessageRealtime]{
EventMeta: simplevent.EventMeta{
Type: bridgev2.RemoteEventMessage,
LogContext: func(c zerolog.Context) zerolog.Context {
return c.
Stringer("backend_urn", msg.Result.BackendURN).
Stringer("sender", msg.Result.Sender.BackendURN)
},
PortalKey: l.makePortalKey(msg.Result.BackendURN),
CreatePortal: true,
Sender: l.makeSender(msg.Result.Sender),
Timestamp: msg.Result.DeliveredAt.Time,
},
ID: networkid.MessageID(msg.Result.BackendURN.ID()),
Data: msg,
ConvertMessageFunc: l.convertToMatrix,
})

// msg.Result.Sender.EntityUrn
// sender := message.Sender
// isFromMe := sender.HostIdentityUrn == string(lc.userLogin.ID)
Expand Down
23 changes: 23 additions & 0 deletions pkg/connector/ids.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package connector

import (
"go.mau.fi/mautrix-linkedin/pkg/linkedingo2/types2"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/networkid"
)

func (l *LinkedInClient) makePortalKey(backendURN types2.URN) (key networkid.PortalKey) {
key.ID = networkid.PortalID(backendURN.ID())
if l.main.Bridge.Config.SplitPortals {
key.Receiver = l.userLogin.ID
}
return key
}

func (l *LinkedInClient) makeSender(participant types2.MessagingParticipant) (sender bridgev2.EventSender) {
id := participant.BackendURN.ID()
sender.IsFromMe = id == string(l.userID)
sender.Sender = networkid.UserID(id)
sender.SenderLogin = networkid.UserLoginID(id)
return
}
2 changes: 1 addition & 1 deletion pkg/connector/logincookie.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (c *CookieLogin) SubmitCookies(ctx context.Context, cookies map[string]stri
ul, err := c.user.NewLogin(
ctx,
&database.UserLogin{
ID: networkid.UserLoginID(profile.MiniProfile.EntityURN.ID()),
ID: networkid.UserLoginID(profile.MiniProfile.ObjectURN.ID()),
Metadata: &UserLoginMetadata{
Cookies: jar,
},
Expand Down
23 changes: 23 additions & 0 deletions pkg/connector/tomatrix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package connector

import (
"context"

"go.mau.fi/mautrix-linkedin/pkg/linkedingo2/types2"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/event"
)

func (c *LinkedInClient) convertToMatrix(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, msg *types2.DecoratedMessageRealtime) (cm *bridgev2.ConvertedMessage, err error) {
return &bridgev2.ConvertedMessage{
Parts: []*bridgev2.ConvertedMessagePart{
{
Type: event.EventMessage,
Content: &event.MessageEventContent{
MsgType: event.MsgText,
Body: msg.Result.Body.Text,
},
},
},
}, nil
}
7 changes: 3 additions & 4 deletions pkg/linkedingo2/types2/realtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ type DecoratedEventData struct {

// Conversation represents a com.linkedin.messenger.Conversation object
type Conversation struct {
BackendURN URN `json:"backendUrn,omitempty"`
EntityURN URN `json:"entityUrn,omitempty"`
BackendURN URN `json:"backendUrn,omitempty"`
// EntityURN URN `json:"entityUrn,omitempty"`
ConversationParticipants []MessagingParticipant `json:"conversationParticipants,omitempty"`
}

Expand Down Expand Up @@ -74,9 +74,8 @@ type ParticipantType struct {
// MessagingParticipant represents a
// com.linkedin.messenger.MessagingParticipant object.
type MessagingParticipant struct {
// TODO: should we use backendUrn instead of EntityURN?
EntityURN URN `json:"entityUrn,omitempty"`
ParticipantType ParticipantType `json:"participantType,omitempty"`
BackendURN URN `json:"backendUrn,omitempty"`
}

// Message represents a com.linkedin.messenger.Message object.
Expand Down
1 change: 1 addition & 0 deletions pkg/linkedingo2/types2/urn.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ type URN struct {

var _ json.Marshaler = (*URN)(nil)
var _ json.Unmarshaler = (*URN)(nil)
var _ fmt.Stringer = (*URN)(nil)

func (u URN) ID() string {
if len(u.idParts) != 1 {
Expand Down

0 comments on commit b9ce3fb

Please sign in to comment.