From f3f185435916165a6dd72f3a1bd67e370a2a783d Mon Sep 17 00:00:00 2001 From: tobi Date: Sun, 4 May 2025 09:45:10 +0000 Subject: [bugfix] Fix no notification if mention edited into status (#4102) This pull request adds mention notifications if a mention was edited into a status after its initial publication. Closes https://codeberg.org/superseriousbusiness/gotosocial/issues/3869 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4102 Co-authored-by: tobi Co-committed-by: tobi --- internal/db/bundb/mention.go | 33 +++++++++++++++++++++++++++++++++ internal/db/mention.go | 3 +++ 2 files changed, 36 insertions(+) (limited to 'internal/db') diff --git a/internal/db/bundb/mention.go b/internal/db/bundb/mention.go index e70541ede..e3c36bf0c 100644 --- a/internal/db/bundb/mention.go +++ b/internal/db/bundb/mention.go @@ -64,6 +64,39 @@ func (m *mentionDB) GetMention(ctx context.Context, id string) (*gtsmodel.Mentio return mention, nil } +func (m *mentionDB) GetMentionByTargetAcctStatus( + ctx context.Context, + targetAcctID string, + statusID string, +) (*gtsmodel.Mention, error) { + // Get the status first. + status, err := m.state.DB.GetStatusByID(ctx, statusID) + if err != nil { + return nil, err + } + + // Populate mentions if necessary. + if !status.MentionsPopulated() { + status.Mentions, err = m.GetMentions(ctx, status.MentionIDs) + if err != nil { + return nil, err + } + } + + // See if the mention is there. + mention, ok := status.GetMentionByTargetID(targetAcctID) + if !ok { + return nil, db.ErrNoEntries + } + + // Further populate the mention fields where applicable. + if err := m.PopulateMention(ctx, mention); err != nil { + return nil, err + } + + return mention, nil +} + func (m *mentionDB) GetMentions(ctx context.Context, ids []string) ([]*gtsmodel.Mention, error) { // Load all mention IDs via cache loader callbacks. mentions, err := m.state.Caches.DB.Mention.LoadIDs("ID", diff --git a/internal/db/mention.go b/internal/db/mention.go index c76b3bc6b..b53c45b8f 100644 --- a/internal/db/mention.go +++ b/internal/db/mention.go @@ -28,6 +28,9 @@ type Mention interface { // GetMention gets a single mention by ID GetMention(ctx context.Context, id string) (*gtsmodel.Mention, error) + // GetMentionByTargetAcctStatus returns a mention by targetAccountID and statusID. + GetMentionByTargetAcctStatus(ctx context.Context, targetAcctID string, statusID string) (*gtsmodel.Mention, error) + // GetMentions gets multiple mentions. GetMentions(ctx context.Context, ids []string) ([]*gtsmodel.Mention, error) -- cgit v1.2.3