X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fvideos%2Fshared%2Fvideo.model.ts;h=6e8dfaa6f4c9ef94a8297c2c0ff428b7bba2384b;hb=f5028693a896a3076dd286ac0030e3d8f78f5ebf;hp=f5e16fc13f9ffc1ef10c4bf3c56ddcb5858dbc56;hpb=df98563e2104b82b119c00a3cd83cd0dc1242d25;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/videos/shared/video.model.ts b/client/src/app/videos/shared/video.model.ts index f5e16fc13..6e8dfaa6f 100644 --- a/client/src/app/videos/shared/video.model.ts +++ b/client/src/app/videos/shared/video.model.ts @@ -1,10 +1,12 @@ -import { Video as VideoServerModel } from '../../../../../shared' +import { Video as VideoServerModel, VideoFile } from '../../../../../shared' import { User } from '../../shared' +import { VideoResolution } from '../../../../../shared/models/videos/video-resolution.enum' export class Video implements VideoServerModel { author: string by: string createdAt: Date + updatedAt: Date categoryLabel: string category: number licenceLabel: string @@ -14,18 +16,23 @@ export class Video implements VideoServerModel { description: string duration: number durationLabel: string - id: string + id: number + uuid: string isLocal: boolean - magnetUri: string name: string podHost: string tags: string[] thumbnailPath: string thumbnailUrl: string + previewPath: string + previewUrl: string + embedPath: string + embedUrl: string views: number likes: number dislikes: number nsfw: boolean + files: VideoFile[] private static createByString (author: string, podHost: string) { return author + '@' + podHost @@ -42,7 +49,7 @@ export class Video implements VideoServerModel { constructor (hash: { author: string, - createdAt: string, + createdAt: Date | string, categoryLabel: string, category: number, licenceLabel: string, @@ -51,20 +58,29 @@ export class Video implements VideoServerModel { language: number description: string, duration: number - id: string, + id: number, + uuid: string, isLocal: boolean, - magnetUri: string, name: string, podHost: string, tags: string[], thumbnailPath: string, + previewPath: string, + embedPath: string, views: number, likes: number, dislikes: number, - nsfw: boolean + nsfw: boolean, + files: VideoFile[] }) { + let absoluteAPIUrl = API_URL + if (!absoluteAPIUrl) { + // The API is on the same domain + absoluteAPIUrl = window.location.origin + } + this.author = hash.author - this.createdAt = new Date(hash.createdAt) + this.createdAt = new Date(hash.createdAt.toString()) this.categoryLabel = hash.categoryLabel this.category = hash.category this.licenceLabel = hash.licenceLabel @@ -75,17 +91,22 @@ export class Video implements VideoServerModel { this.duration = hash.duration this.durationLabel = Video.createDurationString(hash.duration) this.id = hash.id + this.uuid = hash.uuid this.isLocal = hash.isLocal - this.magnetUri = hash.magnetUri this.name = hash.name this.podHost = hash.podHost this.tags = hash.tags this.thumbnailPath = hash.thumbnailPath - this.thumbnailUrl = API_URL + hash.thumbnailPath + this.thumbnailUrl = absoluteAPIUrl + hash.thumbnailPath + this.previewPath = hash.previewPath + this.previewUrl = absoluteAPIUrl + hash.previewPath + this.embedPath = hash.embedPath + this.embedUrl = absoluteAPIUrl + hash.embedPath this.views = hash.views this.likes = hash.likes this.dislikes = hash.dislikes this.nsfw = hash.nsfw + this.files = hash.files this.by = Video.createByString(hash.author, hash.podHost) } @@ -107,6 +128,21 @@ export class Video implements VideoServerModel { return (this.nsfw && (!user || user.displayNSFW === false)) } + getAppropriateMagnetUri (actualDownloadSpeed = 0) { + if (this.files === undefined || this.files.length === 0) return '' + if (this.files.length === 1) return this.files[0].magnetUri + + // Find first video that is good for our download speed (remember they are sorted) + let betterResolutionFile = this.files.find(f => actualDownloadSpeed > (f.size / this.duration)) + + // If the download speed is too bad, return the lowest resolution we have + if (betterResolutionFile === undefined) { + betterResolutionFile = this.files.find(f => f.resolution === VideoResolution.H_240P) + } + + return betterResolutionFile.magnetUri + } + patch (values: Object) { Object.keys(values).forEach((key) => { this[key] = values[key] @@ -124,7 +160,6 @@ export class Video implements VideoServerModel { duration: this.duration, id: this.id, isLocal: this.isLocal, - magnetUri: this.magnetUri, name: this.name, podHost: this.podHost, tags: this.tags, @@ -132,7 +167,8 @@ export class Video implements VideoServerModel { views: this.views, likes: this.likes, dislikes: this.dislikes, - nsfw: this.nsfw + nsfw: this.nsfw, + files: this.files } } }