2020-11-17 21:44:32 +01:00
|
|
|
|
module.exports = function(fetch) {
|
|
|
|
|
var compilePostComments = require('./compilePostComments.js')();
|
|
|
|
|
var procPostMedia = require('./processPostMedia.js')();
|
2020-12-24 22:13:08 +01:00
|
|
|
|
this.processJsonPost = (json, parsed, user_preferences) => {
|
2020-11-17 21:44:32 +01:00
|
|
|
|
return new Promise(resolve => {
|
|
|
|
|
(async () => {
|
|
|
|
|
if(!parsed) {
|
|
|
|
|
json = JSON.parse(json)
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
let post = json[0].data.children[0].data
|
|
|
|
|
let post_id = post.name
|
|
|
|
|
let comments = json[1].data.children
|
|
|
|
|
|
|
|
|
|
let obj = {
|
|
|
|
|
author: post.author,
|
|
|
|
|
created: post.created_utc,
|
|
|
|
|
edited: post.edited,
|
|
|
|
|
is_video: post.is_video,
|
|
|
|
|
locked: post.locked,
|
2020-12-13 20:53:32 +01:00
|
|
|
|
link_flair_text: post.link_flair_text,
|
2020-11-17 21:44:32 +01:00
|
|
|
|
name: post_id,
|
|
|
|
|
num_comments: post.num_comments,
|
2020-12-23 15:52:51 +01:00
|
|
|
|
over_18: post.over_18,
|
2020-12-10 19:16:44 +01:00
|
|
|
|
permalink: teddifyUrl(post.permalink),
|
2020-11-17 21:44:32 +01:00
|
|
|
|
title: post.title,
|
2021-03-21 21:14:11 +01:00
|
|
|
|
url: teddifyUrl(post.url, user_preferences),
|
2020-11-17 21:44:32 +01:00
|
|
|
|
ups: post.ups,
|
|
|
|
|
id: post.id,
|
2020-12-04 22:33:40 +01:00
|
|
|
|
domain: post.domain,
|
2020-12-27 18:56:27 +01:00
|
|
|
|
contest_mode: post.contest_mode,
|
2021-03-18 18:31:41 +01:00
|
|
|
|
upvote_ratio: post.upvote_ratio,
|
2020-11-17 21:44:32 +01:00
|
|
|
|
comments: null,
|
|
|
|
|
has_media: false,
|
|
|
|
|
media: null,
|
|
|
|
|
images: null,
|
|
|
|
|
crosspost: false,
|
2020-12-21 12:27:31 +01:00
|
|
|
|
selftext: unescape(post.selftext_html),
|
2021-03-21 22:59:10 +01:00
|
|
|
|
poll_data: post.poll_data,
|
2020-12-24 22:13:08 +01:00
|
|
|
|
link_flair: (user_preferences.flairs != 'false' ? await formatLinkFlair(post) : ''),
|
|
|
|
|
user_flair: (user_preferences.flairs != 'false' ? await formatUserFlair(post) : '')
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
|
2021-02-19 20:29:39 +01:00
|
|
|
|
let valid_embed_video_domains = ['gfycat.com']
|
2020-11-17 21:44:32 +01:00
|
|
|
|
let has_gif = false
|
|
|
|
|
let gif_to_mp4 = null
|
|
|
|
|
let reddit_video = null
|
2021-02-19 20:29:39 +01:00
|
|
|
|
let embed_video = false
|
|
|
|
|
|
|
|
|
|
if(post.media)
|
|
|
|
|
if(valid_embed_video_domains.includes(post.media.type))
|
|
|
|
|
embed_video = true
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2021-02-19 20:29:39 +01:00
|
|
|
|
if(post.preview && !embed_video) {
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(post.preview.reddit_video_preview) {
|
|
|
|
|
if(post.preview.reddit_video_preview.is_gif) {
|
|
|
|
|
has_gif = true
|
|
|
|
|
gif_url = post.preview.reddit_video_preview.fallback_url
|
|
|
|
|
} else {
|
|
|
|
|
let file_ext = getFileExtension(post.preview.reddit_video_preview.fallback_url)
|
|
|
|
|
if(file_ext === 'mp4') {
|
|
|
|
|
post.media = true
|
|
|
|
|
reddit_video = post.preview.reddit_video_preview
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(post.preview.images) {
|
|
|
|
|
if(post.preview.images[0].source) {
|
|
|
|
|
let file_ext = getFileExtension(post.preview.images[0].source.url)
|
|
|
|
|
if(file_ext === 'gif') {
|
|
|
|
|
has_gif = true
|
|
|
|
|
let resolutions = post.preview.images[0].variants.mp4.resolutions
|
|
|
|
|
gif_to_mp4 = resolutions[resolutions.length - 1]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj = await processPostMedia(obj, post, post.media, has_gif, reddit_video, gif_to_mp4)
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(post.crosspost_parent_list) {
|
|
|
|
|
post.crosspost = post.crosspost_parent_list[0]
|
|
|
|
|
}
|
|
|
|
|
if(post.crosspost) {
|
|
|
|
|
obj = await processPostMedia(obj, post.crosspost, post.crosspost.media, has_gif, reddit_video, gif_to_mp4)
|
|
|
|
|
obj.crosspost = {
|
|
|
|
|
author: post.crosspost.author,
|
|
|
|
|
created: post.crosspost.created_utc,
|
|
|
|
|
subreddit: post.crosspost.subreddit,
|
|
|
|
|
title: post.crosspost.title,
|
|
|
|
|
name: post.crosspost.name,
|
|
|
|
|
num_comments: post.crosspost.num_comments,
|
2020-12-23 15:52:51 +01:00
|
|
|
|
over_18: post.crosspost.over_18,
|
2020-11-17 21:44:32 +01:00
|
|
|
|
id: post.crosspost.id,
|
2020-12-10 19:16:44 +01:00
|
|
|
|
permalink: teddifyUrl(post.crosspost.permalink),
|
2020-11-17 21:44:32 +01:00
|
|
|
|
ups: post.crosspost.ups,
|
|
|
|
|
selftext: unescape(post.selftext_html),
|
|
|
|
|
selftext_crosspost: unescape(post.crosspost.selftext_html),
|
2021-03-21 22:59:10 +01:00
|
|
|
|
poll_data: post.poll_data,
|
2020-12-21 12:27:31 +01:00
|
|
|
|
is_crosspost: true,
|
2020-12-24 22:13:08 +01:00
|
|
|
|
user_flair: (user_preferences.flairs != 'false' ? await formatUserFlair(post) : '')
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(post.preview && !obj.has_media) {
|
|
|
|
|
obj.images = {
|
|
|
|
|
source: await downloadAndSave(post.preview.images[0].source.url)
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(obj.media) {
|
|
|
|
|
if(obj.media.source === 'external') {
|
|
|
|
|
if(post.preview) {
|
|
|
|
|
obj.images = {
|
|
|
|
|
source: await downloadAndSave(post.preview.images[0].source.url)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(post.gallery_data) {
|
|
|
|
|
obj.gallery = true
|
|
|
|
|
obj.gallery_items = []
|
|
|
|
|
for(var i = 0; i < post.gallery_data.items.length; i++) {
|
|
|
|
|
let id = post.gallery_data.items[i].media_id
|
|
|
|
|
if(post.media_metadata[id]) {
|
2021-01-19 21:09:50 +01:00
|
|
|
|
if(post.media_metadata[id].p[0]) {
|
|
|
|
|
let item = { source: null, thumbnail: null, large: null }
|
|
|
|
|
if(post.media_metadata[id].s && post.media_metadata[id].p[0].u) {
|
|
|
|
|
item = {
|
|
|
|
|
type: post.media_metadata[id].e,
|
|
|
|
|
source: await downloadAndSave(post.media_metadata[id].s.u),
|
|
|
|
|
thumbnail: await downloadAndSave(post.media_metadata[id].p[0].u),
|
|
|
|
|
large: await downloadAndSave(post.media_metadata[id].p[post.media_metadata[id].p.length - 1].u),
|
|
|
|
|
}
|
2021-01-04 20:04:00 +01:00
|
|
|
|
}
|
2021-01-19 21:09:50 +01:00
|
|
|
|
obj.gallery_items.push(item)
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
let comms = []
|
|
|
|
|
for(var i = 0; i < comments.length; i++) {
|
|
|
|
|
let comment = comments[i].data
|
|
|
|
|
let kind = comments[i].kind
|
|
|
|
|
let obj = {}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(kind !== 'more') {
|
|
|
|
|
obj = {
|
|
|
|
|
author: comment.author,
|
|
|
|
|
body_html: comment.body_html,
|
|
|
|
|
parent_id: comment.parent_id,
|
|
|
|
|
created: comment.created_utc,
|
|
|
|
|
edited: comment.edited,
|
|
|
|
|
score: comment.score,
|
|
|
|
|
ups: comment.ups,
|
|
|
|
|
id: comment.id,
|
2020-12-10 19:16:44 +01:00
|
|
|
|
permalink: teddifyUrl(comment.permalink),
|
2020-11-22 14:09:43 +01:00
|
|
|
|
stickied: comment.stickied,
|
|
|
|
|
distinguished: comment.distinguished,
|
2020-11-22 19:57:17 +01:00
|
|
|
|
score_hidden: comment.score_hidden,
|
2020-11-22 20:08:20 +01:00
|
|
|
|
edited: comment.edited,
|
2020-12-17 23:17:20 +01:00
|
|
|
|
replies: [],
|
2020-12-21 12:27:31 +01:00
|
|
|
|
depth: 0,
|
2021-01-04 22:50:47 +01:00
|
|
|
|
user_flair: (user_preferences.flairs != 'false' ? await formatUserFlair(comment) : ''),
|
|
|
|
|
controversiality: (user_preferences.highlight_controversial != 'false' ? comment.controversiality : '')
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
obj = {
|
|
|
|
|
type: 'load_more',
|
|
|
|
|
count: comment.count,
|
|
|
|
|
id: comment.id,
|
|
|
|
|
parent_id: comment.parent_id,
|
|
|
|
|
post_id: post.name,
|
|
|
|
|
children: []
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(comment.replies && kind !== 'more') {
|
|
|
|
|
if(comment.replies.data) {
|
|
|
|
|
if(comment.replies.data.children.length > 0) {
|
2020-12-24 22:13:08 +01:00
|
|
|
|
obj.replies = await processReplies(comment.replies.data.children, post_id, 1, user_preferences)
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(comment.children) {
|
|
|
|
|
for(var j = 0; j < comment.children.length; j++) {
|
|
|
|
|
obj.children.push(comment.children[j])
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
comms.push(obj)
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
obj.comments = comms
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
resolve(obj)
|
|
|
|
|
})()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-16 18:07:27 +01:00
|
|
|
|
this.finalizeJsonPost = async (processed_json, post_id, post_url, morechildren_ids, viewing_comment, user_preferences) => {
|
2020-11-17 21:44:32 +01:00
|
|
|
|
let comments_html = `<div class="comments">`
|
|
|
|
|
let comments = processed_json.comments
|
|
|
|
|
for(var i = 0; i < comments.length; i++) {
|
|
|
|
|
let next_comment
|
|
|
|
|
if(comments[i+1]) {
|
|
|
|
|
next_comment = comments[i+1]
|
|
|
|
|
}
|
2021-03-16 18:07:27 +01:00
|
|
|
|
comments_html += await compilePostCommentsHtml(comments[i], next_comment, post_id, post_url, morechildren_ids, processed_json.author, viewing_comment, user_preferences)
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
comments_html += `</div>`
|
|
|
|
|
|
|
|
|
|
delete processed_json['comments']
|
|
|
|
|
let post_data = processed_json
|
|
|
|
|
return { post_data: post_data, comments: comments_html }
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-24 22:13:08 +01:00
|
|
|
|
this.processReplies = async (data, post_id, depth, user_preferences) => {
|
2020-11-17 21:44:32 +01:00
|
|
|
|
let return_replies = []
|
|
|
|
|
for(var i = 0; i < data.length; i++) {
|
|
|
|
|
let kind = data[i].kind
|
|
|
|
|
let reply = data[i].data
|
|
|
|
|
let obj = {}
|
|
|
|
|
if(kind !== 'more') {
|
|
|
|
|
obj = {
|
|
|
|
|
author: reply.author,
|
|
|
|
|
body_html: reply.body_html,
|
|
|
|
|
parent_id: reply.parent_id,
|
|
|
|
|
created: reply.created_utc,
|
|
|
|
|
edited: reply.edited,
|
|
|
|
|
score: reply.score,
|
|
|
|
|
ups: reply.ups,
|
|
|
|
|
id: reply.id,
|
2020-12-10 19:16:44 +01:00
|
|
|
|
permalink: teddifyUrl(reply.permalink),
|
2020-11-22 14:09:43 +01:00
|
|
|
|
stickied: reply.stickied,
|
|
|
|
|
distinguished: reply.distinguished,
|
2020-11-22 19:57:17 +01:00
|
|
|
|
score_hidden: reply.score_hidden,
|
2020-11-22 20:08:20 +01:00
|
|
|
|
edited: reply.edited,
|
2020-12-17 23:17:20 +01:00
|
|
|
|
replies: [],
|
2020-12-21 12:27:31 +01:00
|
|
|
|
depth: depth,
|
2021-01-04 22:50:47 +01:00
|
|
|
|
user_flair: (user_preferences.flairs != 'false' ? await formatUserFlair(reply) : ''),
|
|
|
|
|
controversiality: (user_preferences.highlight_controversial != 'false' ? reply.controversiality : '')
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
obj = {
|
|
|
|
|
type: 'load_more',
|
|
|
|
|
count: reply.count,
|
|
|
|
|
id: reply.id,
|
|
|
|
|
parent_id: reply.parent_id,
|
|
|
|
|
post_id: post_id,
|
2020-12-17 23:17:20 +01:00
|
|
|
|
children: [],
|
|
|
|
|
depth: depth
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(reply.replies && kind !== 'more') {
|
|
|
|
|
if(reply.replies.data.children.length) {
|
|
|
|
|
for(var j = 0; j < reply.replies.data.children.length; j++) {
|
|
|
|
|
let comment = reply.replies.data.children[j].data
|
|
|
|
|
let objct = {}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(comment.author && comment.body_html) {
|
|
|
|
|
objct = {
|
|
|
|
|
author: comment.author,
|
|
|
|
|
body_html: comment.body_html,
|
|
|
|
|
parent_id: comment.parent_id,
|
|
|
|
|
created: comment.created_utc,
|
|
|
|
|
edited: comment.edited,
|
|
|
|
|
score: comment.score,
|
|
|
|
|
ups: comment.ups,
|
|
|
|
|
id: comment.id,
|
2020-12-10 19:16:44 +01:00
|
|
|
|
permalink: teddifyUrl(comment.permalink),
|
2020-11-22 19:57:17 +01:00
|
|
|
|
score_hidden: comment.score_hidden,
|
|
|
|
|
distinguished: comment.distinguished,
|
2020-11-22 20:08:20 +01:00
|
|
|
|
distinguished: comment.edited,
|
2020-12-17 23:17:20 +01:00
|
|
|
|
replies: [],
|
2020-12-21 12:27:31 +01:00
|
|
|
|
depth: depth + 1,
|
2021-01-04 22:50:47 +01:00
|
|
|
|
user_flair: (user_preferences.flairs != 'false' ? await formatUserFlair(comment) : ''),
|
|
|
|
|
controversiality: (user_preferences.highlight_controversial != 'false' ? comment.controversiality : '')
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
objct = {
|
|
|
|
|
type: 'load_more',
|
|
|
|
|
count: comment.count,
|
|
|
|
|
id: comment.id,
|
|
|
|
|
parent_id: comment.parent_id,
|
|
|
|
|
post_id: post_id,
|
2020-12-17 23:17:20 +01:00
|
|
|
|
children: [],
|
|
|
|
|
depth: depth + 1
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
if(comment.children) {
|
|
|
|
|
for(var k = 0; k < comment.children.length; k++) {
|
|
|
|
|
objct.children.push(comment.children[k])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(comment.replies) {
|
|
|
|
|
if(comment.replies.data) {
|
|
|
|
|
if(comment.replies.data.children.length > 0) {
|
2020-12-24 22:13:08 +01:00
|
|
|
|
objct.replies = await processReplies(comment.replies.data.children, post_id, depth, user_preferences)
|
2020-11-17 21:44:32 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj.replies.push(objct)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
if(reply.children) {
|
|
|
|
|
for(var j = 0; j < reply.children.length; j++) {
|
|
|
|
|
obj.children.push(reply.children[j])
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-21 12:27:31 +01:00
|
|
|
|
|
2020-11-17 21:44:32 +01:00
|
|
|
|
return_replies.push(obj)
|
|
|
|
|
}
|
|
|
|
|
return return_replies
|
|
|
|
|
}
|
|
|
|
|
}
|