Skip to content

Commit

Permalink
Have every option handled in ShouldSendPushNotification
Browse files Browse the repository at this point in the history
  • Loading branch information
enahum committed Mar 2, 2017
1 parent aa7b5f7 commit 9c80b8e
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 31 deletions.
49 changes: 47 additions & 2 deletions app/notification.go
Expand Up @@ -258,7 +258,7 @@ func SendNotifications(post *model.Post, team *model.Team, channel *model.Channe
status = &model.Status{UserId: id, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
}

if DoesStatusAllowPushNotification(profileMap[id], channelMemberNotifyPropsMap[id], true, status, post.ChannelId) {
if ShouldSendPushNotification(profileMap[id], channelMemberNotifyPropsMap[id], true, status, post) {
sendPushNotification(post, profileMap[id], channel, senderName[id], true)
}
}
Expand All @@ -271,7 +271,7 @@ func SendNotifications(post *model.Post, team *model.Team, channel *model.Channe
status = &model.Status{UserId: id, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
}

if DoesStatusAllowPushNotification(profileMap[id], channelMemberNotifyPropsMap[id], false, status, post.ChannelId) {
if ShouldSendPushNotification(profileMap[id], channelMemberNotifyPropsMap[id], false, status, post) {
sendPushNotification(post, profileMap[id], channel, senderName[id], false)
}
}
Expand Down Expand Up @@ -735,3 +735,48 @@ func GetMentionKeywordsInChannel(profiles map[string]*model.User) map[string][]s

return keywords
}

func ShouldSendPushNotification(user *model.User, channelNotifyProps model.StringMap, wasMentioned bool, status *model.Status, post *model.Post) bool {
return DoesNotifyPropsAllowPushNotification(user, channelNotifyProps, post, wasMentioned) &&
DoesStatusAllowPushNotification(user.NotifyProps, status, post.ChannelId)
}

func DoesNotifyPropsAllowPushNotification(user *model.User, channelNotifyProps model.StringMap, post *model.Post, wasMentioned bool) bool {
userNotifyProps := user.NotifyProps
userNotify := userNotifyProps[model.PUSH_NOTIFY_PROP]
channelNotify, ok := channelNotifyProps[model.PUSH_NOTIFY_PROP]

if post.IsSystemMessage() {
return false
}

if channelNotify == model.USER_NOTIFY_NONE {
return false
} else if (userNotify == model.USER_NOTIFY_MENTION || channelNotify == model.CHANNEL_NOTIFY_MENTION) && !wasMentioned {
return false
}

if (userNotify == model.USER_NOTIFY_ALL || channelNotify == model.CHANNEL_NOTIFY_ALL) &&
(post.UserId != user.Id || post.Props["from_webhook"] == "true") {
return true
}

if userNotify == model.USER_NOTIFY_NONE &&
(!ok || channelNotify == model.CHANNEL_NOTIFY_DEFAULT) {
return false
}

return true
}

func DoesStatusAllowPushNotification(userNotifyProps model.StringMap, status *model.Status, channelId string) bool {
if pushStatus, ok := userNotifyProps["push_status"]; (pushStatus == model.STATUS_ONLINE || !ok) && (status.ActiveChannel != channelId || model.GetMillis()-status.LastActivityAt > model.STATUS_CHANNEL_TIMEOUT) {
return true
} else if pushStatus == model.STATUS_AWAY && (status.Status == model.STATUS_AWAY || status.Status == model.STATUS_OFFLINE) {
return true
} else if pushStatus == model.STATUS_OFFLINE && status.Status == model.STATUS_OFFLINE {
return true
}

return false
}
29 changes: 0 additions & 29 deletions app/status.go
Expand Up @@ -235,32 +235,3 @@ func GetStatus(userId string) (*model.Status, *model.AppError) {
func IsUserAway(lastActivityAt int64) bool {
return model.GetMillis()-lastActivityAt >= *utils.Cfg.TeamSettings.UserStatusAwayTimeout*1000
}

func DoesStatusAllowPushNotification(user *model.User, channelNotifyProps model.StringMap, wasMentioned bool, status *model.Status, channelId string) bool {
props := user.NotifyProps

channelNotify := ""
ok := false
if channelNotify, ok = channelNotifyProps[model.PUSH_NOTIFY_PROP]; ok {
if channelNotify == model.USER_NOTIFY_NONE {
return false
} else if channelNotify == model.CHANNEL_NOTIFY_MENTION && !wasMentioned {
return false
}
}

if props[model.PUSH_NOTIFY_PROP] == model.USER_NOTIFY_NONE &&
(!ok || channelNotify == model.CHANNEL_NOTIFY_DEFAULT) {
return false
}

if pushStatus, ok := props["push_status"]; (pushStatus == model.STATUS_ONLINE || !ok) && (status.ActiveChannel != channelId || model.GetMillis()-status.LastActivityAt > model.STATUS_CHANNEL_TIMEOUT) {
return true
} else if pushStatus == model.STATUS_AWAY && (status.Status == model.STATUS_AWAY || status.Status == model.STATUS_OFFLINE) {
return true
} else if pushStatus == model.STATUS_OFFLINE && status.Status == model.STATUS_OFFLINE {
return true
}

return false
}

0 comments on commit 9c80b8e

Please sign in to comment.