summaryrefslogtreecommitdiff
path: root/internal/gtsmodel
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
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')
-rw-r--r--internal/gtsmodel/mention.go3
-rw-r--r--internal/gtsmodel/status.go29
2 files changed, 31 insertions, 1 deletions
diff --git a/internal/gtsmodel/mention.go b/internal/gtsmodel/mention.go
index 7d5516a9f..24e83f904 100644
--- a/internal/gtsmodel/mention.go
+++ b/internal/gtsmodel/mention.go
@@ -49,15 +49,16 @@ type Mention struct {
//
// This will not be put in the database, it's just for convenience.
NameString string `bun:"-"`
+
// TargetAccountURI is the AP ID (uri) of the user mentioned.
//
// This will not be put in the database, it's just for convenience.
TargetAccountURI string `bun:"-"`
+
// TargetAccountURL is the web url of the user mentioned.
//
// This will not be put in the database, it's just for convenience.
TargetAccountURL string `bun:"-"`
- // A pointer to the gtsmodel account of the mentioned account.
}
// ParseMentionFunc describes a function that takes a lowercase account namestring
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 {