@@ -596,14 +596,10 @@ func (wa *WhatsAppClient) HandleRoomTag(ctx context.Context, msg *bridgev2.Matri
596596 return wa .Client .SendAppState (ctx , appstate .BuildPin (chatJID , isFavorite ))
597597}
598598
599- func (wa * WhatsAppClient ) HandleMarkedUnread (ctx context.Context , msg * bridgev2.MatrixMarkedUnread ) error {
600- chatJID , err := waid .ParsePortalID (msg .Portal .ID )
601- if err != nil {
602- return err
603- }
604- msgs , err := wa .Main .Bridge .DB .Message .GetLastNInPortal (ctx , msg .Portal .PortalKey , 1 )
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 )
605601 if err != nil {
606- 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 )
607603 }
608604 var lastTS time.Time
609605 var lastKey * waCommon.MessageKey
@@ -624,37 +620,32 @@ func (wa *WhatsAppClient) HandleMarkedUnread(ctx context.Context, msg *bridgev2.
624620 }
625621 }
626622 }
627- return wa . Client . SendAppState ( ctx , appstate . BuildMarkChatAsRead ( chatJID , msg . Content . Unread , lastTS , lastKey ))
623+ return lastTS , lastKey , nil
628624}
629625
630- func (wa * WhatsAppClient ) HandleMatrixDeleteChat (ctx context.Context , msg * bridgev2.MatrixDeleteChat ) error {
626+ func (wa * WhatsAppClient ) HandleMarkedUnread (ctx context.Context , msg * bridgev2.MatrixMarkedUnread ) error {
631627 chatJID , err := waid .ParsePortalID (msg .Portal .ID )
632628 if err != nil {
633629 return err
634630 }
635- messages , err := wa .Main . Bridge . DB . Message . GetLastNInPortal (ctx , msg .Portal .PortalKey , 1 )
631+ lastTS , lastKey , err := wa .getLastMessageInfo (ctx , chatJID , msg .Portal .PortalKey )
636632 if err != nil {
637- return fmt .Errorf ("failed to get last message in portal: %w" , err )
638- }
639- if len (messages ) < 1 {
640- return fmt .Errorf ("failed to delete chat: no messages found" )
633+ return err
641634 }
642- message := messages [0 ]
643- lastTS := messages [0 ].Timestamp
644- parsed , err := waid .ParseMessageID (message .ID )
635+ return wa .Client .SendAppState (ctx , appstate .BuildMarkChatAsRead (chatJID , msg .Content .Unread , lastTS , lastKey ))
636+ }
637+
638+ func (wa * WhatsAppClient ) HandleMatrixDeleteChat (ctx context.Context , msg * bridgev2.MatrixDeleteChat ) error {
639+ chatJID , err := waid .ParsePortalID (msg .Portal .ID )
645640 if err != nil {
646- return fmt . Errorf ( "failed to parse last message ID: %w" , err )
641+ return err
647642 }
648- fromMe := parsed .Sender .ToNonAD () == wa .JID .ToNonAD () || parsed .Sender .ToNonAD () == wa .GetStore ().GetLID ().ToNonAD ()
649- var participant * string
650- if chatJID .Server == types .GroupServer {
651- participant = ptr .Ptr (parsed .Sender .String ())
643+ lastTS , lastKey , err := wa .getLastMessageInfo (ctx , chatJID , msg .Portal .PortalKey )
644+ if err != nil {
645+ return err
652646 }
653- lastKey := & waCommon.MessageKey {
654- RemoteJID : ptr .Ptr (chatJID .String ()),
655- FromMe : & fromMe ,
656- ID : & parsed .ID ,
657- Participant : participant ,
647+ if lastKey == nil {
648+ return fmt .Errorf ("failed to delete chat: no messages found" )
658649 }
659650 return wa .Client .SendAppState (ctx , appstate .BuildDeleteChat (chatJID , lastTS , lastKey ))
660651}
0 commit comments