From 0164e51f9fdf76d128e261e2c46a793252073cf4 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 30 Aug 2019 14:20:54 -0400 Subject: [PATCH] refactor: sitemap to async/await --- src/sitemap.js | 176 ++++++++++++++++++++----------------------------- 1 file changed, 73 insertions(+), 103 deletions(-) diff --git a/src/sitemap.js b/src/sitemap.js index 183a91c4a2..e46cfbc373 100644 --- a/src/sitemap.js +++ b/src/sitemap.js @@ -1,53 +1,45 @@ 'use strict'; -var async = require('async'); const { Sitemap } = require('sitemap'); -var nconf = require('nconf'); +const nconf = require('nconf'); -var db = require('./database'); -var categories = require('./categories'); -var topics = require('./topics'); -var privileges = require('./privileges'); -var meta = require('./meta'); -var plugins = require('./plugins'); -var utils = require('./utils'); +const db = require('./database'); +const categories = require('./categories'); +const topics = require('./topics'); +const privileges = require('./privileges'); +const meta = require('./meta'); +const plugins = require('./plugins'); +const utils = require('./utils'); -var sitemap = module.exports; +const sitemap = module.exports; sitemap.maps = { topics: [], }; -sitemap.render = function (callback) { - var topicsPerPage = meta.config.sitemapTopics; - var returnData = { +sitemap.render = async function () { + const topicsPerPage = meta.config.sitemapTopics; + const returnData = { url: nconf.get('url'), topics: [], }; + const topicCount = await db.getObjectField('global', 'topicCount'); + const numPages = Math.ceil(Math.max(0, topicCount / topicsPerPage)); + for (var x = 1; x <= numPages; x += 1) { + returnData.topics.push(x); + } - async.waterfall([ - function (next) { - db.getObjectField('global', 'topicCount', next); - }, - function (topicCount, next) { - var numPages = Math.ceil(Math.max(0, topicCount / topicsPerPage)); - for (var x = 1; x <= numPages; x += 1) { - returnData.topics.push(x); - } - - next(null, returnData); - }, - ], callback); + return returnData; }; -sitemap.getPages = function (callback) { +sitemap.getPages = async function () { if ( sitemap.maps.pages && Date.now() < parseInt(sitemap.maps.pages.cacheSetTimestamp, 10) + parseInt(sitemap.maps.pages.cacheResetPeriod, 10) ) { - return callback(null, sitemap.maps.pages.toXML()); + return sitemap.maps.pages.toXML(); } - var urls = [{ + const urls = [{ url: '', changefreq: 'weekly', priority: 0.6, @@ -65,106 +57,84 @@ sitemap.getPages = function (callback) { priority: 0.4, }]; - plugins.fireHook('filter:sitemap.getPages', { urls: urls }, function (err, data) { - if (err) { - return callback(err); - } - sitemap.maps.pages = new Sitemap({ - hostname: nconf.get('url'), - cacheTime: 1000 * 60 * 60 * 24, // Cached for 24 hours - urls: data.urls, - }); - - callback(null, sitemap.maps.pages.toXML()); + const data = await plugins.fireHook('filter:sitemap.getPages', { urls: urls }); + sitemap.maps.pages = new Sitemap({ + hostname: nconf.get('url'), + cacheTime: 1000 * 60 * 60 * 24, // Cached for 24 hours + urls: data.urls, }); + + return sitemap.maps.pages.toXML(); }; -sitemap.getCategories = function (callback) { +sitemap.getCategories = async function () { if ( sitemap.maps.categories && Date.now() < parseInt(sitemap.maps.categories.cacheSetTimestamp, 10) + parseInt(sitemap.maps.categories.cacheResetPeriod, 10) ) { - return callback(null, sitemap.maps.categories.toXML()); + return sitemap.maps.categories.toXML(); } - var categoryUrls = []; - categories.getCategoriesByPrivilege('categories:cid', 0, 'find', function (err, categoriesData) { - if (err) { - return callback(err); + const categoryUrls = []; + const categoriesData = await categories.getCategoriesByPrivilege('categories:cid', 0, 'find'); + categoriesData.forEach(function (category) { + if (category) { + categoryUrls.push({ + url: '/category/' + category.slug, + changefreq: 'weekly', + priority: 0.4, + }); } - - categoriesData.forEach(function (category) { - if (category) { - categoryUrls.push({ - url: '/category/' + category.slug, - changefreq: 'weekly', - priority: 0.4, - }); - } - }); - - sitemap.maps.categories = new Sitemap({ - hostname: nconf.get('url'), - cacheTime: 1000 * 60 * 60 * 24, // Cached for 24 hours - urls: categoryUrls, - }); - - callback(null, sitemap.maps.categories.toXML()); }); + + sitemap.maps.categories = new Sitemap({ + hostname: nconf.get('url'), + cacheTime: 1000 * 60 * 60 * 24, // Cached for 24 hours + urls: categoryUrls, + }); + + return sitemap.maps.categories.toXML(); }; -sitemap.getTopicPage = function (page, callback) { +sitemap.getTopicPage = async function (page) { if (parseInt(page, 10) <= 0) { - return callback(); + return; } - var numTopics = meta.config.sitemapTopics; - var min = (parseInt(page, 10) - 1) * numTopics; - var max = min + numTopics; + const numTopics = meta.config.sitemapTopics; + const min = (parseInt(page, 10) - 1) * numTopics; + const max = min + numTopics; if ( sitemap.maps.topics[page - 1] && Date.now() < parseInt(sitemap.maps.topics[page - 1].cacheSetTimestamp, 10) + parseInt(sitemap.maps.topics[page - 1].cacheResetPeriod, 10) ) { - return callback(null, sitemap.maps.topics[page - 1].toXML()); + return sitemap.maps.topics[page - 1].toXML(); } - var topicUrls = []; + const topicUrls = []; + let tids = await db.getSortedSetRevRange('topics:recent', min, max); + tids = await privileges.topics.filterTids('topics:read', tids, 0); + const topicData = await topics.getTopicsFields(tids, ['tid', 'title', 'slug', 'lastposttime']); - async.waterfall([ - function (next) { - db.getSortedSetRevRange('topics:recent', min, max, next); - }, - function (tids, next) { - privileges.topics.filterTids('topics:read', tids, 0, next); - }, - function (tids, next) { - topics.getTopicsFields(tids, ['tid', 'title', 'slug', 'lastposttime'], next); - }, - ], function (err, topics) { - if (err) { - return callback(err); + topicData.forEach(function (topic) { + if (topic) { + topicUrls.push({ + url: '/topic/' + topic.slug, + lastmodISO: utils.toISOString(topic.lastposttime), + changefreq: 'daily', + priority: 0.6, + }); } - - topics.forEach(function (topic) { - if (topic) { - topicUrls.push({ - url: '/topic/' + topic.slug, - lastmodISO: utils.toISOString(topic.lastposttime), - changefreq: 'daily', - priority: 0.6, - }); - } - }); - - sitemap.maps.topics[page - 1] = new Sitemap({ - hostname: nconf.get('url'), - cacheTime: 1000 * 60 * 60, // Cached for 1 hour - urls: topicUrls, - }); - - callback(null, sitemap.maps.topics[page - 1].toXML()); }); + + sitemap.maps.topics[page - 1] = new Sitemap({ + hostname: nconf.get('url'), + cacheTime: 1000 * 60 * 60, // Cached for 1 hour + urls: topicUrls, + }); + + return sitemap.maps.topics[page - 1].toXML(); }; sitemap.clearCache = function () {