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,
import { FindOptions, literal, Op, ScopeOptions, Transaction, WhereOptions } from 'sequelize'
import * as Bluebird from 'bluebird'
import {
- MVideoPlaylistAccountThumbnail, MVideoPlaylistAP,
+ MVideoPlaylistAccountThumbnail,
+ MVideoPlaylistAP,
MVideoPlaylistFormattable,
MVideoPlaylistFull,
MVideoPlaylistFullSummary,
type?: VideoPlaylistType
accountId?: number
videoChannelId?: number
- privateAndUnlisted?: boolean,
+ listMyPlaylists?: boolean,
search?: string
}
]
},
[ ScopeNames.AVAILABLE_FOR_LIST ]: (options: AvailableForListOptions) => {
- // Only list local playlists OR playlists that are on an instance followed by actorId
- const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId)
- const whereActor = {
- [ Op.or ]: [
- {
- serverId: null
- },
- {
- serverId: {
- [ Op.in ]: literal(inQueryInstanceFollow)
- }
- }
- ]
- }
+
+ let whereActor: WhereOptions = {}
const whereAnd: WhereOptions[] = []
- if (options.privateAndUnlisted !== true) {
+ if (options.listMyPlaylists !== true) {
whereAnd.push({
privacy: VideoPlaylistPrivacy.PUBLIC
})
+
+ // Only list local playlists OR playlists that are on an instance followed by actorId
+ const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId)
+
+ whereActor = {
+ [ Op.or ]: [
+ {
+ serverId: null
+ },
+ {
+ serverId: {
+ [ Op.in ]: literal(inQueryInstanceFollow)
+ }
+ }
+ ]
+ }
}
if (options.accountId) {
}
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 + '%'
}
})
}
type?: VideoPlaylistType,
accountId?: number,
videoChannelId?: number,
- privateAndUnlisted?: boolean,
+ listMyPlaylists?: boolean,
search?: string
}) {
const query = {
followerActorId: options.followerActorId,
accountId: options.accountId,
videoChannelId: options.videoChannelId,
- privateAndUnlisted: options.privateAndUnlisted,
+ listMyPlaylists: options.listMyPlaylists,
search: options.search
} as AvailableForListOptions
]