From ef210732feafb6bad56e9c2f0dba33f6405f22ae Mon Sep 17 00:00:00 2001 From: Simon Grim Date: Sat, 9 May 2015 00:51:13 +0500 Subject: [PATCH] optimization of postboard showPosts() and preventing of post duplication --- js/twister_timeline.js | 56 ++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/js/twister_timeline.js b/js/twister_timeline.js index 1cba22c..f192aad 100644 --- a/js/twister_timeline.js +++ b/js/twister_timeline.js @@ -188,6 +188,7 @@ function showPosts(req, posts) //console.log(req); //console.log(posts); var streamItemsParent = $.MAL.getStreamPostsParent(); + var streamItems = streamItemsParent.children(); for( var i = 0; i < posts.length; i++ ) { var post = posts[i]; @@ -200,31 +201,44 @@ function showPosts(req, posts) var streamPostAppended = false; // insert the post in timeline ordered by (you guessed) time - // FIXME: lame! searching everything everytime. please optimize! - var streamItems = streamItemsParent.children(); - if( streamItems.length == 0) { - // timeline is empty - streamItemsParent.append( streamPost ); - streamPostAppended = true; - } else { - var j = 0; - for( j = 0; j < streamItems.length; j++) { - var streamItem = streamItems.eq(j); - var timeItem = streamItem.attr("data-time"); - if( timeItem == undefined || - timePost > parseInt(timeItem) ) { - // this post in stream is older, so post must be inserted above - streamItem.before(streamPost); - streamPostAppended = true; - break; + if (streamItems.length) { + // check for duplicate twists + var streamItemsSameTime = streamItemsParent.children('[data-time='+timePost+']'); + if (streamItemsSameTime.length) { + var streamPostInnerHTML = streamPost[0].innerHTML; + for (var j = 0; j < streamItemsSameTime.length; j++) { + var streamItem = streamItemsSameTime.eq(j); + if (streamItem[0].innerHTML === streamPostInnerHTML) { + streamPostAppended = true; + console.log('appending of duplicate twist prevented'); + break; + } + } + } + if (!streamPostAppended) { + for (var j = 0; j < streamItems.length; j++) { + var streamItem = streamItems.eq(j); + var timeItem = streamItem.attr("data-time"); + if( timeItem == undefined || + timePost > parseInt(timeItem) ) { + // this post in stream is older, so post must be inserted above + streamItem.before(streamPost); + streamItems[streamItems.length] = streamPost[0]; + streamItems.length += 1; + streamPostAppended = true; + streamPost.show(); + break; + } } } } - if (!streamPostAppended) + if (!streamPostAppended) { streamItemsParent.append( streamPost ); - - streamPostAppended = true; - streamPost.show(); + streamItems[streamItems.length] = streamPost[0]; + streamItems.length += 1; + streamPostAppended = true; + streamPost.show(); + } req.reportProcessedPost(post["userpost"]["n"],post["userpost"]["k"], streamPostAppended); } }