Skip to content

Commit 91b2a32

Browse files
authored
handlematrix: implement DeleteChatHandlingNetworkAPI (#851)
1 parent 9802479 commit 91b2a32

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

pkg/connector/capabilities.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (wa *WhatsAppConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit
5050
}
5151

5252
func (wa *WhatsAppConnector) GetBridgeInfoVersion() (info, caps int) {
53-
return 1, 4
53+
return 1, 5
5454
}
5555

5656
const WAMaxFileSize = 2000 * 1024 * 1024
@@ -65,7 +65,7 @@ func supportedIfFFmpeg() event.CapabilitySupportLevel {
6565
}
6666

6767
func capID() string {
68-
base := "fi.mau.whatsapp.capabilities.2025_08_25+1"
68+
base := "fi.mau.whatsapp.capabilities.2025_10_07"
6969
if ffmpeg.Supported() {
7070
return base + "+ffmpeg"
7171
}
@@ -176,6 +176,7 @@ var whatsappCaps = &event.RoomFeatures{
176176
ReadReceipts: true,
177177
TypingNotifications: true,
178178
DisappearingTimer: waDisappearingCap,
179+
DeleteChat: true,
179180
}
180181

181182
var whatsappCAGCaps *event.RoomFeatures

pkg/connector/handlematrix.go

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ var (
4545
_ bridgev2.MuteHandlingNetworkAPI = (*WhatsAppClient)(nil)
4646
_ bridgev2.TagHandlingNetworkAPI = (*WhatsAppClient)(nil)
4747
_ bridgev2.MarkedUnreadHandlingNetworkAPI = (*WhatsAppClient)(nil)
48+
_ bridgev2.DeleteChatHandlingNetworkAPI = (*WhatsAppClient)(nil)
4849
)
4950

5051
func (wa *WhatsAppClient) HandleMatrixPollStart(ctx context.Context, msg *bridgev2.MatrixPollStart) (*bridgev2.MatrixMessageResponse, error) {
@@ -595,14 +596,10 @@ func (wa *WhatsAppClient) HandleRoomTag(ctx context.Context, msg *bridgev2.Matri
595596
return wa.Client.SendAppState(ctx, appstate.BuildPin(chatJID, isFavorite))
596597
}
597598

598-
func (wa *WhatsAppClient) HandleMarkedUnread(ctx context.Context, msg *bridgev2.MatrixMarkedUnread) error {
599-
chatJID, err := waid.ParsePortalID(msg.Portal.ID)
599+
func (wa *WhatsAppClient) getLastMessageInfo(ctx context.Context, chatJID types.JID, portalKey networkid.PortalKey) (time.Time, *waCommon.MessageKey, error) {
600+
msgs, err := wa.Main.Bridge.DB.Message.GetLastNInPortal(ctx, portalKey, 1)
600601
if err != nil {
601-
return err
602-
}
603-
msgs, err := wa.Main.Bridge.DB.Message.GetLastNInPortal(ctx, msg.Portal.PortalKey, 1)
604-
if err != nil {
605-
return fmt.Errorf("failed to get last message in portal: %w", err)
602+
return time.Time{}, nil, fmt.Errorf("failed to get last message in portal: %w", err)
606603
}
607604
var lastTS time.Time
608605
var lastKey *waCommon.MessageKey
@@ -623,5 +620,32 @@ func (wa *WhatsAppClient) HandleMarkedUnread(ctx context.Context, msg *bridgev2.
623620
}
624621
}
625622
}
623+
return lastTS, lastKey, nil
624+
}
625+
626+
func (wa *WhatsAppClient) HandleMarkedUnread(ctx context.Context, msg *bridgev2.MatrixMarkedUnread) error {
627+
chatJID, err := waid.ParsePortalID(msg.Portal.ID)
628+
if err != nil {
629+
return err
630+
}
631+
lastTS, lastKey, err := wa.getLastMessageInfo(ctx, chatJID, msg.Portal.PortalKey)
632+
if err != nil {
633+
return err
634+
}
626635
return wa.Client.SendAppState(ctx, appstate.BuildMarkChatAsRead(chatJID, msg.Content.Unread, lastTS, lastKey))
627636
}
637+
638+
func (wa *WhatsAppClient) HandleMatrixDeleteChat(ctx context.Context, msg *bridgev2.MatrixDeleteChat) error {
639+
chatJID, err := waid.ParsePortalID(msg.Portal.ID)
640+
if err != nil {
641+
return err
642+
}
643+
lastTS, lastKey, err := wa.getLastMessageInfo(ctx, chatJID, msg.Portal.PortalKey)
644+
if err != nil {
645+
return err
646+
}
647+
if lastKey == nil {
648+
return fmt.Errorf("failed to delete chat: no messages found")
649+
}
650+
return wa.Client.SendAppState(ctx, appstate.BuildDeleteChat(chatJID, lastTS, lastKey))
651+
}

0 commit comments

Comments
 (0)