diff --git a/inc/processSubredditAbout.js b/inc/processSubredditAbout.js index f6505af..0800f14 100644 --- a/inc/processSubredditAbout.js +++ b/inc/processSubredditAbout.js @@ -1,116 +1,64 @@ const config = require('../config'); +const { redisAsync } = require('./redis'); + +function returnRelevantKeys(json) { + return { + title: json.data.title, + public_description_html: json.data.public_description_html, + active_user_count: json.data.active_user_count, + subscribers: json.data.subscribers, + created_utc: json.data.created_utc, + over18: json.data.over18, + description_html: json.data.description_html, + moderators: json.moderators, + }; +} async function processSubredditAbout(subreddit, redis, fetch, RedditAPI) { if (subreddit && !subreddit.includes('+') && subreddit !== 'all') { - function returnRelevantKeys(json) { - return { - title: json.data.title, - public_description_html: json.data.public_description_html, - active_user_count: json.data.active_user_count, - subscribers: json.data.subscribers, - created_utc: json.data.created_utc, - over18: json.data.over18, - description_html: json.data.description_html, - moderators: json.moderators, - }; - } + const key = `${subreddit}:sidebar`; - let key = `${subreddit}:sidebar`; - redis.get(key, (error, json) => { - if (error) { - console.error( - `Error getting the ${subreddit}:sidebar key from redis.`, - error + try { + const cached = await redisAsync.get(key); + + if (cached !== null) { + return returnRelevantKeys(JSON.parse(cached)); + } + + let url = `https://reddit.com/r/${subreddit}/about.json`; + + if (config.use_reddit_oauth) { + url = `https://oauth.reddit.com/r/${subreddit}/about`; + } + + const subredditAboutRequest = await fetch(url, redditApiGETHeaders()); + + if (subredditAboutRequest.ok) { + let response = await subredditAboutRequest.json(); + response.moderators = []; + + await redisAsync.setex( + key, + config.setexs.sidebar, + JSON.stringify(response) ); + + console.log(`Fetched sidebar for ${subreddit} from reddit API`); + + return returnRelevantKeys(response); + } else { + console.error( + `Something went wrong while fetching data from reddit API: + ${subredditAboutRequest.status} – ${subredditAboutRequest.statusText}` + ); + console.error(config.reddit_api_error_text); return null; } - if (json) { - json = JSON.parse(json); - return returnRelevantKeys(json); - } else { - let url = `https://reddit.com/r/${subreddit}/about.json`; - if (config.use_reddit_oauth) { - url = `https://oauth.reddit.com/r/${subreddit}/about`; - } - fetch(encodeURI(url), redditApiGETHeaders()) - .then((result) => { - if (result.status === 200) { - result.json().then((json) => { - json.moderators = []; - redis.setex( - key, - config.setexs.sidebar, - JSON.stringify(json), - (error) => { - if (error) { - console.error( - 'Error setting the sidebar key to redis.', - error - ); - return res.render('index', { - json: null, - user_preferences: req.cookies, - }); - } else { - console.log('Fetched the sidebar from reddit API.'); - let moderators_url = `https://reddit.com/r/${subreddit}/about/moderators.json`; - if (config.use_reddit_oauth) { - moderators_url = `https://oauth.reddit.com/r/${subreddit}/about/moderators`; - } - return returnRelevantKeys(json); - /* - * The following code is commented out because Reddit doesn't - * anymore support fetching moderators for subreddits - * when not logged in. - * This might change in the future though. - * https://codeberg.org/teddit/teddit/issues/207 - */ + } catch (error) { + console.error('Error fetching the sidebar: ', error); - /* - fetch(encodeURI(moderators_url), redditApiGETHeaders()) - .then(mod_result => { - if(mod_result.status === 200) { - mod_result.json() - .then(mod_json => { - json.moderators = mod_json - redis.setex(key, config.setexs.sidebar, JSON.stringify(json), (error) => { - if(error) { - console.error('Error setting the sidebar with moderators key to redis.', error) - return res.render('index', { json: null, user_preferences: req.cookies }) - } else { - console.log('Fetched the moderators from reddit API.') - return(returnRelevantKeys(json)) - } - }) - }) - } else { - console.error(`Something went wrong while fetching moderators data from reddit API. ${mod_result.status} – ${mod_result.statusText}`) - console.error(config.reddit_api_error_text) - return(returnRelevantKeys(json)) - } - }).catch(error => { - console.error('Error fetching moderators.', error) - return(returnRelevantKeys(json)) - }) - */ - } - } - ); - }); - } else { - console.error( - `Something went wrong while fetching data from reddit API. ${result.status} – ${result.statusText}` - ); - console.error(config.reddit_api_error_text); - return null; - } - }) - .catch((error) => { - console.error('Error fetching the sidebar.', error); - return null; - }); - } - }); + return null; + } } else { return null; }