diff --git a/src/topics.js b/src/topics.js index 45f87ebfec..0470fe621c 100644 --- a/src/topics.js +++ b/src/topics.js @@ -339,84 +339,75 @@ var social = require('./social'); db.getSortedSetRangeWithScores(['tid:' + tid + ':bookmarks'], 0, -1, callback ); }; - Topics.updateTopicBookmarks = function( tid, pids, callback ){ + Topics.updateTopicBookmarks = function(tid, pids, callback) { var maxIndex; - var Posts = posts; + async.waterfall([ - function(next){ - Topics.getPostCount( tid, next ); + function(next) { + Topics.getPostCount(tid, next); }, - function(postcount, next){ + function(postcount, next) { maxIndex = postcount; - Topics.getTopicBookmarks( tid, next ); + Topics.getTopicBookmarks(tid, next); }, - function(bookmarks, next){ - var uids = bookmarks.map( function( bookmark ){return bookmark.value}); - var forkedPosts = pids.map( function( pid ){ return { pid: pid, tid: tid }; } ); - var uidBookmark = new Object(); - var uidData = bookmarks.map( - function( bookmark ){ - var u = new Object(); - u.uid = bookmark.value; - u.bookmark = bookmark.score; - return u; - } ); - async.map( - uidData, - function( data, mapCallback ){ - Posts.getPostIndices( - forkedPosts, - data.uid, - function( err, indices ){ - if( err ){ - callback( err ); - } - data.postIndices = indices; - mapCallback( null, data ); - } ) - }, - function( err, results ){ - if( err ){ - return callback(); + function(bookmarks, next) { + var forkedPosts = pids.map(function(pid) { + return {pid: pid, tid: tid}; + }); + + var uidData = bookmarks.map(function(bookmark) { + return { + uid: bookmark.value, + bookmark: bookmark.score + }; + }); + + async.map(uidData, function(data, mapCallback) { + posts.getPostIndices(forkedPosts, data.uid, function(err, indices) { + if (err) { + return callback(err); } - async.map( - results, - function( data, mapCallback ){ - var uid = data.uid; - var bookmark = data.bookmark; - bookmark = bookmark < maxIndex ? bookmark : maxIndex; - var postIndices = data.postIndices; - var i; - for( i = 0; i < postIndices.length && postIndices[i] < data.bookmark; ++i ){ - --bookmark; - } - - if( bookmark != data.bookmark ){ - mapCallback( null, { uid: uid, bookmark: bookmark } ); - } - else{ - mapCallback( null, null ); - } - }, - function( err, results ){ - async.map( results, - function(ui, cb ){ - if( ui && ui.bookmark){ - Topics.setUserBookmark( tid, ui.uid, ui.bookmark, cb ); - } - else{ - return cb( null, null ); - } - }, - function( err, results ){ - next(); - } - ); - } - ); + data.postIndices = indices; + mapCallback(null, data); + }); + }, function(err, results) { + if (err) { + return callback(err); } - ); - }], - function( err, result ){ callback();} ); + async.map(results, function(data, mapCallback) { + var uid = data.uid; + var bookmark = data.bookmark; + bookmark = bookmark < maxIndex ? bookmark : maxIndex; + var postIndices = data.postIndices; + + for (var i = 0; i < postIndices.length && postIndices[i] < data.bookmark; ++i ){ + --bookmark; + } + + if (parseInt(bookmark, 10) !== parseInt(data.bookmark, 10)) { + mapCallback( null, { uid: uid, bookmark: bookmark } ); + } else { + mapCallback( null, null ); + } + }, function(err, results) { + if (err) { + return callback(err); + } + + async.map(results, function(ui, cb) { + if( ui && ui.bookmark) { + Topics.setUserBookmark(tid, ui.uid, ui.bookmark, cb); + } else { + return cb(null, null); + } + }, function(err) { + next(err); + }); + }); + }); + } + ], function(err){ + callback(err); + }); }; }(exports)); diff --git a/src/topics/fork.js b/src/topics/fork.js index 768b656d2a..dc8d66ab83 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -55,7 +55,7 @@ module.exports = function(Topics) { } Topics.create({uid: results.postData.uid, title: title, cid: cid}, next); }, - function( results, next) { + function(results, next) { Topics.updateTopicBookmarks(fromTid, pids, function(){ next( null, results );} ); }, function(_tid, next) {