X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-file.ts;h=05c4907594fbbd36c7d86e0e8a5373c3fe24a664;hb=41b15c892192073828458d007256a9dfdf3bb6fb;hp=b861b0704c0b809f6e8ad5cf03fa0cda0ffc87f4;hpb=9b39106d5757caf221a88e42e05167a6fac479c6;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-file.ts b/server/models/video/video-file.ts index b861b0704..05c490759 100644 --- a/server/models/video/video-file.ts +++ b/server/models/video/video-file.ts @@ -19,10 +19,12 @@ 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' +import { MIMETYPES } from '../../initializers/constants' @Table({ tableName: 'videoFile', @@ -96,15 +98,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) { @@ -120,8 +120,31 @@ export class VideoFileModel extends Model { 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 +154,16 @@ 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) + })) + } + + isAudio () { + return !!MIMETYPES.AUDIO.EXT_MIMETYPE[this.extname] } hasSameUniqueKeysThan (other: VideoFileModel) {