|
|
|
@ -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));
|
|
|
|
|