+import { VideoInclude } from '@shared/models'
import { Sequelize } from 'sequelize'
-import { AbstractVideosModelQueryBuilder } from './shared/abstract-videos-model-query-builder'
+import { AbstractVideoQueryBuilder } from './shared/abstract-video-query-builder'
import { VideoModelBuilder } from './shared/video-model-builder'
import { BuildVideosListQueryOptions, VideosIdListQueryBuilder } from './videos-id-list-query-builder'
*
*/
-export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder {
+export class VideosModelListQueryBuilder extends AbstractVideoQueryBuilder {
protected attributes: { [key: string]: string }
private innerQuery: string
queryVideos (options: BuildVideosListQueryOptions) {
this.buildInnerQuery(options)
- this.buildListQueryFromIdsQuery(options)
+ this.buildMainQuery(options)
- return this.runQuery(undefined).then(rows => this.videoModelBuilder.buildVideosFromRows(rows))
+ return this.runQuery()
+ .then(rows => this.videoModelBuilder.buildVideosFromRows({ rows, include: options.include }))
}
private buildInnerQuery (options: BuildVideosListQueryOptions) {
const idsQueryBuilder = new VideosIdListQueryBuilder(this.sequelize)
- const { query, sort, replacements } = idsQueryBuilder.getIdsListQueryAndSort(options)
+ const { query, sort, replacements } = idsQueryBuilder.getQuery(options)
this.replacements = replacements
this.innerQuery = query
this.innerSort = sort
}
- private buildListQueryFromIdsQuery (options: BuildVideosListQueryOptions) {
+ private buildMainQuery (options: BuildVideosListQueryOptions) {
this.attributes = {
'"video".*': ''
}
this.includeAccounts()
this.includeThumbnails()
- if (options.withFiles) {
- this.includeWebtorrentFiles(false)
- this.includeStreamingPlaylistFiles(false)
+ if (options.include & VideoInclude.FILES) {
+ this.includeWebtorrentFiles()
+ this.includeStreamingPlaylistFiles()
}
if (options.user) {
this.includePlaylist(options.videoPlaylistId)
}
+ if (options.include & VideoInclude.BLACKLISTED) {
+ this.includeBlacklisted()
+ }
+
+ if (options.include & VideoInclude.BLOCKED_OWNER) {
+ this.includeBlockedOwnerAndServer(options.serverAccountIdForBlock, options.user)
+ }
+
const select = this.buildSelect()
this.query = `${select} FROM (${this.innerQuery}) AS "tmp" ${this.joins} ${this.innerSort}`