]>
Commit | Line | Data |
---|---|---|
7fb45bda | 1 | import { Sequelize, Transaction } from 'sequelize' |
7e7d8e48 | 2 | import { AbstractVideoQueryBuilder } from './abstract-video-query-builder' |
1d43c3a6 | 3 | |
7fb45bda C |
4 | export 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 | 21 | export 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 | } |