diff options
| author | 2024-09-10 12:33:32 +0000 | |
|---|---|---|
| committer | 2024-09-10 12:33:32 +0000 | |
| commit | 3254ef1923b4c41205b91b8415a3897102f72359 (patch) | |
| tree | 25d10bcf96555a5bb9c1d68bfa0cec57444fca1a /internal/gtsmodel | |
| parent | [feature] Implement exclusive lists (#3280) (diff) | |
| download | gotosocial-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.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 { |
