diff options
Diffstat (limited to 'internal/gtsmodel')
-rw-r--r-- | internal/gtsmodel/mention.go | 3 | ||||
-rw-r--r-- | internal/gtsmodel/status.go | 29 |
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 { |