From 23e527978ed3e889bebe5c879de2d4835509626a Mon Sep 17 00:00:00 2001 From: hmhealey Date: Tue, 7 Jul 2015 11:00:29 -0400 Subject: Add a post type for user joined/left messages and don't flag a channel as unread when one of those is automatically posted --- api/channel.go | 6 +++--- model/post.go | 5 +++-- store/sql_post_store.go | 12 +++++++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/api/channel.go b/api/channel.go index c0c2d1548..8264b3e74 100644 --- a/api/channel.go +++ b/api/channel.go @@ -366,7 +366,7 @@ func JoinChannel(c *Context, channelId string, role string) { post := &model.Post{ChannelId: channel.Id, Message: fmt.Sprintf( `User %v has joined this channel.`, - user.Username)} + user.Username), Type: model.POST_JOIN_LEAVE} if _, err := CreatePost(c, post, false); err != nil { l4g.Error("Failed to post join message %v", err) c.Err = model.NewAppError("joinChannel", "Failed to send join request", "") @@ -453,7 +453,7 @@ func leaveChannel(c *Context, w http.ResponseWriter, r *http.Request) { post := &model.Post{ChannelId: channel.Id, Message: fmt.Sprintf( `%v has left the channel.`, - user.Username)} + user.Username), Type: model.POST_JOIN_LEAVE} if _, err := CreatePost(c, post, false); err != nil { l4g.Error("Failed to post leave message %v", err) c.Err = model.NewAppError("leaveChannel", "Failed to send leave message", "") @@ -646,7 +646,7 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { post := &model.Post{ChannelId: id, Message: fmt.Sprintf( `%v added to the channel by %v`, - nUser.Username, oUser.Username)} + nUser.Username, oUser.Username), Type: model.POST_JOIN_LEAVE} if _, err := CreatePost(c, post, false); err != nil { l4g.Error("Failed to post add message %v", err) c.Err = model.NewAppError("addChannelMember", "Failed to add member to channel", "") diff --git a/model/post.go b/model/post.go index d10a9f9fc..f6f33b1e8 100644 --- a/model/post.go +++ b/model/post.go @@ -9,7 +9,8 @@ import ( ) const ( - POST_DEFAULT = "" + POST_DEFAULT = "" + POST_JOIN_LEAVE = "join_leave" ) type Post struct { @@ -100,7 +101,7 @@ func (o *Post) IsValid() *AppError { return NewAppError("Post.IsValid", "Invalid hashtags", "id="+o.Id) } - if !(o.Type == POST_DEFAULT) { + if !(o.Type == POST_DEFAULT || o.Type == POST_JOIN_LEAVE) { return NewAppError("Post.IsValid", "Invalid type", "id="+o.Type) } diff --git a/store/sql_post_store.go b/store/sql_post_store.go index 01900023f..7ada515d7 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -72,7 +72,13 @@ func (s SqlPostStore) Save(post *model.Post) StoreChannel { result.Err = model.NewAppError("SqlPostStore.Save", "We couldn't save the Post", "id="+post.Id+", "+err.Error()) } else { time := model.GetMillis() - s.GetMaster().Exec("UPDATE Channels SET LastPostAt = ?, TotalMsgCount = TotalMsgCount + 1 WHERE Id = ?", time, post.ChannelId) + + if post.Type != model.POST_JOIN_LEAVE { + s.GetMaster().Exec("UPDATE Channels SET LastPostAt = ?, TotalMsgCount = TotalMsgCount + 1 WHERE Id = ?", time, post.ChannelId) + } else { + // don't update TotalMsgCount for unimportant messages so that the channel isn't marked as unread + s.GetMaster().Exec("UPDATE Channels SET LastPostAt = ? WHERE Id = ?", time, post.ChannelId) + } if len(post.RootId) > 0 { s.GetMaster().Exec("UPDATE Posts SET UpdateAt = ? WHERE Id = ?", time, post.RootId) @@ -361,8 +367,8 @@ func (s SqlPostStore) Search(teamId string, userId string, terms string, isHasht searchType := "Message" if isHashtagSearch { searchType = "Hashtags" - for _,term := range strings.Split(terms, " ") { - termMap[term] = true; + for _, term := range strings.Split(terms, " ") { + termMap[term] = true } } -- cgit v1.2.3-1-g7c22