diff options
author | Saturnino Abril <saturnino.abril@gmail.com> | 2018-05-28 22:31:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-28 22:31:08 +0800 |
commit | c37d153ffb276e501660133de836a61eec25e544 (patch) | |
tree | 6c45576f1df735922aecd5d7e29458f945e46dba | |
parent | c3e9c414408a8c9c2806af12e659e395c605496f (diff) | |
download | chat-c37d153ffb276e501660133de836a61eec25e544.tar.gz chat-c37d153ffb276e501660133de836a61eec25e544.tar.bz2 chat-c37d153ffb276e501660133de836a61eec25e544.zip |
[MM-10519] Send websocket event whenever the channel has changed it's type (public|private) (#8798)
* send websocket event whenever the channel has changed it's type (public|private)
* updated per comment
Signed-off-by: Saturnino Abril <saturnino.abril@gmail.com>
* add channel_converted websocket event
Signed-off-by: Saturnino Abril <saturnino.abril@gmail.com>
* only send channel_id via websocket message for "channel_converted" event
Signed-off-by: Saturnino Abril <saturnino.abril@gmail.com>
-rw-r--r-- | api4/channel_test.go | 31 | ||||
-rw-r--r-- | app/channel.go | 6 | ||||
-rw-r--r-- | model/websocket_message.go | 3 |
3 files changed, 39 insertions, 1 deletions
diff --git a/api4/channel_test.go b/api4/channel_test.go index b428a382a..2a1e78753 100644 --- a/api4/channel_test.go +++ b/api4/channel_test.go @@ -11,6 +11,7 @@ import ( "strconv" "strings" "testing" + "time" "github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/utils" @@ -933,12 +934,42 @@ func TestConvertChannelToPrivate(t *testing.T) { t.Fatal("should not return a channel") } + WebSocketClient, err := th.CreateWebSocketClient() + if err != nil { + t.Fatal(err) + } + WebSocketClient.Listen() + publicChannel2 := th.CreatePublicChannel() rchannel, resp = th.SystemAdminClient.ConvertChannelToPrivate(publicChannel2.Id) CheckOKStatus(t, resp) if rchannel.Type != model.CHANNEL_PRIVATE { t.Fatal("channel should be converted from public to private") } + + stop := make(chan bool) + eventHit := false + + go func() { + for { + select { + case resp := <-WebSocketClient.EventChannel: + if resp.Event == model.WEBSOCKET_EVENT_CHANNEL_CONVERTED && resp.Data["channel_id"].(string) == publicChannel2.Id { + eventHit = true + } + case <-stop: + return + } + } + }() + + time.Sleep(400 * time.Millisecond) + + stop <- true + + if !eventHit { + t.Fatal("did not receive channel_converted event") + } } func TestRestoreChannel(t *testing.T) { diff --git a/app/channel.go b/app/channel.go index 26e3d771c..b5afdea2d 100644 --- a/app/channel.go +++ b/app/channel.go @@ -366,6 +366,12 @@ func (a *App) UpdateChannelPrivacy(oldChannel *model.Channel, user *model.User) return channel, err } + a.InvalidateCacheForChannel(channel) + + messageWs := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_CONVERTED, channel.TeamId, "", "", nil) + messageWs.Add("channel_id", channel.Id) + a.Publish(messageWs) + return channel, nil } } diff --git a/model/websocket_message.go b/model/websocket_message.go index 071975d6c..31b16d1a7 100644 --- a/model/websocket_message.go +++ b/model/websocket_message.go @@ -14,8 +14,9 @@ const ( WEBSOCKET_EVENT_POSTED = "posted" WEBSOCKET_EVENT_POST_EDITED = "post_edited" WEBSOCKET_EVENT_POST_DELETED = "post_deleted" - WEBSOCKET_EVENT_CHANNEL_DELETED = "channel_deleted" + WEBSOCKET_EVENT_CHANNEL_CONVERTED = "channel_converted" WEBSOCKET_EVENT_CHANNEL_CREATED = "channel_created" + WEBSOCKET_EVENT_CHANNEL_DELETED = "channel_deleted" WEBSOCKET_EVENT_CHANNEL_UPDATED = "channel_updated" WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED = "channel_member_updated" WEBSOCKET_EVENT_DIRECT_ADDED = "direct_added" |