X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fsql%2Fvideos-model-list-query-builder.ts;h=b15b29ec3a59f42a219c2b363357e2afd64d9b38;hb=dbd9fb44ddd880622265097bd7baf4dd71ea0861;hp=459f542a4835a558dbb450d82134463c64c761fa;hpb=17bb45388ec319d288a1b8387c6c199fe2f6b64f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/sql/videos-model-list-query-builder.ts b/server/models/video/sql/videos-model-list-query-builder.ts index 459f542a4..b15b29ec3 100644 --- a/server/models/video/sql/videos-model-list-query-builder.ts +++ b/server/models/video/sql/videos-model-list-query-builder.ts @@ -1,5 +1,6 @@ +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' @@ -9,9 +10,8 @@ import { BuildVideosListQueryOptions, VideosIdListQueryBuilder } from './videos- * */ -export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder { +export class VideosModelListQueryBuilder extends AbstractVideoQueryBuilder { protected attributes: { [key: string]: string } - protected joins: string[] = [] private innerQuery: string private innerSort: string @@ -26,34 +26,35 @@ export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder 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.joins = [ 'INNER JOIN "video" ON "tmp"."id" = "video"."id"' ] + this.addJoin('INNER JOIN "video" ON "tmp"."id" = "video"."id"') this.includeChannels() 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) { @@ -64,8 +65,16 @@ export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder 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.join(' ')} ${this.innerSort}` + this.query = `${select} FROM (${this.innerQuery}) AS "tmp" ${this.joins} ${this.innerSort}` } }