]> 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 1a413db9d2da2c4b60420e7f04c443484b520a6e..6e8dfaa6f4c9ef94a8297c2c0ff428b7bba2384b 100644 (file)
@@ -1,5 +1,6 @@
 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
@@ -25,6 +26,8 @@ export class Video implements VideoServerModel {
   thumbnailUrl: string
   previewPath: string
   previewUrl: string
+  embedPath: string
+  embedUrl: string
   views: number
   likes: number
   dislikes: number
@@ -46,7 +49,7 @@ export class Video implements VideoServerModel {
 
   constructor (hash: {
     author: string,
-    createdAt: string,
+    createdAt: Date | string,
     categoryLabel: string,
     category: number,
     licenceLabel: string,
@@ -63,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
@@ -87,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
@@ -116,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) {