Skip to content
Snippets Groups Projects
Unverified Commit 0a6bfef5 authored by Sumner Evans's avatar Sumner Evans
Browse files

connector: implement sending typing notifications

parent 454c8000
No related branches found
No related tags found
No related merge requests found
Pipeline #16506 passed
......@@ -53,7 +53,7 @@ var (
_ bridgev2.ReactionHandlingNetworkAPI = (*LinkedInClient)(nil)
_ bridgev2.RedactionHandlingNetworkAPI = (*LinkedInClient)(nil)
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*LinkedInClient)(nil)
// _ bridgev2.TypingHandlingNetworkAPI = (*LinkedInClient)(nil)
_ bridgev2.TypingHandlingNetworkAPI = (*LinkedInClient)(nil)
// _ bridgev2.BackfillingNetworkAPI = (*LinkedInClient)(nil)
// _ bridgev2.BackfillingNetworkAPIWithLimits = (*LinkedInClient)(nil)
// _ bridgev2.IdentifierResolvingNetworkAPI = (*LinkedInClient)(nil)
......
......@@ -121,3 +121,10 @@ func (l *LinkedInClient) HandleMatrixReadReceipt(ctx context.Context, msg *bridg
_, err := l.client.MarkConversationRead(ctx, types.NewURN(msg.Portal.ID))
return err
}
func (l *LinkedInClient) HandleMatrixTyping(ctx context.Context, msg *bridgev2.MatrixTyping) error {
if msg.IsTyping && msg.Type == bridgev2.TypingTypeText {
return l.client.StartTyping(ctx, types.NewURN(msg.Portal.ID))
}
return nil
}
......@@ -22,11 +22,11 @@ func (c *Client) doReactAction(ctx context.Context, messageURN types.URN, emoji,
WithContentType(contentTypePlaintextUTF8).
WithCSRF().
WithHeader("accept", contentTypeJSON).
WithXLIHeaders().
WithJSONPayload(map[string]any{
"messageUrn": messageURN,
"emoji": emoji,
}).
WithXLIHeaders().
Do(ctx)
if err != nil {
return err
......
......@@ -41,12 +41,12 @@ func (c *Client) doMarkConversationRead(ctx context.Context, read bool, convURNs
resp, err := c.newAuthedRequest(http.MethodPost, linkedInMessagingDashMessengerConversationsURL).
WithRawQuery(fmt.Sprintf("ids=List(%s)", strings.Join(conversationList, ","))). // Using raw query here because escaping the outer ()s makes this break
WithJSONPayload(PatchEntitiesPayload{Entities: entities}).
WithContentType(contentTypePlaintextUTF8).
WithHeader("accept", contentTypeJSON).
WithHeader("origin", "https://www.linkedin.com").
WithCSRF().
WithXLIHeaders().
WithJSONPayload(PatchEntitiesPayload{Entities: entities}).
Do(ctx)
if err != nil {
return nil, fmt.Errorf("failed to mark conversation read: %w", err)
......
package linkedingo
import (
"context"
"fmt"
"net/http"
"go.mau.fi/mautrix-linkedin/pkg/linkedingo/types"
)
func (c *Client) StartTyping(ctx context.Context, conversationURN types.URN) error {
resp, err := c.newAuthedRequest(http.MethodPost, linkedInMessagingDashMessengerConversationsURL).
WithQueryParam("action", "typing").
WithContentType(contentTypePlaintextUTF8).
WithCSRF().
WithHeader("accept", contentTypeJSON).
WithXLIHeaders().
WithJSONPayload(map[string]any{
"conversationUrn": conversationURN,
}).
Do(ctx)
if err != nil {
return err
}
if resp.StatusCode != http.StatusAccepted {
return fmt.Errorf("failed to start typing on %s (statusCode=%d)", conversationURN, resp.StatusCode)
}
return nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment