]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/video/video.model.ts
Add ability to choose what policy we have for NSFW videos
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / video / video.model.ts
index c3759cb65e735da164f49d612b7723a645b599f9..adc248a1ef902209c6ea5d41e791e9375a5a7472 100644 (file)
@@ -1,19 +1,19 @@
+import { Account } from '@app/shared/account/account.model'
 import { User } from '../'
 import { Video as VideoServerModel } from '../../../../../shared'
-import { Account } from '../../../../../shared/models/accounts'
-import { environment } from '../../../environments/environment'
+import { Avatar } from '../../../../../shared/models/avatars/avatar.model'
+import { VideoConstant } from '../../../../../shared/models/videos/video.model'
+import { getAbsoluteAPIUrl } from '../misc/utils'
+import { ServerConfig } from '../../../../../shared/models'
 
 export class Video implements VideoServerModel {
-  accountName: string
   by: string
   createdAt: Date
   updatedAt: Date
-  categoryLabel: string
-  category: number
-  licenceLabel: string
-  licence: number
-  languageLabel: string
-  language: number
+  publishedAt: Date
+  category: VideoConstant<number>
+  licence: VideoConstant<number>
+  language: VideoConstant<number>
   description: string
   duration: number
   durationLabel: string
@@ -32,35 +32,35 @@ export class Video implements VideoServerModel {
   likes: number
   dislikes: number
   nsfw: boolean
-  account: Account
 
-  private static createByString (account: string, serverHost: string) {
-    return account + '@' + serverHost
+  account: {
+    name: string
+    displayName: string
+    url: string
+    host: string
+    avatar: Avatar
   }
 
   private static createDurationString (duration: number) {
-    const minutes = Math.floor(duration / 60)
+    const hours = Math.floor(duration / 3600)
+    const minutes = Math.floor(duration % 3600 / 60)
     const seconds = duration % 60
+
     const minutesPadding = minutes >= 10 ? '' : '0'
     const secondsPadding = seconds >= 10 ? '' : '0'
+    const displayedHours = hours > 0 ? hours.toString() + ':' : ''
 
-    return minutesPadding + minutes.toString() + ':' + secondsPadding + seconds.toString()
+    return displayedHours + minutesPadding +
+        minutes.toString() + ':' + secondsPadding + seconds.toString()
   }
 
   constructor (hash: VideoServerModel) {
-    let absoluteAPIUrl = environment.apiUrl
-    if (!absoluteAPIUrl) {
-      // The API is on the same domain
-      absoluteAPIUrl = window.location.origin
-    }
+    const absoluteAPIUrl = getAbsoluteAPIUrl()
 
-    this.accountName = hash.accountName
     this.createdAt = new Date(hash.createdAt.toString())
-    this.categoryLabel = hash.categoryLabel
+    this.publishedAt = new Date(hash.publishedAt.toString())
     this.category = hash.category
-    this.licenceLabel = hash.licenceLabel
     this.licence = hash.licence
-    this.languageLabel = hash.languageLabel
     this.language = hash.language
     this.description = hash.description
     this.duration = hash.duration
@@ -69,7 +69,6 @@ export class Video implements VideoServerModel {
     this.uuid = hash.uuid
     this.isLocal = hash.isLocal
     this.name = hash.name
-    this.serverHost = hash.serverHost
     this.thumbnailPath = hash.thumbnailPath
     this.thumbnailUrl = absoluteAPIUrl + hash.thumbnailPath
     this.previewPath = hash.previewPath
@@ -80,12 +79,19 @@ export class Video implements VideoServerModel {
     this.likes = hash.likes
     this.dislikes = hash.dislikes
     this.nsfw = hash.nsfw
+    this.account = hash.account
 
-    this.by = Video.createByString(hash.accountName, hash.serverHost)
+    this.by = Account.CREATE_BY_STRING(hash.account.name, hash.account.host)
   }
 
-  isVideoNSFWForUser (user: User) {
-    // If the video is NSFW and the user is not logged in, or the user does not want to display NSFW videos...
-    return (this.nsfw && (!user || user.displayNSFW === false))
+  isVideoNSFWForUser (user: User, serverConfig: ServerConfig) {
+    // Video is not NSFW, skip
+    if (this.nsfw === false) return false
+
+    // Return user setting if logged in
+    if (user) return user.nsfwPolicy !== 'display'
+
+    // Return default instance config
+    return serverConfig.instance.defaultNSFWPolicy !== 'display'
   }
 }