X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-file.ts;h=2203a7abaf547ec3da32cba5f7a95e79aa75e93a;hb=4f0f2ab228d73dbec303914dd59b52f6cdaddf46;hp=7d1e371b9f5b310781100862d3182b743e69f945;hpb=88108880bbdba473cfe36ecbebc1c3c4f972e102;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-file.ts b/server/models/video/video-file.ts index 7d1e371b9..2203a7aba 100644 --- a/server/models/video/video-file.ts +++ b/server/models/video/video-file.ts @@ -19,10 +19,11 @@ import { isVideoFileSizeValid, isVideoFPSResolutionValid } from '../../helpers/custom-validators/videos' -import { throwIfNotValid } from '../utils' +import { parseAggregateResult, throwIfNotValid } from '../utils' import { VideoModel } from './video' -import * as Sequelize from 'sequelize' import { VideoRedundancyModel } from '../redundancy/video-redundancy' +import { VideoStreamingPlaylistModel } from './video-streaming-playlist' +import { FindOptions, QueryTypes, Transaction } from 'sequelize' @Table({ tableName: 'videoFile', @@ -96,15 +97,13 @@ export class VideoFileModel extends Model { static doesInfohashExist (infoHash: string) { const query = 'SELECT 1 FROM "videoFile" WHERE "infoHash" = $infoHash LIMIT 1' const options = { - type: Sequelize.QueryTypes.SELECT, + type: QueryTypes.SELECT, bind: { infoHash }, raw: true } return VideoModel.sequelize.query(query, options) - .then(results => { - return results.length === 1 - }) + .then(results => results.length === 1) } static loadWithVideo (id: number) { @@ -117,11 +116,34 @@ export class VideoFileModel extends Model { ] } - return VideoFileModel.findById(id, options) + return VideoFileModel.findByPk(id, options) } - static async getStats () { - let totalLocalVideoFilesSize = await VideoFileModel.sum('size', { + static listByStreamingPlaylist (streamingPlaylistId: number, transaction: Transaction) { + const query = { + include: [ + { + model: VideoModel.unscoped(), + required: true, + include: [ + { + model: VideoStreamingPlaylistModel.unscoped(), + required: true, + where: { + id: streamingPlaylistId + } + } + ] + } + ], + transaction + } + + return VideoFileModel.findAll(query) + } + + static getStats () { + const query: FindOptions = { include: [ { attributes: [], @@ -131,13 +153,12 @@ export class VideoFileModel extends Model { } } ] - } as any) - // Sequelize could return null... - if (!totalLocalVideoFilesSize) totalLocalVideoFilesSize = 0 - - return { - totalLocalVideoFilesSize } + + return VideoFileModel.aggregate('size', 'SUM', query) + .then(result => ({ + totalLocalVideoFilesSize: parseAggregateResult(result) + })) } hasSameUniqueKeysThan (other: VideoFileModel) {