hicli/paginate: fill prev content when resyncing state
Some checks failed
Go / Lint Go (old) (push) Has been cancelled
Go / Lint Go (latest) (push) Has been cancelled
JS / Lint JS (push) Has been cancelled

This commit is contained in:
Tulir Asokan 2025-04-13 23:08:29 +03:00
parent 0bf0a35cee
commit ef2e95a294
2 changed files with 17 additions and 7 deletions

View file

@ -78,6 +78,9 @@ func (h *HiClient) processGetRoomState(ctx context.Context, roomID id.RoomID, fe
mediaReferenceEntries := make([]*database.MediaReference, len(evts))
mediaCacheEntries := make([]*database.PlainMedia, 0, len(evts))
for i, evt := range evts {
if err := h.fillPrevContent(ctx, evt); err != nil {
return err
}
dbEvts[i] = database.MautrixToEvent(evt)
currentStateEntries[i] = &database.CurrentStateEntry{
EventType: evt.Type,

View file

@ -630,6 +630,18 @@ func (h *HiClient) postDecryptProcess(ctx context.Context, llSummary *mautrix.La
return
}
func (h *HiClient) fillPrevContent(ctx context.Context, evt *event.Event) error {
if evt.StateKey != nil && evt.Unsigned.PrevContent == nil && evt.Unsigned.ReplacesState != "" {
replacesState, err := h.DB.Event.GetByID(ctx, evt.Unsigned.ReplacesState)
if err != nil {
return fmt.Errorf("failed to get prev content for %s from %s: %w", evt.ID, evt.Unsigned.ReplacesState, err)
} else if replacesState != nil {
evt.Unsigned.PrevContent = &event.Content{VeryRaw: replacesState.Content}
}
}
return nil
}
func (h *HiClient) processEvent(
ctx context.Context,
evt *event.Event,
@ -645,13 +657,8 @@ func (h *HiClient) processEvent(
return dbEvt, nil
}
}
if evt.StateKey != nil && evt.Unsigned.PrevContent == nil && evt.Unsigned.ReplacesState != "" {
replacesState, err := h.DB.Event.GetByID(ctx, evt.Unsigned.ReplacesState)
if err != nil {
return nil, fmt.Errorf("failed to get prev content for %s from %s: %w", evt.ID, evt.Unsigned.ReplacesState, err)
} else if replacesState != nil {
evt.Unsigned.PrevContent = &event.Content{VeryRaw: replacesState.Content}
}
if err := h.fillPrevContent(ctx, evt); err != nil {
return nil, err
}
dbEvt := database.MautrixToEvent(evt)
contentWithoutFallback := removeReplyFallback(evt)