diff options
author | Corey Hulen <corey@hulen.com> | 2015-12-11 06:42:48 -0800 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2015-12-11 06:42:48 -0800 |
commit | 9dc8108e2d6bc3757009bb61ca8dd8acdeb8a3ca (patch) | |
tree | 4740f01a3eb190cf6a48774cfe6026017e844f78 /api | |
parent | e0dd903b80d8561e9ab94cbea3d96180228fca9f (diff) | |
parent | 83b46880f3fb724042e713b9195857568646463c (diff) | |
download | chat-9dc8108e2d6bc3757009bb61ca8dd8acdeb8a3ca.tar.gz chat-9dc8108e2d6bc3757009bb61ca8dd8acdeb8a3ca.tar.bz2 chat-9dc8108e2d6bc3757009bb61ca8dd8acdeb8a3ca.zip |
Merge pull request #1677 from hmhealey/plt1244
PLT-1244 Changed serverside mention parsing to support usernames containing periods
Diffstat (limited to 'api')
-rw-r--r-- | api/post.go | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/api/post.go b/api/post.go index 97211b391..a102cdf4d 100644 --- a/api/post.go +++ b/api/post.go @@ -491,35 +491,52 @@ func sendNotificationsAndForget(c *Context, post *model.Post, team *model.Team, splitF := func(c rune) bool { return model.SplitRunes[c] } - splitMessage := strings.FieldsFunc(post.Message, splitF) + splitMessage := strings.Fields(post.Message) for _, word := range splitMessage { + var userIds []string // Non-case-sensitive check for regular keys - userIds1, keyMatch := keywordMap[strings.ToLower(word)] + if ids, match := keywordMap[strings.ToLower(word)]; match { + userIds = append(userIds, ids...) + } // Case-sensitive check for first name - userIds2, firstNameMatch := keywordMap[word] + if ids, match := keywordMap[word]; match { + userIds = append(userIds, ids...) + } - userIds := append(userIds1, userIds2...) + if len(userIds) == 0 { + // No matches were found with the string split just on whitespace so try further splitting + // the message on punctuation + splitWords := strings.FieldsFunc(word, splitF) - // If one of the non-case-senstive keys or the first name matches the word - // then we add en entry to the sendEmail map - if keyMatch || firstNameMatch { - for _, userId := range userIds { - if post.UserId == userId { - continue - } - sendEmail := true - if _, ok := profileMap[userId].NotifyProps["email"]; ok && profileMap[userId].NotifyProps["email"] == "false" { - sendEmail = false + for _, splitWord := range splitWords { + // Non-case-sensitive check for regular keys + if ids, match := keywordMap[strings.ToLower(splitWord)]; match { + userIds = append(userIds, ids...) } - if sendEmail && (profileMap[userId].IsAway() || profileMap[userId].IsOffline()) { - toEmailMap[userId] = true - } else { - toEmailMap[userId] = false + + // Case-sensitive check for first name + if ids, match := keywordMap[splitWord]; match { + userIds = append(userIds, ids...) } } } + + for _, userId := range userIds { + if post.UserId == userId { + continue + } + sendEmail := true + if _, ok := profileMap[userId].NotifyProps["email"]; ok && profileMap[userId].NotifyProps["email"] == "false" { + sendEmail = false + } + if sendEmail && (profileMap[userId].IsAway() || profileMap[userId].IsOffline()) { + toEmailMap[userId] = true + } else { + toEmailMap[userId] = false + } + } } for id := range toEmailMap { |