]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/videos/shared/video.model.ts
Use async/await in lib and initializers
[github/Chocobozzz/PeerTube.git] / client / src / app / videos / shared / video.model.ts
index 438791368d3f77e427493d3522f3da4761310f26..6e8dfaa6f4c9ef94a8297c2c0ff428b7bba2384b 100644 (file)
@@ -1,10 +1,12 @@
 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
@@ -24,6 +26,8 @@ export class Video implements VideoServerModel {
   thumbnailUrl: string
   previewPath: string
   previewUrl: string
+  embedPath: string
+  embedUrl: string
   views: number
   likes: number
   dislikes: number
@@ -45,7 +49,7 @@ export class Video implements VideoServerModel {
 
   constructor (hash: {
     author: string,
-    createdAt: string,
+    createdAt: Date | string,
     categoryLabel: string,
     category: number,
     licenceLabel: string,
@@ -62,14 +66,21 @@ export class Video implements VideoServerModel {
     tags: string[],
     thumbnailPath: string,
     previewPath: string,
+    embedPath: string,
     views: number,
     likes: number,
     dislikes: number,
     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
@@ -86,9 +97,11 @@ export class Video implements VideoServerModel {
     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
@@ -115,11 +128,19 @@ export class Video implements VideoServerModel {
     return (this.nsfw && (!user || user.displayNSFW === false))
   }
 
-  getDefaultMagnetUri () {
+  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)
+    }
 
-    // TODO: choose the original file
-    return this.files[0].magnetUri
+    return betterResolutionFile.magnetUri
   }
 
   patch (values: Object) {