fix(messages): sync preserve private dialogs after clearing history
This commit is contained in:
parent
3926db7762
commit
e22fac1c3f
19 changed files with 923 additions and 231 deletions
30
internal/rpc/convert_history_clear_test.go
Normal file
30
internal/rpc/convert_history_clear_test.go
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/iamxvbaba/td/tg"
|
||||
|
||||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
func TestTGMessageProjectsHistoryClearServiceAction(t *testing.T) {
|
||||
message := domain.NewHistoryClearMessage(
|
||||
1001,
|
||||
domain.Peer{Type: domain.PeerTypeUser, ID: 1002},
|
||||
77,
|
||||
88,
|
||||
1700000000,
|
||||
9,
|
||||
)
|
||||
got, ok := tgMessage(message).(*tg.MessageService)
|
||||
if !ok {
|
||||
t.Fatalf("message = %T, want *tg.MessageService", tgMessage(message))
|
||||
}
|
||||
if got.ID != 77 || !got.Out || got.PeerID == nil || got.FromID == nil {
|
||||
t.Fatalf("service message = %+v, want owner-local id/peer/from", got)
|
||||
}
|
||||
if _, ok := got.Action.(*tg.MessageActionHistoryClear); !ok {
|
||||
t.Fatalf("action = %T, want *tg.MessageActionHistoryClear", got.Action)
|
||||
}
|
||||
}
|
||||
|
|
@ -137,6 +137,8 @@ func tgMessageServiceAction(msg domain.Message) tg.MessageActionClass {
|
|||
return nil
|
||||
}
|
||||
switch m.ServiceAction.Kind {
|
||||
case domain.MessageServiceActionHistoryClear:
|
||||
return &tg.MessageActionHistoryClear{}
|
||||
case domain.MessageServiceActionSuggestProfilePhoto:
|
||||
if m.ServiceAction.Photo == nil || m.ServiceAction.Photo.ID == 0 {
|
||||
return &tg.MessageActionEmpty{}
|
||||
|
|
|
|||
|
|
@ -34,10 +34,11 @@ func (r *Router) onMessagesDeleteMessages(ctx context.Context, req *tg.MessagesD
|
|||
return nil, internalErr()
|
||||
}
|
||||
self := res.Self()
|
||||
if len(self.MessageIDs) == 0 || self.Event.Pts == 0 {
|
||||
pts, ptsCount := self.AffectedPts()
|
||||
if len(self.MessageIDs) == 0 || pts == 0 {
|
||||
return r.affectedMessages(ctx, authKeyID, userID)
|
||||
}
|
||||
return &tg.MessagesAffectedMessages{Pts: self.Event.Pts, PtsCount: self.Event.PtsCount}, nil
|
||||
return &tg.MessagesAffectedMessages{Pts: pts, PtsCount: ptsCount}, nil
|
||||
}
|
||||
|
||||
func (r *Router) onMessagesDeleteHistory(ctx context.Context, req *tg.MessagesDeleteHistoryRequest) (*tg.MessagesAffectedHistory, error) {
|
||||
|
|
@ -109,12 +110,13 @@ func (r *Router) onMessagesDeleteHistory(ctx context.Context, req *tg.MessagesDe
|
|||
return nil, internalErr()
|
||||
}
|
||||
self := res.Self()
|
||||
if len(self.MessageIDs) == 0 || self.Event.Pts == 0 {
|
||||
pts, ptsCount := self.AffectedPts()
|
||||
if pts == 0 {
|
||||
return r.affectedHistory(ctx, authKeyID, userID, 0)
|
||||
}
|
||||
return &tg.MessagesAffectedHistory{
|
||||
Pts: self.Event.Pts,
|
||||
PtsCount: self.Event.PtsCount,
|
||||
Pts: pts,
|
||||
PtsCount: ptsCount,
|
||||
Offset: res.Offset,
|
||||
}, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,6 +149,8 @@ func TestMessagesDeleteHistoryPassesJustClearContext(t *testing.T) {
|
|||
UserID: userID,
|
||||
MessageIDs: []int{1, 2, 3},
|
||||
Event: domain.UpdateEvent{Pts: 12, PtsCount: 3},
|
||||
Pts: 14,
|
||||
PtsCount: 5,
|
||||
}},
|
||||
}}
|
||||
r := New(Config{}, Deps{Messages: messages}, zaptest.NewLogger(t), clock.System)
|
||||
|
|
@ -171,8 +173,8 @@ func TestMessagesDeleteHistoryPassesJustClearContext(t *testing.T) {
|
|||
if !ok {
|
||||
t.Fatalf("response = %T, want *tg.MessagesAffectedHistory", enc)
|
||||
}
|
||||
if got.Pts != 12 || got.PtsCount != 3 {
|
||||
t.Fatalf("affected = %+v, want pts=12 pts_count=3", got)
|
||||
if got.Pts != 14 || got.PtsCount != 5 {
|
||||
t.Fatalf("affected = %+v, want aggregate pts=14 pts_count=5", got)
|
||||
}
|
||||
reqGot := messages.deleteHistoryReq
|
||||
if reqGot.OwnerUserID != userID || reqGot.Peer.ID != peerID || reqGot.MaxID != 15 || !reqGot.JustClear || !reqGot.Revoke || reqGot.OriginSessionID != 88 || reqGot.OriginAuthKeyID != authKeyID {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue