From 388fefcc4316e5e16b82134802b29c046f0a4950 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 19 Aug 2016 12:09:08 -0400 Subject: Fix the elusive missing posts bug (#3836) --- webapp/stores/post_store.jsx | 21 +++++++++++++++++++-- webapp/utils/async_client.jsx | 8 ++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/webapp/stores/post_store.jsx b/webapp/stores/post_store.jsx index 0b2277255..7b3d337f3 100644 --- a/webapp/stores/post_store.jsx +++ b/webapp/stores/post_store.jsx @@ -22,6 +22,7 @@ class PostStoreClass extends EventEmitter { super(); this.selectedPostId = null; this.postsInfo = {}; + this.latestPageTime = {}; this.currentFocusedPostId = null; } emitChange() { @@ -131,6 +132,14 @@ class PostStoreClass extends EventEmitter { return null; } + getLatestPostFromPageTime(id) { + if (this.latestPageTime.hasOwnProperty(id)) { + return this.latestPageTime[id]; + } + + return 0; + } + getVisiblePosts(id) { if (this.postsInfo.hasOwnProperty(id) && this.postsInfo[id].hasOwnProperty('postList')) { const postList = JSON.parse(JSON.stringify(this.postsInfo[id].postList)); @@ -184,11 +193,19 @@ class PostStoreClass extends EventEmitter { return this.currentFocusedPostId; } - storePosts(id, newPosts) { + storePosts(id, newPosts, checkLatest) { if (isPostListNull(newPosts)) { return; } + if (checkLatest && newPosts.order.length >= 1) { + const currentLatest = this.latestPageTime[id] || 0; + const newLatest = newPosts.posts[newPosts.order[0]].create_at || 0; + if (newLatest > currentLatest) { + this.latestPageTime[id] = newLatest; + } + } + const combinedPosts = makePostListNonNull(this.getAllPosts(id)); for (const pid in newPosts.posts) { @@ -576,7 +593,7 @@ PostStore.dispatchToken = AppDispatcher.register((payload) => { switch (action.type) { case ActionTypes.RECEIVED_POSTS: { const id = PostStore.currentFocusedPostId !== null && action.isPost ? PostStore.currentFocusedPostId : action.id; - PostStore.storePosts(id, makePostListNonNull(action.post_list)); + PostStore.storePosts(id, makePostListNonNull(action.post_list), action.checkLatest); PostStore.checkBounds(id, action.numRequested, makePostListNonNull(action.post_list), action.before); PostStore.emitChange(); break; diff --git a/webapp/utils/async_client.jsx b/webapp/utils/async_client.jsx index 55f43fd57..3941442b1 100644 --- a/webapp/utils/async_client.jsx +++ b/webapp/utils/async_client.jsx @@ -581,6 +581,7 @@ export function getPostsPage(id, maxPosts) { id: channelId, before: true, numRequested: numPosts, + checkLatest: true, post_list: data }); @@ -616,12 +617,7 @@ export function getPosts(id) { return; } - const latestPost = PostStore.getLatestPost(channelId); - let latestPostTime = 0; - - if (latestPost != null && latestPost.update_at != null) { - latestPostTime = latestPost.create_at; - } + const latestPostTime = PostStore.getLatestPostFromPageTime(id); callTracker['getPosts_' + channelId] = utils.getTimestamp(); -- cgit v1.2.3-1-g7c22