summaryrefslogtreecommitdiff
path: root/internal/gtsmodel/status.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-09-10 12:33:32 +0000
committerLibravatar GitHub <noreply@github.com>2024-09-10 12:33:32 +0000
commit3254ef1923b4c41205b91b8415a3897102f72359 (patch)
tree25d10bcf96555a5bb9c1d68bfa0cec57444fca1a /internal/gtsmodel/status.go
parent[feature] Implement exclusive lists (#3280) (diff)
downloadgotosocial-3254ef1923b4c41205b91b8415a3897102f72359.tar.xz
[chore] status dereferencing improvements (#3255)
* search for mentions also by username,domain in status deref, handle deleted statuses in enrichStatusSafely() * return d.enrichStatusSafely() directly
Diffstat (limited to 'internal/gtsmodel/status.go')
-rw-r--r--internal/gtsmodel/status.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/internal/gtsmodel/status.go b/internal/gtsmodel/status.go
index 9ebbc18c7..91c0ada61 100644
--- a/internal/gtsmodel/status.go
+++ b/internal/gtsmodel/status.go
@@ -184,6 +184,35 @@ func (s *Status) GetMentionByTargetURI(uri string) (*Mention, bool) {
return nil, false
}
+// GetMentionByUsernameDomain fetches the Mention associated with given
+// username and domains, typically extracted from a mention Namestring.
+func (s *Status) GetMentionByUsernameDomain(username, domain string) (*Mention, bool) {
+ for _, mention := range s.Mentions {
+
+ // We can only check if target
+ // account is set on the mention.
+ account := mention.TargetAccount
+ if account == nil {
+ continue
+ }
+
+ // Usernames must always match.
+ if account.Username != username {
+ continue
+ }
+
+ // Finally, either domains must
+ // match or an empty domain may
+ // be permitted if account local.
+ if account.Domain == domain ||
+ (domain == "" && account.IsLocal()) {
+ return mention, true
+ }
+ }
+
+ return nil, false
+}
+
// GetTagByName searches status for Tag{} with name.
func (s *Status) GetTagByName(name string) (*Tag, bool) {
for _, tag := range s.Tags {