change callback to await in processSubredditAbout
This commit is contained in:
parent
aae3e00ab1
commit
711f2450c7
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue