convert processSubredditAbout to async function

This commit is contained in:
json 2021-09-07 14:24:10 +01:00
parent 1c7a3a8f5a
commit aae3e00ab1
2 changed files with 114 additions and 101 deletions

View File

@ -1,106 +1,119 @@
module.exports = function() { const config = require('../config');
const config = require('../config')
this.processSubredditAbout = (subreddit, redis, fetch, RedditAPI) => {
return new Promise(resolve => {
(async () => {
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
}
}
let key = `${subreddit}:sidebar` async function processSubredditAbout(subreddit, redis, fetch, RedditAPI) {
redis.get(key, (error, json) => { if (subreddit && !subreddit.includes('+') && subreddit !== 'all') {
if(error) { function returnRelevantKeys(json) {
console.error(`Error getting the ${subreddit}:sidebar key from redis.`, error) return {
resolve(null) title: json.data.title,
} public_description_html: json.data.public_description_html,
if(json) { active_user_count: json.data.active_user_count,
json = JSON.parse(json) subscribers: json.data.subscribers,
resolve(returnRelevantKeys(json)) created_utc: json.data.created_utc,
} else { over18: json.data.over18,
let url = `https://reddit.com/r/${subreddit}/about.json` description_html: json.data.description_html,
if(config.use_reddit_oauth) { moderators: json.moderators,
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`
}
resolve(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
*/
/* let key = `${subreddit}:sidebar`;
fetch(encodeURI(moderators_url), redditApiGETHeaders()) redis.get(key, (error, json) => {
.then(mod_result => { if (error) {
if(mod_result.status === 200) { console.error(
mod_result.json() `Error getting the ${subreddit}:sidebar key from redis.`,
.then(mod_json => { error
json.moderators = mod_json );
redis.setex(key, config.setexs.sidebar, JSON.stringify(json), (error) => { return null;
if(error) { }
console.error('Error setting the sidebar with moderators key to redis.', error) if (json) {
return res.render('index', { json: null, user_preferences: req.cookies }) json = JSON.parse(json);
} else { return returnRelevantKeys(json);
console.log('Fetched the moderators from reddit API.') } else {
resolve(returnRelevantKeys(json)) let url = `https://reddit.com/r/${subreddit}/about.json`;
} if (config.use_reddit_oauth) {
}) url = `https://oauth.reddit.com/r/${subreddit}/about`;
}) }
} else { fetch(encodeURI(url), redditApiGETHeaders())
console.error(`Something went wrong while fetching moderators data from reddit API. ${mod_result.status} ${mod_result.statusText}`) .then((result) => {
console.error(config.reddit_api_error_text) if (result.status === 200) {
resolve(returnRelevantKeys(json)) result.json().then((json) => {
} json.moderators = [];
}).catch(error => { redis.setex(
console.error('Error fetching moderators.', error) key,
resolve(returnRelevantKeys(json)) 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
*/
/*
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) }
resolve(null) );
} });
}).catch(error => { } else {
console.error('Error fetching the sidebar.', error) console.error(
resolve(null) `Something went wrong while fetching data from reddit API. ${result.status} ${result.statusText}`
}) );
console.error(config.reddit_api_error_text);
return null;
} }
}) })
} else { .catch((error) => {
resolve(null) console.error('Error fetching the sidebar.', error);
} return null;
})() });
}) }
});
} else {
return null;
} }
} }
module.exports = processSubredditAbout;

View File

@ -6,7 +6,7 @@ const {
processJsonPost, processJsonPost,
finalizeJsonPost, finalizeJsonPost,
} = require('../inc/processJsonPost.js'); } = require('../inc/processJsonPost.js');
const processAbout = require('../inc/processSubredditAbout.js')(); const processSubredditAbout = require('../inc/processSubredditAbout.js');
const tedditApiUser = require('../inc/teddit_api/handleUser.js')(); const tedditApiUser = require('../inc/teddit_api/handleUser.js')();
const processSearches = require('../inc/processSearchResults.js')(); const processSearches = require('../inc/processSearchResults.js')();
const processSubreddit = require('../inc/processJsonSubreddit.js')(); const processSubreddit = require('../inc/processJsonSubreddit.js')();