From 7e89eadb36a36caad76a4c3f0cc2899779d61862 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sat, 13 Jan 2024 22:27:02 -0500 Subject: [PATCH] feat: flesh out more topic info, fix navigator --- src/activitypub/index.js | 1 + src/activitypub/notes.js | 6 ++++++ src/controllers/activitypub/topics.js | 17 +++++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/activitypub/index.js b/src/activitypub/index.js index fe7f1801c4..c42663c9ca 100644 --- a/src/activitypub/index.js +++ b/src/activitypub/index.js @@ -176,6 +176,7 @@ ActivityPub.get = async (uid, uri) => { } const headers = uid > 0 ? await ActivityPub.sign(uid, uri) : {}; + winston.verbose(`[activitypub/get] ${uri}`); const { response, body } = await request.get(uri, { headers: { ...headers, diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index c64b46aec3..4dbca8fe4e 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -70,6 +70,11 @@ Notes.assertTopic = async (uid, id) => { sorted.map(n => n.timestamp), ]; + const postercount = chain.reduce((set, cur) => { + set.add(cur.uid); + return set; + }, new Set()); + await Promise.all([ db.setObject(`topicRemote:${tid}`, { tid, @@ -79,6 +84,7 @@ Notes.assertTopic = async (uid, id) => { title: 'TBD', slug: `remote?resource=${encodeURIComponent(tid)}`, postcount: sorted.length, + postercount, }), db.sortedSetAdd(`tidRemote:${tid}:posts`, timestamps, ids), Notes.assert(uid, chain), diff --git a/src/controllers/activitypub/topics.js b/src/controllers/activitypub/topics.js index da45e2a709..5bcb466299 100644 --- a/src/controllers/activitypub/topics.js +++ b/src/controllers/activitypub/topics.js @@ -1,18 +1,21 @@ 'use strict'; +const nconf = require('nconf'); + +const db = require('../../database'); const user = require('../../user'); const topics = require('../../topics'); const { notes } = require('../../activitypub'); // const helpers = require('../helpers'); -// const pagination = require('../../pagination'); +const pagination = require('../../pagination'); const controller = module.exports; controller.get = async function (req, res, next) { const tid = await notes.assertTopic(req.uid, req.query.resource); - let postIndex = parseInt(req.params.post_index, 10) || 1; + let postIndex = await db.sortedSetRank(`tidRemote:${tid}:posts`, req.query.resource); const [ // userPrivileges, settings, @@ -51,8 +54,18 @@ controller.get = async function (req, res, next) { const { start, stop } = calculateStartStop(currentPage, postIndex, settings); topicData.posts = await notes.getTopicPosts(tid, req.uid, start, stop); + await topics.calculatePostIndices(topicData.posts, start - 1); topicData.posts = await topics.addPostData(topicData.posts, req.uid); + await topics.increaseViewCount(req, tid); + + topicData.postIndex = postIndex; + topicData.pagination = pagination.create(currentPage, pageCount, req.query); + topicData.pagination.rel.forEach((rel) => { + rel.href = `${nconf.get('url')}/topic/${topicData.slug}${rel.href}`; + res.locals.linkTags.push(rel); + }); + res.render('topic', topicData); };