From 4b51490a3836144e6407b71cbd00aa094985168a Mon Sep 17 00:00:00 2001 From: hmhealey Date: Mon, 7 Dec 2015 18:14:07 -0500 Subject: Moved logic for making direct channels visible to both members on post to the server --- api/post.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'api/post.go') diff --git a/api/post.go b/api/post.go index e1adc1d98..5f9dbc775 100644 --- a/api/post.go +++ b/api/post.go @@ -236,9 +236,68 @@ func handlePostEventsAndForget(c *Context, post *model.Post, triggerWebhooks boo if triggerWebhooks { handleWebhookEventsAndForget(c, post, team, channel, user) } + + if channel.Type == model.CHANNEL_DIRECT { + go makeDirectChannelVisible(c.Session.TeamId, post.ChannelId) + } }() } +func makeDirectChannelVisible(teamId string, channelId string) { + var members []model.ChannelMember + if result := <-Srv.Store.Channel().GetMembers(channelId); result.Err != nil { + l4g.Error("Failed to get channel members channel_id=%v err=%v", channelId, result.Err.Message) + return + } else { + members = result.Data.([]model.ChannelMember) + } + + if len(members) != 2 { + l4g.Error("Failed to get 2 members for a direct channel channel_id=%v", channelId) + return + } + + // make sure the channel is visible to both members + for i, member := range members { + otherUserId := members[1-i].UserId + + if result := <-Srv.Store.Preference().Get(member.UserId, model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, otherUserId); result.Err != nil { + // create a new preference since one doesn't exist yet + preference := &model.Preference{ + UserId: member.UserId, + Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, + Name: otherUserId, + Value: "true", + } + + if saveResult := <-Srv.Store.Preference().Save(&model.Preferences{*preference}); saveResult.Err != nil { + l4g.Error("Failed to save direct channel preference user_id=%v other_user_id=%v err=%v", member.UserId, otherUserId, saveResult.Err.Message) + } else { + message := model.NewMessage(teamId, channelId, member.UserId, model.ACTION_PREFERENCE_CHANGED) + message.Add("preference", preference.ToJson()) + + PublishAndForget(message) + } + } else { + preference := result.Data.(model.Preference) + + if preference.Value != "true" { + // update the existing preference to make the channel visible + preference.Value = "true" + + if updateResult := <-Srv.Store.Preference().Save(&model.Preferences{preference}); updateResult.Err != nil { + l4g.Error("Failed to update direct channel preference user_id=%v other_user_id=%v err=%v", member.UserId, otherUserId, updateResult.Err.Message) + } else { + message := model.NewMessage(teamId, channelId, member.UserId, model.ACTION_PREFERENCE_CHANGED) + message.Add("preference", preference.ToJson()) + + PublishAndForget(message) + } + } + } + } +} + func handleWebhookEventsAndForget(c *Context, post *model.Post, team *model.Team, channel *model.Channel, user *model.User) { go func() { if !utils.Cfg.ServiceSettings.EnableOutgoingWebhooks { -- cgit v1.2.3-1-g7c22