diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index cd724ada1..df2c4b316 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.32.2", + "version": "2.32.3", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/discussion.ts b/packages/hydrooj/src/handler/discussion.ts index effe9d12a..27c9f8606 100644 --- a/packages/hydrooj/src/handler/discussion.ts +++ b/packages/hydrooj/src/handler/discussion.ts @@ -187,6 +187,12 @@ class DiscussionDetailHandler extends DiscussionHandler { if (drdoc.reply) uids.push(...drdoc.reply.map((drrdoc) => drrdoc.owner)); } const udict = await user.getList(domainId, uids); + if (!dsdoc.view) { + await Promise.all([ + discussion.inc(domainId, did, 'views', 1), + discussion.setStatus(domainId, did, this.user._id, { view: true }), + ]); + } const path = [ ['Hydro', 'homepage'], ['discussion_main', 'discussion_main'], diff --git a/packages/hydrooj/src/model/discussion.ts b/packages/hydrooj/src/model/discussion.ts index 08d1d5a87..ba8332e93 100644 --- a/packages/hydrooj/src/model/discussion.ts +++ b/packages/hydrooj/src/model/discussion.ts @@ -9,6 +9,7 @@ import TaskModel from './task'; import { DiscussionNodeNotFoundError, DocumentNotFoundError } from '../error'; import { DiscussionReplyDoc, DiscussionTailReplyDoc, Document } from '../interface'; import { buildProjection } from '../utils'; +import { NumberKeys } from '../typeutils'; import * as bus from '../service/bus'; export interface DiscussionDoc extends Document { } @@ -112,6 +113,12 @@ export function edit( return document.set(domainId, document.TYPE_DISCUSSION, did, payload); } +export function inc( + domainId: string, did: ObjectID, key: NumberKeys, value: number, +): Promise { + return document.inc(domainId, document.TYPE_DISCUSSION, did, key, value); +} + export function del(domainId: string, did: ObjectID): Promise { return Promise.all([ document.deleteOne(domainId, document.TYPE_DISCUSSION, did), @@ -221,6 +228,10 @@ export function getStatus(domainId: string, did: ObjectID, uid: number) { return document.getStatus(domainId, document.TYPE_DISCUSSION, did, uid); } +export function setStatus(domainId: string, did: ObjectID, uid: number, $set) { + return document.setStatus(domainId, document.TYPE_DISCUSSION, did, uid, $set); +} + export function addNode(domainId: string, _id: string, category: string, args: any = {}) { return document.add( domainId, category, 1, document.TYPE_DISCUSSION_NODE, @@ -327,6 +338,7 @@ global.Hydro.model.discussion = { add, get, + inc, edit, del, count, @@ -344,6 +356,7 @@ global.Hydro.model.discussion = { react, setStar, getStatus, + setStatus, addNode, getNode, getNodes, diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 88eeed712..f364bdbda 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.16.1", + "version": "4.16.2", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/discussion_detail.html b/packages/ui-default/templates/discussion_detail.html index b1cd6b82c..26fca335b 100644 --- a/packages/ui-default/templates/discussion_detail.html +++ b/packages/ui-default/templates/discussion_detail.html @@ -18,6 +18,7 @@ {{ vnode['title'] }} +
  • {{ ddoc.title }}

  • {{ user.render_inline(udict[ddoc.owner]) }} @ @@ -30,13 +31,11 @@