From ae76bb3928742c556d8fc3f2020240b1da8fce2b Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 20:53:32 -0500 Subject: [PATCH] lots of err first fixeS --- public/src/forum/recent.js | 5 ++- public/src/forum/topic.js | 42 ++++++++++++--------- public/src/forum/unread.js | 6 ++- public/templates/unread.tpl | 2 +- src/categories.js | 11 ++---- src/routes/api.js | 20 +++++++--- src/socket.io/topics.js | 73 ++++++++++++++++++------------------- src/threadTools.js | 61 +++++++++++++------------------ src/topics.js | 63 ++++++++++++++++++-------------- 9 files changed, 149 insertions(+), 134 deletions(-) diff --git a/public/src/forum/recent.js b/public/src/forum/recent.js index c784593592..7a7dbc26f1 100644 --- a/public/src/forum/recent.js +++ b/public/src/forum/recent.js @@ -102,7 +102,10 @@ define(function() { socket.emit('topics.loadMoreRecentTopics', { after: $('#topics-container').children('li').length, term: active - }, function(data) { + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } if (data.topics && data.topics.length) { Recent.onTopicsLoaded(data.topics); } diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index b0bb81eddc..035c44de09 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -138,18 +138,10 @@ define(['composer'], function(composer) { socket.emit('topics.move', { tid: tid, cid: targetCid - }, function(data) { + }, function(err) { moveThreadModal.modal('hide'); - if (data.status === 'ok') { - app.alert({ - 'alert_id': 'thread_move', - type: 'success', - title: 'Topic Successfully Moved', - message: 'This topic has been successfully moved to ' + targetCatLabel, - timeout: 5000 - }); - } else { - app.alert({ + if(err) { + return app.alert({ 'alert_id': 'thread_move', type: 'danger', title: 'Unable to Move Topic', @@ -157,6 +149,14 @@ define(['composer'], function(composer) { timeout: 5000 }); } + + app.alert({ + 'alert_id': 'thread_move', + type: 'success', + title: 'Topic Successfully Moved', + message: 'This topic has been successfully moved to ' + targetCatLabel, + timeout: 5000 + }); }); } }); @@ -288,15 +288,15 @@ define(['composer'], function(composer) { } }; - socket.emit('topics.followCheck', tid, function(state) { + socket.emit('topics.followCheck', tid, function(err, state) { set_follow_state(state, true); }); + if (followEl[0]) { followEl[0].addEventListener('click', function() { - socket.emit('topics.follow', tid, function(data) { - if (data.status && data.status === 'ok') set_follow_state(data.follow); - else { - app.alert({ + socket.emit('topics.follow', tid, function(err, state) { + if(err) { + return app.alert({ type: 'danger', alert_id: 'topic_follow', title: 'Please Log In', @@ -304,6 +304,8 @@ define(['composer'], function(composer) { timeout: 5000 }); } + + set_follow_state(state); }); }, false); } @@ -1104,9 +1106,13 @@ define(['composer'], function(composer) { socket.emit('topics.loadMore', { tid: tid, after: parseInt($('#post-container .post-row.infiniteloaded').last().attr('data-index'), 10) + 1 - }, function (data) { + }, function (err, data) { + if(err) { + return app.alertError(err.message); + } + infiniteLoaderActive = false; - if (data.posts.length) { + if (data && data.posts && data.posts.length) { indicatorEl.attr('done', '0'); createNewPosts(data, true); } else { diff --git a/public/src/forum/unread.js b/public/src/forum/unread.js index 57fadb557a..aa70690165 100644 --- a/public/src/forum/unread.js +++ b/public/src/forum/unread.js @@ -93,7 +93,11 @@ define(function() { loadingMoreTopics = true; socket.emit('topics.loadMoreUnreadTopics', { after: parseInt($('#topics-container').attr('data-next-start'), 10) - }, function(data) { + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } + if (data.topics && data.topics.length) { onTopicsLoaded(data.topics); $('#topics-container').attr('data-next-start', data.nextStart); diff --git a/public/templates/unread.tpl b/public/templates/unread.tpl index 1054e6d03b..142945b20e 100644 --- a/public/templates/unread.tpl +++ b/public/templates/unread.tpl @@ -15,7 +15,7 @@
-
+
  • diff --git a/src/categories.js b/src/categories.js index 939073ffcb..6312ff835e 100644 --- a/src/categories.js +++ b/src/categories.js @@ -86,9 +86,7 @@ var db = require('./database.js'), }; function getTopics(next) { - topics.getTopicsByTids(tids, current_user, function(topicsData) { - next(null, topicsData); - }, category_id); + topics.getTopicsByTids(tids, category_id, current_user, next); } function getModerators(next) { @@ -126,9 +124,9 @@ var db = require('./database.js'), Categories.getCategoryTopics = function(cid, start, stop, uid, callback) { Categories.getTopicIds(cid, start, stop, function(err, tids) { - topics.getTopicsByTids(tids, uid, function(topicsData) { - callback(topicsData); - }, cid); + topics.getTopicsByTids(tids, cid, uid, function(err, topicsData) { + callback(err, topicsData); + }); }); }; @@ -137,7 +135,6 @@ var db = require('./database.js'), }; - Categories.getAllCategories = function(current_user, callback) { db.getListRange('categories:cid', 0, -1, function(err, cids) { if(err) { diff --git a/src/routes/api.js b/src/routes/api.js index 0c32a1c435..6c6c85addd 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -176,16 +176,24 @@ var path = require('path'), }); }); - app.get('/unread', function (req, res) { + app.get('/unread', function (req, res, next) { var uid = (req.user) ? req.user.uid : 0; - topics.getUnreadTopics(uid, 0, 19, function (data) { + topics.getUnreadTopics(uid, 0, 19, function (err, data) { + if(err) { + return next(err); + } + res.json(data); }); }); - app.get('/unread/total', function (req, res) { + app.get('/unread/total', function (req, res, next) { var uid = (req.user) ? req.user.uid : 0; - topics.getTotalUnread(uid, function (data) { + topics.getTotalUnread(uid, function (err, data) { + if(err) { + return next(err); + } + res.json(data); }); }); @@ -273,9 +281,9 @@ var path = require('path'), return callback(err, null); } - topics.getTopicsByTids(tids, 0, function (topics) { + topics.getTopicsByTids(tids, 0, 0, function (topics) { callback(null, topics); - }, 0); + }); }); } diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index f15638b3ea..d8eb132a0c 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -138,9 +138,11 @@ SocketTopics.createTopicFromPosts = function(socket, data, callback) { return; } - topics.createTopicFromPosts(socket.uid, data.title, data.pids, function(err, data) { - callback(err, data); - }); + if(!data || !data.title || !data.pids || !Array.isArray(data.pids)) { + return callback(new Error('invalid data')); + } + + topics.createTopicFromPosts(socket.uid, data.title, data.pids, callback); }; SocketTopics.movePost = function(socket, data, callback) { @@ -154,79 +156,74 @@ SocketTopics.movePost = function(socket, data, callback) { return; } - topics.movePostToTopic(data.pid, data.tid, function(err, data) { - callback(err, data); - }); + if(!data || !data.pid || !data.tid) { + return callback(new Error('invalid data')); + } + + topics.movePostToTopic(data.pid, data.tid, callback); }; SocketTopics.move = function(socket, data, callback) { + + if(!data || !data.tid || !data.cid) { + return callback(new Error('invalid data')); + } + threadTools.move(data.tid, data.cid, function(err) { if(err) { return callback(err); } index.server.sockets.in('topic_' + data.tid).emit('event:topic_moved', { - tid: tid + tid: data.tid }); + + callback(null); }); }; SocketTopics.followCheck = function(socket, tid, callback) { - threadTools.isFollowing(tid, socket.uid, function(following) { - callback(following); - }); + threadTools.isFollowing(tid, socket.uid, callback); }; SocketTopics.follow = function(socket, tid, callback) { - if (socket.uid) { - threadTools.toggleFollow(tid, socket.uid, function(follow) { - if (follow.status === 'ok') { - callback(follow); - } - }); - } else { - callback({ - status: 'error', - error: 'not-logged-in' - }); + if(!socket.uid) { + return callback(new Error('not-logged-in')); } + + + threadTools.toggleFollow(tid, socket.uid, callback); }; SocketTopics.loadMore = function(socket, data, callback) { + if(!data || !data.tid) { + return callback(new Error('invalid data')); + } + var start = data.after, end = start + 9; topics.getTopicPosts(data.tid, start, end, socket.uid, function(err, posts) { - if(err) { - return callback(err); - - } - callback(null, { - posts: posts - }); + callback(err, {posts: posts}); }); }; SocketTopics.loadMoreRecentTopics = function(socket, data, callback) { + if(!data || !data.term) { + return callback(new Error('invalid data')); + } + var start = data.after, end = start + 9; - topics.getLatestTopics(socket.uid, start, end, data.term, function(err, latestTopics) { - if(err) { - return callback(err); - } - - callback(null, latestTopics); - }); + topics.getLatestTopics(socket.uid, start, end, data.term, callback); }; SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) { var start = data.after, end = start + 9; - topics.getUnreadTopics(socket.uid, start, end, function(unreadTopics) { - callback(null, unreadTopics); - }); + topics.getUnreadTopics(socket.uid, start, end, callback); }; module.exports = SocketTopics; \ No newline at end of file diff --git a/src/threadTools.js b/src/threadTools.js index 8ba6ee7e71..d0ccd20e50 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -195,49 +195,40 @@ var winston = require('winston'), }); } - ThreadTools.isFollowing = function(tid, current_user, callback) { - db.isSetMember('tid:' + tid + ':followers', current_user, function(err, following) { - callback(following); - }); + ThreadTools.isFollowing = function(tid, uid, callback) { + db.isSetMember('tid:' + tid + ':followers', uid, callback); } - ThreadTools.toggleFollow = function(tid, current_user, callback) { - ThreadTools.isFollowing(tid, current_user, function(following) { - if (!following) { - db.setAdd('tid:' + tid + ':followers', current_user, function(err, success) { - if (callback) { - if (!err) { - callback({ - status: 'ok', - follow: true - }); - } else callback({ - status: 'error' - }); - } - }); - } else { - db.setRemove('tid:' + tid + ':followers', current_user, function(err, success) { - if (callback) { - if (!err) { - callback({ - status: 'ok', - follow: false - }); - } else callback({ - status: 'error' - }); - } - }); + ThreadTools.toggleFollow = function(tid, uid, callback) { + ThreadTools.isFollowing(tid, uid, function(err, following) { + if(err) { + return callback(err); } + + db[following?'setRemove':'setAdd']('tid:' + tid + ':followers', uid, function(err, success) { + if (callback) { + if(err) { + return callback(err); + } + + callback(null, !following); + } + }); }); } ThreadTools.getFollowers = function(tid, callback) { db.getSetMembers('tid:' + tid + ':followers', function(err, followers) { - callback(err, followers.map(function(follower) { - return parseInt(follower, 10); - })); + if(err) { + return callback(err); + } + + if(followers) { + followers = followers.map(function(follower) { + return parseInt(follower, 10); + }); + } + callback(null, followers); }); } diff --git a/src/topics.js b/src/topics.js index fb754cdf78..f648dbeb17 100644 --- a/src/topics.js +++ b/src/topics.js @@ -454,7 +454,7 @@ var async = require('async'), } }); }, function(tids) { - Topics.getTopicsByTids(tids, current_user, function(topicData) { + Topics.getTopicsByTids(tids, 0, current_user, function(err, topicData) { latestTopics.topics = topicData; callback(err, latestTopics); }); @@ -476,8 +476,9 @@ var async = require('async'), function(callback) { db.getSortedSetRevRange('topics:recent', start, stop, function(err, tids) { - if (err) + if (err) { return callback(err); + } if (tids && !tids.length) { done = true; @@ -499,7 +500,7 @@ var async = require('async'), }); }, function(err) { - callback({ + callback(null, { count: unreadTids.length }); } @@ -569,19 +570,22 @@ var async = require('async'), 'show_topic_button': 'hidden', 'show_markallread_button': 'show', 'no_topics_message': 'hidden', - 'topic_row_size': 'col-md-12', 'topics': [] }; function noUnreadTopics() { unreadTopics.no_topics_message = 'show'; unreadTopics.show_markallread_button = 'hidden'; - callback(unreadTopics); + callback(null, unreadTopics); } function sendUnreadTopics(topicIds) { - Topics.getTopicsByTids(topicIds, uid, function(topicData) { + Topics.getTopicsByTids(topicIds, 0, uid, function(err, topicData) { + if(err) { + return callback(err); + } + unreadTopics.topics = topicData; unreadTopics.nextStart = stop + 1; if (!topicData || topicData.length === 0) { @@ -591,13 +595,13 @@ var async = require('async'), unreadTopics.show_markallread_button = 'hidden'; } - callback(unreadTopics); + callback(null, unreadTopics); }); } Topics.getUnreadTids(uid, start, stop, function(err, unreadTids) { if (err) { - return callback([]); + return callback(err); } if (unreadTids.length) { @@ -634,13 +638,12 @@ var async = require('async'), }); }; - Topics.getTopicsByTids = function(tids, current_user, callback, category_id) { + Topics.getTopicsByTids = function(tids, cid, current_user, callback) { var retrieved_topics = []; if (!Array.isArray(tids) || tids.length === 0) { - callback(retrieved_topics); - return; + return callback(null, retrieved_topics); } function getTopicInfo(topicData, callback) { @@ -664,19 +667,19 @@ var async = require('async'), // temporary. I don't think this call should belong here function getPrivileges(next) { - categoryTools.privileges(category_id, current_user, function(err, user_privs) { - next(err, user_privs); - }); + categoryTools.privileges(cid, current_user, next); } function getCategoryInfo(next) { - categories.getCategoryFields(topicData.cid, ['name', 'slug', 'icon'], function(err, categoryData) { - next(err, categoryData); - }); + categories.getCategoryFields(topicData.cid, ['name', 'slug', 'icon'], next); } async.parallel([getUserInfo, hasReadTopic, getTeaserInfo, getPrivileges, getCategoryInfo], function(err, results) { - callback({ + if(err) { + return callback(err); + } + + callback(null, { username: results[0].username, userslug: results[0].userslug, picture: results[0].picture, @@ -694,13 +697,20 @@ var async = require('async'), return !deleted || (deleted && topicInfo.privileges.view_deleted) || topicData.uid === current_user; } - function loadTopic(tid, callback) { + function loadTopic(tid, next) { Topics.getTopicData(tid, function(err, topicData) { - if (!topicData) { - return callback(null); + if(err) { + return next(err); } - getTopicInfo(topicData, function(topicInfo) { + if (!topicData) { + return next(); + } + + getTopicInfo(topicData, function(err, topicInfo) { + if(err) { + return next(err); + } topicData['pin-icon'] = parseInt(topicData.pinned, 10) === 1 ? 'fa-thumb-tack' : 'none'; topicData['lock-icon'] = parseInt(topicData.locked, 10) === 1 ? 'fa-lock' : 'none'; @@ -720,18 +730,17 @@ var async = require('async'), topicData.teaser_pid = topicInfo.teaserInfo.pid; topicData.teaser_timestamp = topicInfo.teaserInfo.timestamp ? (new Date(parseInt(topicInfo.teaserInfo.timestamp, 10)).toISOString()) : ''; - if (isTopicVisible(topicData, topicInfo)) + if (isTopicVisible(topicData, topicInfo)) { retrieved_topics.push(topicData); + } - callback(null); + next(null); }); }); } async.eachSeries(tids, loadTopic, function(err) { - if (!err) { - callback(retrieved_topics); - } + callback(err, retrieved_topics); }); }