languageOneOf?: string[]
tagsOneOf?: string[]
tagsAllOf?: string[]
+ privacyOneOf?: VideoPrivacy[]
uuids?: string[]
hasFiles?: boolean
+ hasHLSFiles?: boolean
+ hasWebtorrentFiles?: boolean
accountId?: number
videoChannelId?: number
this.whereStateAvailable()
}
- // Only list videos with the appropriate priavcy
- if (!(options.include & VideoInclude.HIDDEN_PRIVACY)) {
- this.wherePrivacyAvailable(options.user)
- }
-
if (options.videoPlaylistId) {
this.joinPlaylist(options.videoPlaylistId)
}
this.whereFileExists()
}
+ if (exists(options.hasWebtorrentFiles)) {
+ this.whereWebTorrentFileExists(options.hasWebtorrentFiles)
+ }
+
+ if (exists(options.hasHLSFiles)) {
+ this.whereHLSFileExists(options.hasHLSFiles)
+ }
+
if (options.tagsOneOf) {
this.whereTagsOneOf(options.tagsOneOf)
}
this.whereTagsAllOf(options.tagsAllOf)
}
+ if (options.privacyOneOf) {
+ this.wherePrivacyOneOf(options.privacyOneOf)
+ } else {
+ // Only list videos with the appropriate priavcy
+ this.wherePrivacyAvailable(options.user)
+ }
+
if (options.uuids) {
this.whereUUIDs(options.uuids)
}
' WHERE "videoShare"."videoId" = "video"."id"' +
' )' +
' OR' +
- ' EXISTS (' + // Videos published by accounts we follow
+ ' EXISTS (' + // Videos published by channels or accounts we follow
' SELECT 1 from "actorFollow" ' +
- ' WHERE "actorFollow"."targetActorId" = "account"."actorId" AND "actorFollow"."actorId" = :followerActorId ' +
+ ' WHERE ("actorFollow"."targetActorId" = "account"."actorId" OR "actorFollow"."targetActorId" = "videoChannel"."actorId") ' +
+ ' AND "actorFollow"."actorId" = :followerActorId ' +
' AND "actorFollow"."state" = \'accepted\'' +
' )'
}
private whereFileExists () {
- this.and.push(
- '(' +
- ' EXISTS (SELECT 1 FROM "videoFile" WHERE "videoFile"."videoId" = "video"."id") ' +
- ' OR EXISTS (' +
- ' SELECT 1 FROM "videoStreamingPlaylist" ' +
- ' INNER JOIN "videoFile" ON "videoFile"."videoStreamingPlaylistId" = "videoStreamingPlaylist"."id" ' +
- ' WHERE "videoStreamingPlaylist"."videoId" = "video"."id"' +
- ' )' +
- ')'
- )
+ this.and.push(`(${this.buildWebTorrentFileExistsQuery(true)} OR ${this.buildHLSFileExistsQuery(true)})`)
+ }
+
+ private whereWebTorrentFileExists (exists: boolean) {
+ this.and.push(this.buildWebTorrentFileExistsQuery(exists))
+ }
+
+ private whereHLSFileExists (exists: boolean) {
+ this.and.push(this.buildHLSFileExistsQuery(exists))
+ }
+
+ private buildWebTorrentFileExistsQuery (exists: boolean) {
+ const prefix = exists ? '' : 'NOT '
+
+ return prefix + 'EXISTS (SELECT 1 FROM "videoFile" WHERE "videoFile"."videoId" = "video"."id")'
+ }
+
+ private buildHLSFileExistsQuery (exists: boolean) {
+ const prefix = exists ? '' : 'NOT '
+
+ return prefix + 'EXISTS (' +
+ ' SELECT 1 FROM "videoStreamingPlaylist" ' +
+ ' INNER JOIN "videoFile" ON "videoFile"."videoStreamingPlaylistId" = "videoStreamingPlaylist"."id" ' +
+ ' WHERE "videoStreamingPlaylist"."videoId" = "video"."id"' +
+ ')'
}
private whereTagsOneOf (tagsOneOf: string[]) {
)
}
+ private wherePrivacyOneOf (privacyOneOf: VideoPrivacy[]) {
+ this.and.push('"video"."privacy" IN (:privacyOneOf)')
+ this.replacements.privacyOneOf = privacyOneOf
+ }
+
private whereUUIDs (uuids: string[]) {
this.and.push('"video"."uuid" IN (' + createSafeIn(this.sequelize, uuids) + ')')
}