#4755 Combining consecutive user join/leave system messages to single message and few other changes. (#5945)

fix 7 and 8

remove @ at "{username} joined the channel"

refactor and update test
Этот коммит содержится в:
Debanshu Kundu
2017-07-31 23:47:21 +05:30
коммит произвёл Saturnino Abril
родитель 59992ae4a4
Коммит 8a91235fb3
14 изменённых файлов: 574 добавлений и 66 удалений

Просмотреть файл

@@ -306,6 +306,91 @@ func SendNotifications(post *model.Post, team *model.Team, channel *model.Channe
return mentionedUsersList, nil
}
func SendNotificationsForSystemMessageAddRemove(user *model.User, otherUser *model.User, channel *model.Channel, post *model.Post) *model.AppError {
otherUserChannelMember, _ := GetChannelMember(channel.Id, otherUser.Id)
team, err := GetTeam(channel.TeamId)
if err != nil {
return err
}
err = (<-Srv.Store.Channel().IncrementMentionCount(channel.Id, otherUser.Id)).Err
if err != nil {
return err
}
if utils.Cfg.EmailSettings.SendEmailNotifications {
userAllowsEmails := otherUser.NotifyProps[model.EMAIL_NOTIFY_PROP] != "false"
if otherUserChannelMember != nil {
channelEmail, ok := otherUserChannelMember.NotifyProps[model.EMAIL_NOTIFY_PROP]
if ok && channelEmail != model.CHANNEL_NOTIFY_DEFAULT {
userAllowsEmails = channelEmail != "false"
}
}
var status *model.Status
var err *model.AppError
if status, err = GetStatus(otherUser.Id); err != nil {
status = &model.Status{
UserId: otherUser.Id,
Status: model.STATUS_OFFLINE,
Manual: false,
LastActivityAt: 0,
ActiveChannel: "",
}
}
senderName := utils.T("system.message.name")
if userAllowsEmails && status.Status != model.STATUS_ONLINE && otherUser.DeleteAt == 0 {
if err = sendNotificationEmail(post, otherUser, channel, team, senderName, user); err != nil {
return err
}
}
}
if otherUserChannelMember != nil {
sendPushNotifications := false
if *utils.Cfg.EmailSettings.SendPushNotifications {
pushServer := *utils.Cfg.EmailSettings.PushNotificationServer
if pushServer == model.MHPNS && (!utils.IsLicensed || !*utils.License.Features.MHPNS) {
l4g.Warn(utils.T("api.post.send_notifications_and_forget.push_notification.mhpnsWarn"))
sendPushNotifications = false
} else {
sendPushNotifications = true
}
}
channelName := channel.DisplayName
senderUsername := user.Username
if sendPushNotifications {
var status *model.Status
var err *model.AppError
if status, err = GetStatus(otherUser.Id); err != nil {
status = &model.Status{UserId: otherUser.Id, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
}
if ShouldSendPushNotification(otherUser, otherUserChannelMember.NotifyProps, true, status, post) {
if err = sendPushNotification(post, otherUser, channel, senderUsername, channelName, true); err != nil {
return err
}
}
}
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POSTED, "", post.ChannelId, "", nil)
message.Add("post", post.ToJson())
message.Add("channel_type", channel.Type)
message.Add("channel_display_name", channelName)
message.Add("channel_name", channel.Name)
message.Add("sender_name", senderUsername)
message.Add("team_id", channel.TeamId)
message.Add("mentions", otherUser.Username)
Publish(message)
}
return nil
}
func sendNotificationEmail(post *model.Post, user *model.User, channel *model.Channel, team *model.Team, senderName string, sender *model.User) *model.AppError {
if channel.IsGroupOrDirect() {
if result := <-Srv.Store.Team().GetTeamsByUserId(user.Id); result.Err != nil {