summaryrefslogtreecommitdiff
path: root/internal/gtsmodel
diff options
context:
space:
mode:
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 {