Skip to content

Commit

Permalink
v2: add call start/end notices
Browse files Browse the repository at this point in the history
  • Loading branch information
tulir committed Jun 28, 2024
1 parent 7b53850 commit 7196535
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 5 deletions.
2 changes: 1 addition & 1 deletion pkg/connector/chatinfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (s *SignalClient) GetUserInfo(ctx context.Context, ghost *bridgev2.Ghost) (
}

func (s *SignalClient) GetChatInfo(ctx context.Context, portal *bridgev2.Portal) (*bridgev2.PortalInfo, error) {
userID, groupID, err := s.parsePortalID(portal.ID)
userID, groupID, err := parsePortalID(portal.ID)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/connector/handlematrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import (
)

func (s *SignalClient) sendMessage(ctx context.Context, portalID networkid.PortalID, content *signalpb.Content) error {
userID, groupID, err := s.parsePortalID(portalID)
userID, groupID, err := parsePortalID(portalID)
if err != nil {
return err
}
Expand Down Expand Up @@ -277,7 +277,7 @@ func (s *SignalClient) HandleMatrixReadReceipt(ctx context.Context, receipt *bri
}

func (s *SignalClient) HandleMatrixTyping(ctx context.Context, typing *bridgev2.MatrixTyping) error {
userID, _, err := s.parsePortalID(typing.Portal.ID)
userID, _, err := parsePortalID(typing.Portal.ID)
if err != nil {
return err
}
Expand Down
40 changes: 40 additions & 0 deletions pkg/connector/handlesignal.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
"maunium.net/go/mautrix/bridgev2/networkid"
"maunium.net/go/mautrix/event"

"go.mau.fi/mautrix-signal/pkg/signalmeow/events"
signalpb "go.mau.fi/mautrix-signal/pkg/signalmeow/protobuf"
Expand All @@ -42,13 +43,52 @@ func (s *SignalClient) handleSignalEvent(rawEvt events.SignalEvent) {
case *events.ReadSelf:
s.handleSignalReadSelf(evt)
case *events.Call:
s.Main.Bridge.QueueRemoteEvent(s.UserLogin, s.wrapCallEvent(evt))
case *events.ContactList:
s.handleSignalContactList(evt)
case *events.ACIFound:
s.handleSignalACIFound(evt)
}
}

func (s *SignalClient) wrapCallEvent(evt *events.Call) bridgev2.RemoteMessage {
return &bridgev2.SimpleRemoteEvent[*events.Call]{
Type: bridgev2.RemoteEventMessage,
LogContext: func(c zerolog.Context) zerolog.Context {
c = c.Stringer("sender_id", evt.Info.Sender)
c = c.Uint64("message_ts", evt.Timestamp)
return c
},
PortalKey: s.makePortalKey(evt.Info.ChatID),
Data: evt,
CreatePortal: true,
ID: makeMessageID(evt.Info.Sender, evt.Timestamp),
Sender: s.makeEventSender(evt.Info.Sender),
Timestamp: time.UnixMilli(int64(evt.Timestamp)),
ConvertMessageFunc: convertCallEvent,
}
}

func convertCallEvent(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data *events.Call) (*bridgev2.ConvertedMessage, error) {
content := &event.MessageEventContent{
MsgType: event.MsgNotice,
}
if data.IsRinging {
content.Body = "Incoming call"
if userID, _, _ := parsePortalID(portal.ID); !userID.IsEmpty() {
content.MsgType = event.MsgText
}
} else {
content.Body = "Call ended"
}
return &bridgev2.ConvertedMessage{
Parts: []*bridgev2.ConvertedMessagePart{{
Type: event.EventMessage,
Content: content,
}},
}, nil
}

type Bv2ChatEvent struct {
*events.ChatEvent
s *SignalClient
Expand Down
2 changes: 1 addition & 1 deletion pkg/connector/id.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func parseUserIDAsServiceID(userID networkid.UserID) (libsignalgo.ServiceID, err
return libsignalgo.ServiceIDFromString(string(userID))
}

func (s *SignalClient) parsePortalID(portalID networkid.PortalID) (userID libsignalgo.ServiceID, groupID types.GroupIdentifier, err error) {
func parsePortalID(portalID networkid.PortalID) (userID libsignalgo.ServiceID, groupID types.GroupIdentifier, err error) {
if len(portalID) == 44 {
groupID = types.GroupIdentifier(portalID)
} else {
Expand Down
2 changes: 1 addition & 1 deletion pkg/connector/msgconvproxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (mpm *msgconvPortalMethods) GetClient(ctx context.Context) *signalmeow.Clie
func (mpm *msgconvPortalMethods) GetData(ctx context.Context) *legacydb.Portal {
mcCtx := ctx.Value(msgconvContextKey).(*msgconvContext)
portal := mcCtx.Portal
userID, groupID, _ := mcCtx.Client.parsePortalID(portal.ID)
userID, groupID, _ := parsePortalID(portal.ID)
chatID := string(groupID)
if chatID == "" {
chatID = userID.String()
Expand Down

0 comments on commit 7196535

Please sign in to comment.