mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[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 <tobi.smethurst@protonmail.com> Co-committed-by: tobi <tobi.smethurst@protonmail.com>
This commit is contained in:
@@ -99,56 +99,77 @@ func (s *Surface) notifyMentions(
|
||||
|
||||
for _, mention := range status.Mentions {
|
||||
// Set status on the mention (stops
|
||||
// the below function populating it).
|
||||
// notifyMention having to populate it).
|
||||
mention.Status = status
|
||||
|
||||
// Beforehand, ensure the passed mention is fully populated.
|
||||
if err := s.State.DB.PopulateMention(ctx, mention); err != nil {
|
||||
errs.Appendf("error populating mention %s: %w", mention.ID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if mention.TargetAccount.IsRemote() {
|
||||
// no need to notify
|
||||
// remote accounts.
|
||||
continue
|
||||
}
|
||||
|
||||
// Ensure thread not muted
|
||||
// by mentioned account.
|
||||
muted, err := s.State.DB.IsThreadMutedByAccount(
|
||||
ctx,
|
||||
status.ThreadID,
|
||||
mention.TargetAccountID,
|
||||
)
|
||||
if err != nil {
|
||||
errs.Appendf("error checking status thread mute %s: %w", status.ThreadID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if muted {
|
||||
// This mentioned account
|
||||
// has muted the thread.
|
||||
// Don't pester them.
|
||||
continue
|
||||
}
|
||||
|
||||
// notify mentioned
|
||||
// by status author.
|
||||
if err := s.Notify(ctx,
|
||||
gtsmodel.NotificationMention,
|
||||
mention.TargetAccount,
|
||||
mention.OriginAccount,
|
||||
mention.StatusID,
|
||||
); err != nil {
|
||||
errs.Appendf("error notifying mention target %s: %w", mention.TargetAccountID, err)
|
||||
continue
|
||||
// Do the thing.
|
||||
if err := s.notifyMention(ctx, mention); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
|
||||
return errs.Combine()
|
||||
}
|
||||
|
||||
// notifyMention notifies the target
|
||||
// of the given mention that they've
|
||||
// been mentioned in a status.
|
||||
func (s *Surface) notifyMention(
|
||||
ctx context.Context,
|
||||
mention *gtsmodel.Mention,
|
||||
) error {
|
||||
// Beforehand, ensure the passed mention is fully populated.
|
||||
if err := s.State.DB.PopulateMention(ctx, mention); err != nil {
|
||||
return gtserror.Newf(
|
||||
"error populating mention %s: %w",
|
||||
mention.ID, err,
|
||||
)
|
||||
}
|
||||
|
||||
if mention.TargetAccount.IsRemote() {
|
||||
// no need to notify
|
||||
// remote accounts.
|
||||
return nil
|
||||
}
|
||||
|
||||
// Ensure thread not muted
|
||||
// by mentioned account.
|
||||
muted, err := s.State.DB.IsThreadMutedByAccount(
|
||||
ctx,
|
||||
mention.Status.ThreadID,
|
||||
mention.TargetAccountID,
|
||||
)
|
||||
if err != nil {
|
||||
return gtserror.Newf(
|
||||
"error checking status thread mute %s: %w",
|
||||
mention.Status.ThreadID, err,
|
||||
)
|
||||
}
|
||||
|
||||
if muted {
|
||||
// This mentioned account
|
||||
// has muted the thread.
|
||||
// Don't pester them.
|
||||
return nil
|
||||
}
|
||||
|
||||
// Notify mentioned
|
||||
// by status author.
|
||||
if err := s.Notify(ctx,
|
||||
gtsmodel.NotificationMention,
|
||||
mention.TargetAccount,
|
||||
mention.OriginAccount,
|
||||
mention.StatusID,
|
||||
); err != nil {
|
||||
return gtserror.Newf(
|
||||
"error notifying mention target %s: %w",
|
||||
mention.TargetAccountID, err,
|
||||
)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// notifyFollowRequest notifies the target of the given
|
||||
// follow request that they have a new follow request.
|
||||
func (s *Surface) notifyFollowRequest(
|
||||
|
Reference in New Issue
Block a user