change callback to await in processSubredditAbout

This commit is contained in:
json 2021-09-08 09:32:26 +01:00
parent aae3e00ab1
commit 711f2450c7
1 changed files with 52 additions and 104 deletions

View File

@ -1,116 +1,64 @@
const config = require('../config'); 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) { async function processSubredditAbout(subreddit, redis, fetch, RedditAPI) {
if (subreddit && !subreddit.includes('+') && subreddit !== 'all') { if (subreddit && !subreddit.includes('+') && subreddit !== 'all') {
function returnRelevantKeys(json) { const key = `${subreddit}:sidebar`;
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`; try {
redis.get(key, (error, json) => { const cached = await redisAsync.get(key);
if (error) {
console.error( if (cached !== null) {
`Error getting the ${subreddit}:sidebar key from redis.`, return returnRelevantKeys(JSON.parse(cached));
error }
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; return null;
} }
if (json) { } catch (error) {
json = JSON.parse(json); console.error('Error fetching the sidebar: ', error);
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
*/
/* return null;
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;
});
}
});
} else { } else {
return null; return null;
} }