}
extractMentions () {
- if (!this.text) return []
+ let result: string[] = []
const localMention = `@(${actorNameAlphabet}+)`
const remoteMention = `${localMention}@${CONFIG.WEBSERVER.HOST}`
+ const mentionRegex = this.isOwned()
+ ? '(?:(?:' + remoteMention + ')|(?:' + localMention + '))' // Include local mentions?
+ : '(?:' + remoteMention + ')'
+
+ const firstMentionRegex = new RegExp(`^${mentionRegex} `, 'g')
+ const endMentionRegex = new RegExp(` ${mentionRegex}$`, 'g')
const remoteMentionsRegex = new RegExp(' ' + remoteMention + ' ', 'g')
- const localMentionsRegex = new RegExp(' ' + localMention + ' ', 'g')
- const firstMentionRegex = new RegExp('^(?:(?:' + remoteMention + ')|(?:' + localMention + ')) ', 'g')
- const endMentionRegex = new RegExp(' (?:(?:' + remoteMention + ')|(?:' + localMention + '))$', 'g')
- return uniq(
- [].concat(
- regexpCapture(this.text, remoteMentionsRegex)
- .map(([ , username ]) => username),
+ result = result.concat(
+ regexpCapture(this.text, firstMentionRegex)
+ .map(([ , username1, username2 ]) => username1 || username2),
- regexpCapture(this.text, localMentionsRegex)
- .map(([ , username ]) => username),
+ regexpCapture(this.text, endMentionRegex)
+ .map(([ , username1, username2 ]) => username1 || username2),
+
+ regexpCapture(this.text, remoteMentionsRegex)
+ .map(([ , username ]) => username)
+ )
- regexpCapture(this.text, firstMentionRegex)
- .map(([ , username1, username2 ]) => username1 || username2),
+ // Include local mentions
+ if (this.isOwned()) {
+ const localMentionsRegex = new RegExp(' ' + localMention + ' ', 'g')
- regexpCapture(this.text, endMentionRegex)
- .map(([ , username1, username2 ]) => username1 || username2)
+ result = result.concat(
+ regexpCapture(this.text, localMentionsRegex)
+ .map(([ , username ]) => username)
)
- )
+ }
+
+ return uniq(result)
}
toFormattedJSON () {
await removeAccountFromAccountBlocklist(servers[ 0 ].url, userAccessToken, 'root')
})
+ it('Should not send a new mention notification if the remote account mention a local account', async function () {
+ this.timeout(20000)
+
+ const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
+ const uuid = resVideo.body.video.uuid
+
+ await waitJobs(servers)
+ const resThread = await addVideoCommentThread(servers[1].url, servers[1].accessToken, uuid, '@user_1 hello')
+ const threadId = resThread.body.comment.id
+
+ await waitJobs(servers)
+ await checkCommentMention(baseParams, uuid, threadId, threadId, 'super root 2 name', 'absence')
+ })
+
it('Should send a new mention notification after local comments', async function () {
this.timeout(10000)