summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorCorey Hulen <corey@hulen.com>2015-12-11 06:42:48 -0800
committerCorey Hulen <corey@hulen.com>2015-12-11 06:42:48 -0800
commit9dc8108e2d6bc3757009bb61ca8dd8acdeb8a3ca (patch)
tree4740f01a3eb190cf6a48774cfe6026017e844f78 /api
parente0dd903b80d8561e9ab94cbea3d96180228fca9f (diff)
parent83b46880f3fb724042e713b9195857568646463c (diff)
downloadchat-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.go53
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 {