mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-30 18:46:01 +01:00 
			
		
		
		
	feat: some additional work to properly save and retrieve remote topic data
This commit is contained in:
		| @@ -38,17 +38,17 @@ Notes.getParentChain = async (uid, input) => { | |||||||
| 	const traverse = async (uid, id) => { | 	const traverse = async (uid, id) => { | ||||||
| 		const exists = await db.exists(`post:${id}`); | 		const exists = await db.exists(`post:${id}`); | ||||||
| 		if (exists) { | 		if (exists) { | ||||||
| 			const { toPid, timestamp } = await posts.getPostFields(id, ['toPid', 'timestamp']); | 			const postData = await posts.getPostData(id); | ||||||
| 			chain.add({ id, timestamp }); | 			chain.add(postData); | ||||||
| 			if (toPid) { | 			if (postData.toPid) { | ||||||
| 				await traverse(uid, toPid); | 				await traverse(uid, postData.toPid); | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			let object = await activitypub.get(uid, id); | 			let object = await activitypub.get(uid, id); | ||||||
| 			object = await activitypub.mocks.post(object); | 			object = await activitypub.mocks.post(object); | ||||||
| 			if (object) { | 			if (object) { | ||||||
| 				chain.add({ id, timestamp: object.timestamp }); | 				chain.add(object); | ||||||
| 				if (object.hasOwnProperty('toPid') && object.toPid) { | 				if (object.toPid) { | ||||||
| 					await traverse(uid, object.toPid); | 					await traverse(uid, object.toPid); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @@ -62,7 +62,7 @@ Notes.getParentChain = async (uid, input) => { | |||||||
| Notes.assertTopic = async (uid, id) => { | Notes.assertTopic = async (uid, id) => { | ||||||
| 	// Given the id of any post, traverses up (and soon, down) to cache the entire threaded context | 	// Given the id of any post, traverses up (and soon, down) to cache the entire threaded context | ||||||
| 	const chain = Array.from(await Notes.getParentChain(uid, id)); | 	const chain = Array.from(await Notes.getParentChain(uid, id)); | ||||||
| 	const tid = chain[chain.length - 1].id; | 	const tid = chain[chain.length - 1].pid; | ||||||
|  |  | ||||||
| 	const sorted = chain.sort((a, b) => a.timestamp - b.timestamp); | 	const sorted = chain.sort((a, b) => a.timestamp - b.timestamp); | ||||||
| 	const [ids, timestamps] = [ | 	const [ids, timestamps] = [ | ||||||
| @@ -70,13 +70,24 @@ Notes.assertTopic = async (uid, id) => { | |||||||
| 		sorted.map(n => n.timestamp), | 		sorted.map(n => n.timestamp), | ||||||
| 	]; | 	]; | ||||||
|  |  | ||||||
| 	await db.sortedSetAdd(`topicRemote:${tid}`, timestamps, ids); | 	await Promise.all([ | ||||||
| 	await Notes.assert(uid, chain); | 		db.setObject(`topicRemote:${tid}`, { | ||||||
|  | 			tid, | ||||||
|  | 			uid, | ||||||
|  | 			cid: -1, | ||||||
|  | 			mainPid: tid, | ||||||
|  | 			title: 'TBD', | ||||||
|  | 			slug: `remote?resource=${encodeURIComponent(tid)}`, | ||||||
|  | 			postcount: sorted.length, | ||||||
|  | 		}), | ||||||
|  | 		db.sortedSetAdd(`tidRemote:${tid}:posts`, timestamps, ids), | ||||||
|  | 		Notes.assert(uid, chain), | ||||||
|  | 	]); | ||||||
|  |  | ||||||
| 	return tid; | 	return tid; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| Notes.getTopicPosts = async (tid, uid, start, stop) => { | Notes.getTopicPosts = async (tid, uid, start, stop) => { | ||||||
| 	const pids = await db.getSortedSetRange(`topicRemote:${tid}`, start, stop); | 	const pids = await db.getSortedSetRange(`tidRemote:${tid}:posts`, start, stop); | ||||||
| 	return await posts.getPostsByPids(pids, uid); | 	return await posts.getPostsByPids(pids, uid); | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -23,11 +23,8 @@ controller.get = async function (req, res, next) { | |||||||
| 		// topics.getTopicData(tid), | 		// topics.getTopicData(tid), | ||||||
| 	]); | 	]); | ||||||
|  |  | ||||||
| 	const topicData = { | 	const topicData = await topics.getTopicData(tid); | ||||||
| 		tid, | 	topicData.category = {}; // todo | ||||||
| 		postCount: 6, |  | ||||||
| 		category: {}, // todo |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	let currentPage = parseInt(req.query.page, 10) || 1; | 	let currentPage = parseInt(req.query.page, 10) || 1; | ||||||
| 	const pageCount = Math.max(1, Math.ceil((topicData && topicData.postcount) / settings.postsPerPage)); | 	const pageCount = Math.max(1, Math.ceil((topicData && topicData.postcount) / settings.postsPerPage)); | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ const categories = require('../categories'); | |||||||
| const utils = require('../utils'); | const utils = require('../utils'); | ||||||
| const translator = require('../translator'); | const translator = require('../translator'); | ||||||
| const plugins = require('../plugins'); | const plugins = require('../plugins'); | ||||||
|  | const activitypub = require('../activitypub'); | ||||||
|  |  | ||||||
| const intFields = [ | const intFields = [ | ||||||
| 	'tid', 'cid', 'uid', 'mainPid', 'postcount', | 	'tid', 'cid', 'uid', 'mainPid', 'postcount', | ||||||
| @@ -26,7 +27,7 @@ module.exports = function (Topics) { | |||||||
| 			fields.push('timestamp'); | 			fields.push('timestamp'); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		const keys = tids.map(tid => `topic:${tid}`); | 		const keys = tids.map(tid => `${activitypub.helpers.isUri(tid) ? 'topicRemote' : 'topic'}:${tid}`); | ||||||
| 		const topics = await db.getObjects(keys, fields); | 		const topics = await db.getObjects(keys, fields); | ||||||
| 		const result = await plugins.hooks.fire('filter:topic.getFields', { | 		const result = await plugins.hooks.fire('filter:topic.getFields', { | ||||||
| 			tids: tids, | 			tids: tids, | ||||||
| @@ -95,6 +96,10 @@ function modifyTopic(topic, fields) { | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (activitypub.helpers.isUri(topic.tid)) { | ||||||
|  | 		intFields.splice(intFields.indexOf('uid'), 1); | ||||||
|  | 		intFields.splice(intFields.indexOf('tid'), 1); | ||||||
|  | 	} | ||||||
| 	db.parseIntFields(topic, intFields, fields); | 	db.parseIntFields(topic, intFields, fields); | ||||||
|  |  | ||||||
| 	if (topic.hasOwnProperty('title')) { | 	if (topic.hasOwnProperty('title')) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user