]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/models/video/sql/video/shared/video-file-query-builder.ts
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / server / models / video / sql / video / shared / video-file-query-builder.ts
CommitLineData
7fb45bda 1import { Sequelize, Transaction } from 'sequelize'
7e7d8e48 2import { AbstractVideoQueryBuilder } from './abstract-video-query-builder'
1d43c3a6 3
7fb45bda
C
4export type FileQueryOptions = {
5 id?: string | number
6 url?: string
7
8 includeRedundancy: boolean
9
10 transaction?: Transaction
11
12 logging?: boolean
13}
14
1d43c3a6
C
15/**
16 *
17 * Fetch files (webtorrent and streaming playlist) according to a video
18 *
19 */
20
7e7d8e48 21export class VideoFileQueryBuilder extends AbstractVideoQueryBuilder {
1d43c3a6 22 protected attributes: { [key: string]: string }
1d43c3a6
C
23
24 constructor (protected readonly sequelize: Sequelize) {
156c44c8 25 super(sequelize, 'get')
1d43c3a6
C
26 }
27
7fb45bda 28 queryWebTorrentVideos (options: FileQueryOptions) {
1d43c3a6
C
29 this.buildWebtorrentFilesQuery(options)
30
71d4af1e 31 return this.runQuery(options)
1d43c3a6
C
32 }
33
7fb45bda 34 queryStreamingPlaylistVideos (options: FileQueryOptions) {
1d43c3a6
C
35 this.buildVideoStreamingPlaylistFilesQuery(options)
36
71d4af1e 37 return this.runQuery(options)
1d43c3a6
C
38 }
39
7fb45bda 40 private buildWebtorrentFilesQuery (options: FileQueryOptions) {
1d43c3a6
C
41 this.attributes = {
42 '"video"."id"': ''
43 }
44
668f864f 45 this.includeWebtorrentFiles()
1d43c3a6 46
7fb45bda 47 if (options.includeRedundancy) {
1d43c3a6
C
48 this.includeWebTorrentRedundancies()
49 }
50
71d4af1e 51 this.whereId(options)
1d43c3a6
C
52
53 this.query = this.buildQuery()
54 }
55
7fb45bda 56 private buildVideoStreamingPlaylistFilesQuery (options: FileQueryOptions) {
1d43c3a6
C
57 this.attributes = {
58 '"video"."id"': ''
59 }
60
668f864f 61 this.includeStreamingPlaylistFiles()
1d43c3a6 62
7fb45bda 63 if (options.includeRedundancy) {
1d43c3a6
C
64 this.includeStreamingPlaylistRedundancies()
65 }
66
71d4af1e 67 this.whereId(options)
1d43c3a6
C
68
69 this.query = this.buildQuery()
70 }
71
72 private buildQuery () {
3c79c2ce 73 return `${this.buildSelect()} FROM "video" ${this.joins} ${this.where}`
1d43c3a6
C
74 }
75}