X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fvideos%2Fshared%2Fvideo.model.ts;h=6e8dfaa6f4c9ef94a8297c2c0ff428b7bba2384b;hb=f5028693a896a3076dd286ac0030e3d8f78f5ebf;hp=f0556343f5045c2ac70b5be795804c3de5e2800a;hpb=43f61d2635113001c3d19e3299d8700a00d47e48;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 f0556343f..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 @@ -17,7 +19,6 @@ export class Video implements VideoServerModel { id: number uuid: string isLocal: boolean - magnetUri: string name: string podHost: string tags: string[] @@ -25,10 +26,13 @@ export class Video implements VideoServerModel { 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 @@ -45,7 +49,7 @@ export class Video implements VideoServerModel { constructor (hash: { author: string, - createdAt: string, + createdAt: Date | string, categoryLabel: string, category: number, licenceLabel: string, @@ -57,19 +61,26 @@ export class Video implements VideoServerModel { 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 @@ -82,18 +93,20 @@ export class Video implements VideoServerModel { 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 = API_URL + 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) } @@ -115,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] @@ -132,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, @@ -140,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 } } }