From ae5a3dd6642c8d5abc87b874496026dc9ed37d2d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 19 Mar 2018 10:24:12 +0100 Subject: [PATCH] Update videos response api --- client/src/app/app-routing.module.ts | 3 +- server/helpers/custom-validators/videos.ts | 7 +- server/models/video/video.ts | 80 ++++++++++++---------- shared/models/videos/video.model.ts | 20 +++--- 4 files changed, 62 insertions(+), 48 deletions(-) diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index c8a6b3924..2ee3cf974 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core' -import { Routes, RouterModule } from '@angular/router' -import { RedirectService } from '@app/core/routing/redirect.service' +import { RouterModule, Routes } from '@angular/router' import { PreloadSelectedModulesList } from './core' diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts index a46d715ba..c08ddd24e 100644 --- a/server/helpers/custom-validators/videos.ts +++ b/server/helpers/custom-validators/videos.ts @@ -26,8 +26,12 @@ function isVideoLicenceValid (value: number) { return value === null || VIDEO_LICENCES[value] !== undefined } +function areVideoLanguagesValid (value: number[]) { + return value === null || (isArray(value) && value.every(v => isVideoLanguageValid(v))) +} + function isVideoLanguageValid (value: number) { - return value === null || VIDEO_LANGUAGES[value] !== undefined + return VIDEO_LANGUAGES[value] !== undefined } function isVideoDurationValid (value: string) { @@ -133,6 +137,7 @@ export { isVideoDescriptionValid, isVideoFileInfoHashValid, isVideoNameValid, + areVideoLanguagesValid, isVideoTagsValid, isVideoAbuseReasonValid, isVideoFile, diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 14eb64102..a4d4c42f0 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -802,6 +802,27 @@ export class VideoModel extends Model { return {} } + private static getCategoryLabel (id: number) { + let categoryLabel = VIDEO_CATEGORIES[id] + if (!categoryLabel) categoryLabel = 'Misc' + + return categoryLabel + } + + private static getLicenceLabel (id: number) { + let licenceLabel = VIDEO_LICENCES[id] + if (!licenceLabel) licenceLabel = 'Unknown' + + return licenceLabel + } + + private static getLanguageLabel (id: number) { + let languageLabel = VIDEO_LANGUAGES[id] + if (!languageLabel) languageLabel = 'Unknown' + + return languageLabel + } + getOriginalFile () { if (Array.isArray(this.VideoFiles) === false) return undefined @@ -896,12 +917,18 @@ export class VideoModel extends Model { id: this.id, uuid: this.uuid, name: this.name, - category: this.category, - categoryLabel: this.getCategoryLabel(), - licence: this.licence, - licenceLabel: this.getLicenceLabel(), - language: this.language, - languageLabel: this.getLanguageLabel(), + category: { + id: this.category, + label: VideoModel.getCategoryLabel(this.category) + }, + licence: { + id: this.licence, + label: VideoModel.getLicenceLabel(this.licence) + }, + language: { + id: this.language, + label: VideoModel.getLanguageLabel(this.language) + }, nsfw: this.nsfw, description: this.getTruncatedDescription(), isLocal: this.isOwned(), @@ -932,8 +959,10 @@ export class VideoModel extends Model { if (!privacyLabel) privacyLabel = 'Unknown' const detailsJson = { - privacyLabel, - privacy: this.privacy, + privacy: { + id: this.privacy, + label: privacyLabel + }, support: this.support, descriptionPath: this.getDescriptionPath(), channel: this.VideoChannel.toFormattedJSON(), @@ -950,8 +979,10 @@ export class VideoModel extends Model { let resolutionLabel = videoFile.resolution + 'p' return { - resolution: videoFile.resolution, - resolutionLabel, + resolution: { + id: videoFile.resolution, + label: resolutionLabel + }, magnetUri: this.generateMagnetUri(videoFile, baseUrlHttp, baseUrlWs), size: videoFile.size, torrentUrl: this.getTorrentUrl(videoFile, baseUrlHttp), @@ -979,8 +1010,8 @@ export class VideoModel extends Model { let language if (this.language) { language = { - identifier: this.language + '', - name: this.getLanguageLabel() + id: this.language + '', + name: VideoModel.getLanguageLabel(this.language) } } @@ -988,7 +1019,7 @@ export class VideoModel extends Model { if (this.category) { category = { identifier: this.category + '', - name: this.getCategoryLabel() + name: VideoModel.getCategoryLabel(this.category) } } @@ -996,7 +1027,7 @@ export class VideoModel extends Model { if (this.licence) { licence = { identifier: this.licence + '', - name: this.getLicenceLabel() + name: VideoModel.getLicenceLabel(this.licence) } } @@ -1224,27 +1255,6 @@ export class VideoModel extends Model { return `/api/${API_VERSION}/videos/${this.uuid}/description` } - getCategoryLabel () { - let categoryLabel = VIDEO_CATEGORIES[this.category] - if (!categoryLabel) categoryLabel = 'Misc' - - return categoryLabel - } - - getLicenceLabel () { - let licenceLabel = VIDEO_LICENCES[this.licence] - if (!licenceLabel) licenceLabel = 'Unknown' - - return licenceLabel - } - - getLanguageLabel () { - let languageLabel = VIDEO_LANGUAGES[this.language] - if (!languageLabel) languageLabel = 'Unknown' - - return languageLabel - } - removeThumbnail () { const thumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, this.getThumbnailName()) return unlinkPromise(thumbnailPath) diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts index 707cd42a7..6a096195f 100644 --- a/shared/models/videos/video.model.ts +++ b/shared/models/videos/video.model.ts @@ -3,10 +3,14 @@ import { Avatar } from '../avatars/avatar.model' import { VideoChannel } from './video-channel.model' import { VideoPrivacy } from './video-privacy.enum' +export interface VideoConstant { + id: number + label: string +} + export interface VideoFile { magnetUri: string - resolution: number - resolutionLabel: string + resolution: VideoConstant size: number // Bytes torrentUrl: string fileUrl: string @@ -17,12 +21,9 @@ export interface Video { uuid: string createdAt: Date | string updatedAt: Date | string - categoryLabel: string - category: number - licenceLabel: string - licence: number - languageLabel: string - language: number + category: VideoConstant + licence: VideoConstant + language: VideoConstant description: string duration: number isLocal: boolean @@ -45,8 +46,7 @@ export interface Video { } export interface VideoDetails extends Video { - privacy: VideoPrivacy - privacyLabel: string + privacy: VideoConstant descriptionPath: string support: string channel: VideoChannel -- 2.25.1