diff --git a/src/categories.js b/src/categories.js index ff2978e0ba..f708954992 100644 --- a/src/categories.js +++ b/src/categories.js @@ -257,28 +257,25 @@ var db = require('./database'), } CategoryTools.privileges(cid, uid, function(err, privileges) { - if (privileges.read) { - db.getSortedSetRevRange('categories:recent_posts:cid:' + cid, 0, count - 1, function(err, pids) { + if(err) { + return callback(err); + } - if (err) { - winston.err(err); - return callback(err, []); - } + if (!privileges.read) { + return callback(null, []); + } - if (pids.length === 0) { - return callback(null, []); - } + db.getSortedSetRevRange('categories:recent_posts:cid:' + cid, 0, count - 1, function(err, pids) { + if (err) { + return callback(err, []); + } - posts.getPostSummaryByPids(pids, true, function(err, postData) { - if(err) { - return callback(err); - } - callback(null, postData); - }); - }); - } else { - callback(null, []); - } + if (!pids || !pids.length) { + return callback(null, []); + } + + posts.getPostSummaryByPids(pids, true, callback); + }); }); }; @@ -291,21 +288,16 @@ var db = require('./database'), db.sortedSetRemove('categories:recent_posts:cid:' + oldCid, pid); db.sortedSetAdd('categories:recent_posts:cid:' + cid, timestamp, pid); - callback(null); + callback(); }); } topics.getPids(tid, function(err, pids) { if(err) { - return callback(err, null); + return callback(err); } - async.each(pids, movePost, function(err) { - if(err) { - return callback(err, null); - } - callback(null, 1); - }); + async.each(pids, movePost, callback); }); }; diff --git a/src/threadTools.js b/src/threadTools.js index 87d0026171..5125eaf6a4 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -206,19 +206,14 @@ var winston = require('winston'), topics.setTopicField(tid, 'cid', cid); - categories.moveActiveUsers(tid, oldCid, cid); - categories.moveRecentReplies(tid, oldCid, cid, function(err, data) { - if (err) { - winston.err(err); - } - }); - if(!parseInt(topic.deleted, 10)) { categories.incrementCategoryFieldBy(oldCid, 'topic_count', -1); categories.incrementCategoryFieldBy(cid, 'topic_count', 1); } - callback(null); + categories.moveActiveUsers(tid, oldCid, cid); + + categories.moveRecentReplies(tid, oldCid, cid, callback); }); } diff --git a/src/upgrade.js b/src/upgrade.js index 5f7140d31d..8fa94af00b 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -19,7 +19,7 @@ var db = require('./database'), Upgrade.check = function(callback) { // IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema - var latestSchema = new Date(2014, 1, 2, 16, 0).getTime(); + var latestSchema = new Date(2014, 1, 7, 16, 0).getTime(); db.get('schemaDate', function(err, value) { if (parseInt(value, 10) >= latestSchema) { @@ -515,6 +515,52 @@ Upgrade.upgrade = function(callback) { next(); } }, + function(next) { + + thisSchemaDate = new Date(2014, 1, 7, 16, 0).getTime(); + if (schemaDate < thisSchemaDate) { + updatesMade = true; + + winston.info('[2014/2/7] Updating category recent replies'); + db.getListRange('categories:cid', 0, -1, function(err, cids) { + + function updateCategory(cid, next) { + db.getSortedSetRevRange('categories:recent_posts:cid:' + cid, 0, - 1, function(err, pids) { + function updatePid(pid, next) { + Posts.getCidByPid(pid, function(err, realCid) { + if(err) { + return next(err); + } + + if(parseInt(realCid, 10) !== parseInt(cid, 10)) { + Posts.getPostField(pid, 'timestamp', function(err, timestamp) { + db.sortedSetRemove('categories:recent_posts:cid:' + cid, pid); + db.sortedSetAdd('categories:recent_posts:cid:' + realCid, timestamp, pid); + next(); + }); + } else { + next(); + } + }); + } + + async.each(pids, updatePid, next); + }); + } + + if(err) { + return next(err); + } + + async.each(cids, updateCategory, next); + }); + + + } else { + winston.info('[2014/2/7] Updating category recent replies -- skipped'); + next(); + } + } // Add new schema updates here // IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 17!!! ], function(err) {