From 3c10840fa90fc88fc98e8169faf4745ff6c80893 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 29 Oct 2021 10:54:27 +0200 Subject: Add video file size info in admin videos list --- .../models/video/formatter/video-format-utils.ts | 32 ++++++++++---------- .../video/sql/video-model-get-query-builder.ts | 6 ++-- .../video/sql/videos-id-list-query-builder.ts | 4 +-- .../video/sql/videos-model-list-query-builder.ts | 2 +- server/models/video/video.ts | 34 +++++++++++++--------- 5 files changed, 42 insertions(+), 36 deletions(-) (limited to 'server/models/video') diff --git a/server/models/video/formatter/video-format-utils.ts b/server/models/video/formatter/video-format-utils.ts index 5dc2c2f1b..ba49e41ae 100644 --- a/server/models/video/formatter/video-format-utils.ts +++ b/server/models/video/formatter/video-format-utils.ts @@ -42,6 +42,7 @@ export type VideoFormattingJSONOptions = { waitTranscoding?: boolean scheduledUpdate?: boolean blacklistInfo?: boolean + files?: boolean blockedOwner?: boolean } } @@ -55,6 +56,7 @@ function guessAdditionalAttributesFromQuery (query: VideosCommonQueryAfterSaniti waitTranscoding: !!(query.include & VideoInclude.NOT_PUBLISHED_STATE), scheduledUpdate: !!(query.include & VideoInclude.NOT_PUBLISHED_STATE), blacklistInfo: !!(query.include & VideoInclude.BLACKLISTED), + files: !!(query.include & VideoInclude.FILES), blockedOwner: !!(query.include & VideoInclude.BLOCKED_OWNER) } } @@ -150,22 +152,26 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options: VideoForm videoObject.blockedServer = !!(server?.isBlocked()) } + if (add?.files === true) { + videoObject.streamingPlaylists = streamingPlaylistsModelToFormattedJSON(video, video.VideoStreamingPlaylists) + videoObject.files = videoFilesModelToFormattedJSON(video, video.VideoFiles) + } + return videoObject } function videoModelToFormattedDetailsJSON (video: MVideoFormattableDetails): VideoDetails { - const formattedJson = video.toFormattedJSON({ + const videoJSON = video.toFormattedJSON({ additionalAttributes: { scheduledUpdate: true, - blacklistInfo: true + blacklistInfo: true, + files: true } - }) + }) as Video & Required> const tags = video.Tags ? video.Tags.map(t => t.name) : [] - const streamingPlaylists = streamingPlaylistsModelToFormattedJSON(video, video.VideoStreamingPlaylists) - - const detailsJson = { + const detailsJSON = { support: video.support, descriptionPath: video.getDescriptionAPIPath(), channel: video.VideoChannel.toFormattedJSON(), @@ -179,20 +185,14 @@ function videoModelToFormattedDetailsJSON (video: MVideoFormattableDetails): Vid label: getStateLabel(video.state) }, - trackerUrls: video.getTrackerUrls(), - - files: [], - streamingPlaylists + trackerUrls: video.getTrackerUrls() } - // Format and sort video files - detailsJson.files = videoFilesModelToFormattedJSON(video, video.VideoFiles) - - return Object.assign(formattedJson, detailsJson) + return Object.assign(videoJSON, detailsJSON) } function streamingPlaylistsModelToFormattedJSON ( - video: MVideoFormattableDetails, + video: MVideoFormattable, playlists: MStreamingPlaylistRedundanciesOpt[] ): VideoStreamingPlaylist[] { if (isArray(playlists) === false) return [] @@ -223,7 +223,7 @@ function sortByResolutionDesc (fileA: MVideoFile, fileB: MVideoFile) { } function videoFilesModelToFormattedJSON ( - video: MVideoFormattableDetails, + video: MVideoFormattable, videoFiles: MVideoFileRedundanciesOpt[], includeMagnet = true ): VideoFile[] { diff --git a/server/models/video/sql/video-model-get-query-builder.ts b/server/models/video/sql/video-model-get-query-builder.ts index d18ddae67..2f34d5602 100644 --- a/server/models/video/sql/video-model-get-query-builder.ts +++ b/server/models/video/sql/video-model-get-query-builder.ts @@ -32,7 +32,7 @@ export type BuildVideoGetQueryOptions = { logging?: boolean } -export class VideosModelGetQueryBuilder { +export class VideoModelGetQueryBuilder { videoQueryBuilder: VideosModelGetQuerySubBuilder webtorrentFilesQueryBuilder: VideoFileQueryBuilder streamingPlaylistFilesQueryBuilder: VideoFileQueryBuilder @@ -53,11 +53,11 @@ export class VideosModelGetQueryBuilder { const [ videoRows, webtorrentFilesRows, streamingPlaylistFilesRows ] = await Promise.all([ this.videoQueryBuilder.queryVideos(options), - VideosModelGetQueryBuilder.videoFilesInclude.has(options.type) + VideoModelGetQueryBuilder.videoFilesInclude.has(options.type) ? this.webtorrentFilesQueryBuilder.queryWebTorrentVideos(options) : Promise.resolve(undefined), - VideosModelGetQueryBuilder.videoFilesInclude.has(options.type) + VideoModelGetQueryBuilder.videoFilesInclude.has(options.type) ? this.streamingPlaylistFilesQueryBuilder.queryStreamingPlaylistVideos(options) : Promise.resolve(undefined) ]) diff --git a/server/models/video/sql/videos-id-list-query-builder.ts b/server/models/video/sql/videos-id-list-query-builder.ts index 3eb547e75..4d6e0ea4b 100644 --- a/server/models/video/sql/videos-id-list-query-builder.ts +++ b/server/models/video/sql/videos-id-list-query-builder.ts @@ -43,7 +43,7 @@ export type BuildVideosListQueryOptions = { uuids?: string[] - withFiles?: boolean + hasFiles?: boolean accountId?: number videoChannelId?: number @@ -165,7 +165,7 @@ export class VideosIdListQueryBuilder extends AbstractVideosQueryBuilder { this.whereFollowerActorId(options.displayOnlyForFollower) } - if (options.withFiles === true) { + if (options.hasFiles === true) { this.whereFileExists() } diff --git a/server/models/video/sql/videos-model-list-query-builder.ts b/server/models/video/sql/videos-model-list-query-builder.ts index ef92bd2b0..cd721f055 100644 --- a/server/models/video/sql/videos-model-list-query-builder.ts +++ b/server/models/video/sql/videos-model-list-query-builder.ts @@ -52,7 +52,7 @@ export class VideosModelListQueryBuilder extends AbstractVideosModelQueryBuilder this.includeAccounts() this.includeThumbnails() - if (options.withFiles) { + if (options.include & VideoInclude.FILES) { this.includeWebtorrentFiles() this.includeStreamingPlaylistFiles() } diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 26be34329..f9618c102 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -105,7 +105,7 @@ import { videoModelToFormattedJSON } from './formatter/video-format-utils' import { ScheduleVideoUpdateModel } from './schedule-video-update' -import { VideosModelGetQueryBuilder } from './sql/video-model-get-query-builder' +import { VideoModelGetQueryBuilder } from './sql/video-model-get-query-builder' import { BuildVideosListQueryOptions, DisplayOnlyForFollowerOptions, VideosIdListQueryBuilder } from './sql/videos-id-list-query-builder' import { VideosModelListQueryBuilder } from './sql/videos-model-list-query-builder' import { TagModel } from './tag' @@ -1029,7 +1029,7 @@ export class VideoModel extends Model>> { isLocal?: boolean include?: VideoInclude - withFiles: boolean + hasFiles?: boolean // default false categoryOneOf?: number[] licenceOneOf?: number[] @@ -1053,7 +1053,7 @@ export class VideoModel extends Model>> { search?: string }) { - if (options.include && !options.user.hasRight(UserRight.SEE_ALL_VIDEOS)) { + if (VideoModel.isPrivateInclude(options.include) && !options.user.hasRight(UserRight.SEE_ALL_VIDEOS)) { throw new Error('Try to filter all-local but no user has not the see all videos right') } @@ -1082,7 +1082,7 @@ export class VideoModel extends Model>> { 'isLocal', 'include', 'displayOnlyForFollower', - 'withFiles', + 'hasFiles', 'accountId', 'videoChannelId', 'videoPlaylistId', @@ -1229,13 +1229,13 @@ export class VideoModel extends Model>> { } static load (id: number | string, transaction?: Transaction): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ id, transaction, type: 'thumbnails' }) } static loadWithBlacklist (id: number | string, transaction?: Transaction): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ id, transaction, type: 'thumbnails-blacklist' }) } @@ -1279,31 +1279,31 @@ export class VideoModel extends Model>> { } static loadOnlyId (id: number | string, transaction?: Transaction): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ id, transaction, type: 'id' }) } static loadWithFiles (id: number | string, transaction?: Transaction, logging?: boolean): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ id, transaction, type: 'all-files', logging }) } static loadByUrl (url: string, transaction?: Transaction): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ url, transaction, type: 'thumbnails' }) } static loadByUrlAndPopulateAccount (url: string, transaction?: Transaction): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ url, transaction, type: 'account-blacklist-files' }) } static loadAndPopulateAccountAndServerAndTags (id: number | string, t?: Transaction, userId?: number): Promise { - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ id, transaction: t, type: 'full-light', userId }) } @@ -1314,7 +1314,7 @@ export class VideoModel extends Model>> { userId?: number }): Promise { const { id, transaction, userId } = parameters - const queryBuilder = new VideosModelGetQueryBuilder(VideoModel.sequelize) + const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize) return queryBuilder.queryVideo({ id, transaction, type: 'api', userId }) } @@ -1345,8 +1345,7 @@ export class VideoModel extends Model>> { displayOnlyForFollower: { actorId: serverActor.id, orLocalVideos: true - }, - withFiles: false + } }) return { @@ -1490,6 +1489,13 @@ export class VideoModel extends Model>> { } } + private static isPrivateInclude (include: VideoInclude) { + return include & VideoInclude.BLACKLISTED || + include & VideoInclude.BLOCKED_OWNER || + include & VideoInclude.HIDDEN_PRIVACY || + include & VideoInclude.NOT_PUBLISHED_STATE + } + isBlacklisted () { return !!this.VideoBlacklist } -- cgit v1.2.3