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 {  | 
