MM-15035: Read from file infos from master on post creation (#10899)

* MM-15035: Read from file infos from master on post creation

* Handling edit post cases for get files metadata
Этот коммит содержится в:
Jesús Espino
2019-05-23 14:29:41 +02:00
коммит произвёл GitHub
родитель e59674cfdd
Коммит 87ff64ea6d
6 изменённых файлов: 31 добавлений и 31 удалений

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

@@ -98,7 +98,7 @@ func createEphemeralPost(c *Context, w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated)
rp = model.AddPostActionCookies(rp, c.App.PostActionCookieSecret())
rp = c.App.PreparePostForClient(rp, true)
rp = c.App.PreparePostForClient(rp, true, false)
w.Write([]byte(rp.ToJson()))
}
@@ -261,7 +261,7 @@ func getPost(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
post = c.App.PreparePostForClient(post, false)
post = c.App.PreparePostForClient(post, false, false)
if c.HandleEtag(post.Etag(), "Get Post", w, r) {
return

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

@@ -295,7 +295,7 @@ func (a *App) CreatePost(post *model.Post, channel *model.Channel, triggerWebhoo
// Normally, we would let the API layer call PreparePostForClient, but we do it here since it also needs
// to be done when we send the post over the websocket in handlePostEvents
rpost = a.PreparePostForClient(rpost, true)
rpost = a.PreparePostForClient(rpost, true, false)
if err := a.handlePostEvents(rpost, user, channel, triggerWebhooks, parentPostList); err != nil {
mlog.Error("Failed to handle post events", mlog.Err(err))
@@ -415,7 +415,7 @@ func (a *App) SendEphemeralPost(userId string, post *model.Post) *model.Post {
post.GenerateActionIds()
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_EPHEMERAL_MESSAGE, "", post.ChannelId, userId, nil)
post = a.PreparePostForClient(post, true)
post = a.PreparePostForClient(post, true, false)
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
message.Add("post", post.ToJson())
a.Publish(message)
@@ -433,7 +433,7 @@ func (a *App) UpdateEphemeralPost(userId string, post *model.Post) *model.Post {
post.GenerateActionIds()
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_EDITED, "", post.ChannelId, userId, nil)
post = a.PreparePostForClient(post, true)
post = a.PreparePostForClient(post, true, false)
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
message.Add("post", post.ToJson())
a.Publish(message)
@@ -563,7 +563,7 @@ func (a *App) UpdatePost(post *model.Post, safeUpdate bool) (*model.Post, *model
})
}
rpost = a.PreparePostForClient(rpost, false)
rpost = a.PreparePostForClient(rpost, false, true)
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_EDITED, "", rpost.ChannelId, "", nil)
message.Add("post", rpost.ToJson())
@@ -741,7 +741,7 @@ func (a *App) DeletePost(postId, deleteByID string) (*model.Post, *model.AppErro
}
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_DELETED, "", post.ChannelId, "", nil)
message.Add("post", a.PreparePostForClient(post, false).ToJson())
message.Add("post", a.PreparePostForClient(post, false, false).ToJson())
a.Publish(message)
a.Srv.Go(func() {
@@ -957,7 +957,7 @@ func (a *App) SearchPostsInTeamForUser(terms string, userId string, teamId strin
func (a *App) GetFileInfosForPostWithMigration(postId string) ([]*model.FileInfo, *model.AppError) {
pchan := a.Srv.Store.Post().GetSingle(postId)
infos, err := a.GetFileInfosForPost(postId)
infos, err := a.GetFileInfosForPost(postId, false)
if err != nil {
return nil, err
}
@@ -980,8 +980,8 @@ func (a *App) GetFileInfosForPostWithMigration(postId string) ([]*model.FileInfo
return infos, nil
}
func (a *App) GetFileInfosForPost(postId string) ([]*model.FileInfo, *model.AppError) {
return a.Srv.Store.FileInfo().GetForPost(postId, false, true)
func (a *App) GetFileInfosForPost(postId string, fromMaster bool) ([]*model.FileInfo, *model.AppError) {
return a.Srv.Store.FileInfo().GetForPost(postId, fromMaster, true)
}
func (a *App) PostWithProxyAddedToImageURLs(post *model.Post) *model.Post {

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

@@ -45,7 +45,7 @@ func (a *App) PreparePostListForClient(originalList *model.PostList) *model.Post
}
for id, originalPost := range originalList.Posts {
post := a.PreparePostForClient(originalPost, false)
post := a.PreparePostForClient(originalPost, false, false)
list.Posts[id] = post
}
@@ -53,7 +53,7 @@ func (a *App) PreparePostListForClient(originalList *model.PostList) *model.Post
return list
}
func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost bool) *model.Post {
func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost bool, isEditPost bool) *model.Post {
post := originalPost.Clone()
// Proxy image links before constructing metadata so that requests go through the proxy
@@ -74,7 +74,7 @@ func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost bool) *mo
}
// Files
if fileInfos, err := a.getFileMetadataForPost(post); err != nil {
if fileInfos, err := a.getFileMetadataForPost(post, isNewPost || isEditPost); err != nil {
mlog.Warn("Failed to get files for a post", mlog.String("post_id", post.Id), mlog.Err(err))
} else {
post.Metadata.Files = fileInfos
@@ -96,12 +96,12 @@ func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost bool) *mo
return post
}
func (a *App) getFileMetadataForPost(post *model.Post) ([]*model.FileInfo, *model.AppError) {
func (a *App) getFileMetadataForPost(post *model.Post, fromMaster bool) ([]*model.FileInfo, *model.AppError) {
if len(post.FileIds) == 0 {
return nil, nil
}
return a.GetFileInfosForPost(post.Id)
return a.GetFileInfosForPost(post.Id, fromMaster)
}
func (a *App) getEmojisAndReactionsForPost(post *model.Post) ([]*model.Emoji, []*model.Reaction, *model.AppError) {

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

@@ -83,7 +83,7 @@ func TestPreparePostForClient(t *testing.T) {
Message: message,
}
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
t.Run("doesn't mutate provided post", func(t *testing.T) {
assert.NotEqual(t, clientPost, post, "should've returned a new post")
@@ -109,7 +109,7 @@ func TestPreparePostForClient(t *testing.T) {
post := th.CreatePost(th.BasicChannel)
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
assert.False(t, clientPost == post, "should've returned a new post")
assert.Equal(t, clientPost, post, "shouldn't have changed any metadata")
@@ -125,7 +125,7 @@ func TestPreparePostForClient(t *testing.T) {
reaction3 := th.AddReactionToPost(post, th.BasicUser2, "ice_cream")
post.HasReactions = true
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
assert.Len(t, clientPost.Metadata.Reactions, 3, "should've populated Reactions")
assert.Equal(t, reaction1, clientPost.Metadata.Reactions[0], "first reaction is incorrect")
@@ -149,7 +149,7 @@ func TestPreparePostForClient(t *testing.T) {
fileInfo.PostId = post.Id
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
assert.Equal(t, []*model.FileInfo{fileInfo}, clientPost.Metadata.Files, "should've populated Files")
})
@@ -183,7 +183,7 @@ func TestPreparePostForClient(t *testing.T) {
th.AddReactionToPost(post, th.BasicUser2, "angry")
post.HasReactions = true
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
t.Run("populates emojis", func(t *testing.T) {
assert.ElementsMatch(t, []*model.Emoji{}, clientPost.Metadata.Emojis, "should've populated empty Emojis")
@@ -228,7 +228,7 @@ func TestPreparePostForClient(t *testing.T) {
th.AddReactionToPost(post, th.BasicUser2, "angry")
post.HasReactions = true
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
t.Run("pupulates emojis", func(t *testing.T) {
assert.ElementsMatch(t, []*model.Emoji{emoji1, emoji2, emoji3, emoji4}, clientPost.Metadata.Emojis, "should've populated post.Emojis")
@@ -251,7 +251,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false)
require.Nil(t, err)
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
t.Run("populates image dimensions", func(t *testing.T) {
imageDimensions := clientPost.Metadata.Images
@@ -295,7 +295,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false)
require.Nil(t, err)
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
// Reminder that only the first link gets an embed and dimensions
@@ -330,7 +330,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false)
require.Nil(t, err)
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
t.Run("populates embeds", func(t *testing.T) {
assert.ElementsMatch(t, []*model.PostEmbed{
@@ -381,7 +381,7 @@ func TestPreparePostForClient(t *testing.T) {
}, th.BasicChannel, false)
require.Nil(t, err)
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
t.Run("populates embeds", func(t *testing.T) {
assert.ElementsMatch(t, []*model.PostEmbed{
@@ -411,7 +411,7 @@ func TestPreparePostForClient(t *testing.T) {
})
post := th.CreatePost(th.BasicChannel)
post = th.App.PreparePostForClient(post, false)
post = th.App.PreparePostForClient(post, false, false)
assert.Nil(t, post.Metadata)
@@ -464,7 +464,7 @@ func testProxyLinkedImage(t *testing.T, th *TestHelper, shouldProxy bool) {
Message: fmt.Sprintf(postTemplate, imageURL),
}
clientPost := th.App.PreparePostForClient(post, false)
clientPost := th.App.PreparePostForClient(post, false, false)
if shouldProxy {
assert.Equal(t, fmt.Sprintf(postTemplate, imageURL), post.Message, "should not have mutated original post")
@@ -482,7 +482,7 @@ func testProxyOpenGraphImage(t *testing.T, th *TestHelper, shouldProxy bool) {
}, th.BasicChannel, false)
require.Nil(t, err)
embeds := th.App.PreparePostForClient(post, false).Metadata.Embeds
embeds := th.App.PreparePostForClient(post, false, false).Metadata.Embeds
require.Len(t, embeds, 1, "should have one embed")
embed := embeds[0]

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

@@ -208,7 +208,7 @@ func TestAttachFilesToPost(t *testing.T) {
err = th.App.attachFilesToPost(post)
assert.Nil(t, err)
infos, err := th.App.GetFileInfosForPost(post.Id)
infos, err := th.App.GetFileInfosForPost(post.Id, false)
assert.Nil(t, err)
assert.Len(t, infos, 2)
})
@@ -236,7 +236,7 @@ func TestAttachFilesToPost(t *testing.T) {
err = th.App.attachFilesToPost(post)
assert.Nil(t, err)
infos, err := th.App.GetFileInfosForPost(post.Id)
infos, err := th.App.GetFileInfosForPost(post.Id, false)
assert.Nil(t, err)
assert.Len(t, infos, 1)
assert.Equal(t, info2.Id, infos[0].Id)

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

@@ -137,7 +137,7 @@ func (a *App) sendReactionEvent(event string, reaction *model.Reaction, post *mo
post.HasReactions = hasReactions
post.UpdateAt = model.GetMillis()
clientPost := a.PreparePostForClient(post, false)
clientPost := a.PreparePostForClient(post, false, false)
umessage := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_EDITED, "", post.ChannelId, "", nil)
umessage.Add("post", clientPost.ToJson())