Add ability to list comments on local videos

pull/5215/head
Chocobozzz 2022-08-12 11:05:11 +02:00
parent 045224d5eb
commit 0e6cd1c00f
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
7 changed files with 40 additions and 2 deletions

View File

@ -54,6 +54,10 @@ export class VideoCommentListComponent extends RestTable implements OnInit {
{
value: 'local:false',
label: $localize`Remote comments`
},
{
value: 'localVideo:true',
label: $localize`Comments on local videos`
}
]
}

View File

@ -190,6 +190,10 @@ export class VideoCommentService {
prefix: 'local:',
isBoolean: true
},
onLocalVideo: {
prefix: 'localVideo:',
isBoolean: true
},
searchAccount: { prefix: 'account:' },
searchVideo: { prefix: 'video:' }

View File

@ -91,6 +91,7 @@ async function listComments (req: express.Request, res: express.Response) {
sort: req.query.sort,
isLocal: req.query.isLocal,
onLocalVideo: req.query.onLocalVideo,
search: req.query.search,
searchAccount: req.query.searchAccount,
searchVideo: req.query.searchVideo

View File

@ -24,6 +24,12 @@ const listVideoCommentsValidator = [
.custom(isBooleanValid)
.withMessage('Should have a valid is local boolean'),
query('onLocalVideo')
.optional()
.customSanitizer(toBooleanOrNull)
.custom(isBooleanValid)
.withMessage('Should have a valid is on local video boolean'),
query('search')
.optional()
.custom(exists).withMessage('Should have a valid search'),

View File

@ -14,6 +14,7 @@ import {
Table,
UpdatedAt
} from 'sequelize-typescript'
import { exists } from '@server/helpers/custom-validators/misc'
import { getServerActor } from '@server/models/application/application'
import { MAccount, MAccountId, MUserAccountId } from '@server/types/models'
import { VideoPrivacy } from '@shared/models'
@ -312,12 +313,13 @@ export class VideoCommentModel extends Model<Partial<AttributesOnly<VideoComment
count: number
sort: string
onLocalVideo?: boolean
isLocal?: boolean
search?: string
searchAccount?: string
searchVideo?: string
}) {
const { start, count, sort, isLocal, search, searchAccount, searchVideo } = parameters
const { start, count, sort, isLocal, search, searchAccount, searchVideo, onLocalVideo } = parameters
const where: WhereOptions = {
deletedAt: null
@ -363,6 +365,10 @@ export class VideoCommentModel extends Model<Partial<AttributesOnly<VideoComment
Object.assign(whereVideo, searchAttribute(searchVideo, 'name'))
}
if (exists(onLocalVideo)) {
Object.assign(whereVideo, { remote: !onLocalVideo })
}
const getQuery = (forCount: boolean) => {
return {
offset: start,

View File

@ -254,6 +254,22 @@ describe('Test video comments', function () {
expect(total).to.equal(0)
})
it('Should filter instance comments by onLocalVideo', async function () {
{
const { total, data } = await command.listForAdmin({ onLocalVideo: false })
expect(data).to.have.lengthOf(0)
expect(total).to.equal(0)
}
{
const { total, data } = await command.listForAdmin({ onLocalVideo: true })
expect(data).to.not.have.lengthOf(0)
expect(total).to.not.equal(0)
}
})
it('Should search instance comments by account', async function () {
const { total, data } = await command.listForAdmin({ searchAccount: 'user' })

View File

@ -14,6 +14,7 @@ export class CommentsCommand extends AbstractCommand {
count?: number
sort?: string
isLocal?: boolean
onLocalVideo?: boolean
search?: string
searchAccount?: string
searchVideo?: string
@ -21,7 +22,7 @@ export class CommentsCommand extends AbstractCommand {
const { sort = '-createdAt' } = options
const path = '/api/v1/videos/comments'
const query = { sort, ...pick(options, [ 'start', 'count', 'isLocal', 'search', 'searchAccount', 'searchVideo' ]) }
const query = { sort, ...pick(options, [ 'start', 'count', 'isLocal', 'onLocalVideo', 'search', 'searchAccount', 'searchVideo' ]) }
return this.getRequestBody<ResultList<VideoComment>>({
...options,