mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-20 10:33:41 -05:00
hicli/sync: recalculate unreads on redaction
This commit is contained in:
parent
9254461795
commit
2179fb2c18
3 changed files with 9 additions and 6 deletions
|
@ -467,15 +467,15 @@ func (e *Event) sqlVariables() []any {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Event) GetNonPushUnreadType() UnreadType {
|
func (e *Event) GetNonPushUnreadType() UnreadType {
|
||||||
if e.RelationType == event.RelReplace {
|
if e.RelationType == event.RelReplace || e.RedactedBy != "" {
|
||||||
return UnreadTypeNone
|
return UnreadTypeNone
|
||||||
}
|
}
|
||||||
switch e.Type {
|
switch e.Type {
|
||||||
case event.EventMessage.Type, event.EventSticker.Type:
|
case event.EventMessage.Type, event.EventSticker.Type, event.EventUnstablePollStart.Type:
|
||||||
return UnreadTypeNormal
|
return UnreadTypeNormal
|
||||||
case event.EventEncrypted.Type:
|
case event.EventEncrypted.Type:
|
||||||
switch e.DecryptedType {
|
switch e.DecryptedType {
|
||||||
case event.EventMessage.Type, event.EventSticker.Type:
|
case event.EventMessage.Type, event.EventSticker.Type, event.EventUnstablePollStart.Type:
|
||||||
return UnreadTypeNormal
|
return UnreadTypeNormal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ const (
|
||||||
JOIN event ON receipt.event_id=event.event_id
|
JOIN event ON receipt.event_id=event.event_id
|
||||||
WHERE receipt.room_id = $1 AND receipt.user_id = $2
|
WHERE receipt.room_id = $1 AND receipt.user_id = $2
|
||||||
)
|
)
|
||||||
)
|
) AND unread_type > 0 AND redacted_by IS NULL
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -489,7 +489,7 @@ func (h *HiClient) processStateAndTimeline(
|
||||||
decryptionQueue := make(map[id.SessionID]*database.SessionRequest)
|
decryptionQueue := make(map[id.SessionID]*database.SessionRequest)
|
||||||
allNewEvents := make([]*database.Event, 0, len(state.Events)+len(timeline.Events))
|
allNewEvents := make([]*database.Event, 0, len(state.Events)+len(timeline.Events))
|
||||||
newNotifications := make([]SyncNotification, 0)
|
newNotifications := make([]SyncNotification, 0)
|
||||||
recalculatePreviewEvent := false
|
var recalculatePreviewEvent, unreadMessagesWereMaybeRedacted bool
|
||||||
var newUnreadCounts database.UnreadCounts
|
var newUnreadCounts database.UnreadCounts
|
||||||
addOldEvent := func(rowID database.EventRowID, evtID id.EventID) (dbEvt *database.Event, err error) {
|
addOldEvent := func(rowID database.EventRowID, evtID id.EventID) (dbEvt *database.Event, err error) {
|
||||||
if rowID != 0 {
|
if rowID != 0 {
|
||||||
|
@ -513,6 +513,9 @@ func (h *HiClient) processStateAndTimeline(
|
||||||
if dbEvt == nil {
|
if dbEvt == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if dbEvt.UnreadType > 0 {
|
||||||
|
unreadMessagesWereMaybeRedacted = true
|
||||||
|
}
|
||||||
if dbEvt.RelationType == event.RelReplace || dbEvt.RelationType == event.RelAnnotation {
|
if dbEvt.RelationType == event.RelReplace || dbEvt.RelationType == event.RelAnnotation {
|
||||||
_, err = addOldEvent(0, dbEvt.RelatesTo)
|
_, err = addOldEvent(0, dbEvt.RelatesTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -677,7 +680,7 @@ func (h *HiClient) processStateAndTimeline(
|
||||||
return fmt.Errorf("failed to save receipts: %w", err)
|
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)
|
updatedRoom.UnreadCounts, err = h.DB.Room.CalculateUnreads(ctx, room.ID, h.Account.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to recalculate unread counts: %w", err)
|
return fmt.Errorf("failed to recalculate unread counts: %w", err)
|
||||||
|
|
Loading…
Add table
Reference in a new issue