mirror of
https://codeberg.org/tacerus/teddit.git
synced 2024-11-22 23:09:28 +01:00
96 lines
4.4 KiB
JavaScript
96 lines
4.4 KiB
JavaScript
module.exports = function() {
|
||
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`
|
||
redis.get(key, (error, json) => {
|
||
if(error) {
|
||
console.error(`Error getting the ${subreddit}:sidebar key from redis.`, error)
|
||
resolve(null)
|
||
}
|
||
if(json) {
|
||
json = JSON.parse(json)
|
||
resolve(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`
|
||
}
|
||
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.')
|
||
resolve(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)
|
||
resolve(returnRelevantKeys(json))
|
||
}
|
||
}).catch(error => {
|
||
console.error('Error fetching moderators.', error)
|
||
resolve(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 => {
|
||
console.error('Error fetching the sidebar.', error)
|
||
resolve(null)
|
||
})
|
||
}
|
||
})
|
||
} else {
|
||
resolve(null)
|
||
}
|
||
})()
|
||
})
|
||
}
|
||
}
|