]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/sql/videos-model-list-query-builder.ts
Some fixes for admin videos list
[github/Chocobozzz/PeerTube.git] / server / models / video / sql / videos-model-list-query-builder.ts
index 43040fc5e6da1be861c5acad4a7dd275f3575983..b15b29ec3a59f42a219c2b363357e2afd64d9b38 100644 (file)
@@ -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,7 +10,7 @@ import { BuildVideosListQueryOptions, VideosIdListQueryBuilder } from './videos-
  *
  */
 
-export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder {
+export class VideosModelListQueryBuilder extends AbstractVideoQueryBuilder {
   protected attributes: { [key: string]: string }
 
   private innerQuery: string
@@ -25,22 +26,22 @@ export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder
 
   queryVideos (options: BuildVideosListQueryOptions) {
     this.buildInnerQuery(options)
-    this.buildListQueryFromIdsQuery(options)
+    this.buildMainQuery(options)
 
     return this.runQuery()
-      .then(rows => this.videoModelBuilder.buildVideosFromRows(rows))
+      .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".*': ''
     }
@@ -51,9 +52,9 @@ export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder
     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,6 +65,14 @@ 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} ${this.innerSort}`