1
0
mirror of https://codeberg.org/teddit/teddit synced 2025-01-05 07:17:29 +01:00
teddit-reddit-frontend-alte.../inc/processSubredditAbout.js

120 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const config = require('../config');
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,
};
}
let key = `${subreddit}:sidebar`;
redis.get(key, (error, json) => {
if (error) {
console.error(
`Error getting the ${subreddit}:sidebar key from redis.`,
error
);
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
*/
/*
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 {
return null;
}
}
module.exports = processSubredditAbout;