[feature] Dereference remote mentions when the account is not already known (#442)

* remove mention util function from db

* add ParseMentionFunc to gtsmodel

* add parseMentionFunc to processor

* refactor search to simplify it a bit

* add parseMentionFunc to account

* add parseMentionFunc to status

* some renaming for clarity

* test dereference of unknown mentioned account
This commit is contained in:
tobi 2022-03-29 11:54:56 +02:00 committed by GitHub
commit 37d310f981
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 420 additions and 183 deletions

View file

@ -25,13 +25,11 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/regexes"
)
// DeriveMentionsFromText takes a plaintext (ie., not html-formatted) text,
// and applies a regex to it to return a deduplicated list of accounts
// mentioned in that text.
//
// It will look for fully-qualified account names in the form "@user@example.org".
// or the form "@username" for local users.
func DeriveMentionsFromText(text string) []string {
// DeriveMentionNamesFromText takes a plaintext (ie., not html-formatted) text,
// and applies a regex to it to return a deduplicated list of account names
// mentioned in that text, in the format "@user@example.org" or "@username" for
// local users.
func DeriveMentionNamesFromText(text string) []string {
mentionedAccounts := []string{}
for _, m := range regexes.MentionFinder.FindAllStringSubmatch(text, -1) {
mentionedAccounts = append(mentionedAccounts, m[1])

View file

@ -37,7 +37,7 @@ https://localhost:8080/@the_mighty_zork/statuses/01FGVP55XMF2K6316MQRX6PFG1
that link shouldn't come out formatted as a mention!`
menchies := util.DeriveMentionsFromText(statusText)
menchies := util.DeriveMentionNamesFromText(statusText)
suite.Empty(menchies)
}
@ -56,7 +56,7 @@ func (suite *StatusTestSuite) TestDeriveMentionsOK() {
`
menchies := util.DeriveMentionsFromText(statusText)
menchies := util.DeriveMentionNamesFromText(statusText)
assert.Len(suite.T(), menchies, 6)
assert.Equal(suite.T(), "@dumpsterqueer@example.org", menchies[0])
assert.Equal(suite.T(), "@someone_else@testing.best-horse.com", menchies[1])
@ -68,7 +68,7 @@ func (suite *StatusTestSuite) TestDeriveMentionsOK() {
func (suite *StatusTestSuite) TestDeriveMentionsEmpty() {
statusText := ``
menchies := util.DeriveMentionsFromText(statusText)
menchies := util.DeriveMentionNamesFromText(statusText)
assert.Len(suite.T(), menchies, 0)
}
@ -126,7 +126,7 @@ func (suite *StatusTestSuite) TestDeriveMultiple() {
Text`
ms := util.DeriveMentionsFromText(statusText)
ms := util.DeriveMentionNamesFromText(statusText)
hs := util.DeriveHashtagsFromText(statusText)
es := util.DeriveEmojisFromText(statusText)