Fix playlist search

This commit is contained in:
Chocobozzz 2019-12-27 09:04:04 +01:00
parent 227eb02f9a
commit 822c7e610d
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 28 additions and 17 deletions

View File

@ -13,11 +13,10 @@ import {
Model,
Scopes,
Table,
UpdatedAt,
Sequelize
UpdatedAt
} from 'sequelize-typescript'
import { VideoPlaylistPrivacy } from '../../../shared/models/videos/playlist/video-playlist-privacy.model'
import { buildServerIdsFollowedBy, buildWhereIdOrUUID, getSort, isOutdated, throwIfNotValid, createSimilarityAttribute } from '../utils'
import { buildServerIdsFollowedBy, buildWhereIdOrUUID, getSort, isOutdated, throwIfNotValid } from '../utils'
import {
isVideoPlaylistDescriptionValid,
isVideoPlaylistNameValid,
@ -46,7 +45,8 @@ import { ActivityIconObject } from '../../../shared/models/activitypub/objects'
import { FindOptions, literal, Op, ScopeOptions, Transaction, WhereOptions } from 'sequelize'
import * as Bluebird from 'bluebird'
import {
MVideoPlaylistAccountThumbnail, MVideoPlaylistAP,
MVideoPlaylistAccountThumbnail,
MVideoPlaylistAP,
MVideoPlaylistFormattable,
MVideoPlaylistFull,
MVideoPlaylistFullSummary,
@ -166,18 +166,9 @@ type AvailableForListOptions = {
}
if (options.search) {
const escapedSearch = VideoPlaylistModel.sequelize.escape(options.search)
const escapedLikeSearch = VideoPlaylistModel.sequelize.escape('%' + options.search + '%')
whereAnd.push({
id: {
[ Op.in ]: Sequelize.literal(
'(' +
'SELECT "videoPlaylist"."id" FROM "videoPlaylist" ' +
'WHERE ' +
'lower(immutable_unaccent("videoPlaylist"."name")) % lower(immutable_unaccent(' + escapedSearch + ')) OR ' +
'lower(immutable_unaccent("videoPlaylist"."name")) LIKE lower(immutable_unaccent(' + escapedLikeSearch + '))' +
')'
)
name: {
[ Op.iLike ]: '%' + options.search + '%'
}
})
}

View File

@ -407,6 +407,25 @@ describe('Test video playlists', function () {
expect(data).to.have.lengthOf(1)
expect(data[ 0 ].displayName).to.equal('playlist 3')
}
{
const res = await getAccountPlaylistsList(servers[ 1 ].url, 'root', 0, 10, 'createdAt', '3')
expect(res.body.total).to.equal(1)
const data: VideoPlaylist[] = res.body.data
expect(data).to.have.lengthOf(1)
expect(data[ 0 ].displayName).to.equal('playlist 3')
}
{
const res = await getAccountPlaylistsList(servers[ 1 ].url, 'root', 0, 10, 'createdAt', '4')
expect(res.body.total).to.equal(0)
const data: VideoPlaylist[] = res.body.data
expect(data).to.have.lengthOf(0)
}
})
it('Should not list unlisted or private playlists', async function () {

View File

@ -45,13 +45,14 @@ function getVideoChannelPlaylistsList (url: string, videoChannelName: string, st
})
}
function getAccountPlaylistsList (url: string, accountName: string, start: number, count: number, sort?: string) {
function getAccountPlaylistsList (url: string, accountName: string, start: number, count: number, sort?: string, search?: string) {
const path = '/api/v1/accounts/' + accountName + '/video-playlists'
const query = {
start,
count,
sort
sort,
search
}
return makeGetRequest({