4545 _ bridgev2.MuteHandlingNetworkAPI = (* WhatsAppClient )(nil )
4646 _ bridgev2.TagHandlingNetworkAPI = (* WhatsAppClient )(nil )
4747 _ bridgev2.MarkedUnreadHandlingNetworkAPI = (* WhatsAppClient )(nil )
48+ _ bridgev2.DeleteChatHandlingNetworkAPI = (* WhatsAppClient )(nil )
4849)
4950
5051func (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