1
0
Fork 0
forked from Mirrors/gomuks

hicli/sync: recalculate unreads on redaction

This commit is contained in:
Tulir Asokan 2024-10-18 00:57:27 +03:00
parent 9254461795
commit 2179fb2c18
3 changed files with 9 additions and 6 deletions

View file

@ -467,15 +467,15 @@ func (e *Event) sqlVariables() []any {
}
func (e *Event) GetNonPushUnreadType() UnreadType {
if e.RelationType == event.RelReplace {
if e.RelationType == event.RelReplace || e.RedactedBy != "" {
return UnreadTypeNone
}
switch e.Type {
case event.EventMessage.Type, event.EventSticker.Type:
case event.EventMessage.Type, event.EventSticker.Type, event.EventUnstablePollStart.Type:
return UnreadTypeNormal
case event.EventEncrypted.Type:
switch e.DecryptedType {
case event.EventMessage.Type, event.EventSticker.Type:
case event.EventMessage.Type, event.EventSticker.Type, event.EventUnstablePollStart.Type:
return UnreadTypeNormal
}
}

View file

@ -31,7 +31,7 @@ const (
JOIN event ON receipt.event_id=event.event_id
WHERE receipt.room_id = $1 AND receipt.user_id = $2
)
)
) AND unread_type > 0 AND redacted_by IS NULL
`
)

View file

@ -489,7 +489,7 @@ func (h *HiClient) processStateAndTimeline(
decryptionQueue := make(map[id.SessionID]*database.SessionRequest)
allNewEvents := make([]*database.Event, 0, len(state.Events)+len(timeline.Events))
newNotifications := make([]SyncNotification, 0)
recalculatePreviewEvent := false
var recalculatePreviewEvent, unreadMessagesWereMaybeRedacted bool
var newUnreadCounts database.UnreadCounts
addOldEvent := func(rowID database.EventRowID, evtID id.EventID) (dbEvt *database.Event, err error) {
if rowID != 0 {
@ -513,6 +513,9 @@ func (h *HiClient) processStateAndTimeline(
if dbEvt == nil {
return nil
}
if dbEvt.UnreadType > 0 {
unreadMessagesWereMaybeRedacted = true
}
if dbEvt.RelationType == event.RelReplace || dbEvt.RelationType == event.RelAnnotation {
_, err = addOldEvent(0, dbEvt.RelatesTo)
if err != nil {
@ -677,7 +680,7 @@ func (h *HiClient) processStateAndTimeline(
return fmt.Errorf("failed to save receipts: %w", err)
}
}
if len(newOwnReceipts) > 0 && newUnreadCounts.IsZero() {
if !room.UnreadCounts.IsZero() && ((len(newOwnReceipts) > 0 && newUnreadCounts.IsZero()) || unreadMessagesWereMaybeRedacted) {
updatedRoom.UnreadCounts, err = h.DB.Room.CalculateUnreads(ctx, room.ID, h.Account.UserID)
if err != nil {
return fmt.Errorf("failed to recalculate unread counts: %w", err)