Add information concerning video privacy in my videos list
authorChocobozzz <me@florianbigard.com>
Thu, 19 Apr 2018 12:52:10 +0000 (14:52 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 19 Apr 2018 12:52:10 +0000 (14:52 +0200)
client/src/app/account/account-videos/account-videos.component.html
client/src/app/account/account-videos/account-videos.component.scss
client/src/app/core/auth/auth-user.model.ts
client/src/app/shared/video/video-details.model.ts
client/src/app/shared/video/video.model.ts
server/initializers/constants.ts
server/models/video/video.ts
server/tests/utils/videos/videos.ts
shared/models/videos/video.model.ts

index d7e2230b0462a1c633b4a14a6b8968ed93136ec6..66ce3a77bb46299688baa1bfe910869105bcfb02 100644 (file)
@@ -18,6 +18,7 @@
       <div class="video-info">
         <a class="video-info-name" [routerLink]="['/videos/watch', video.uuid]" [attr.title]="video.name">{{ video.name }}</a>
         <span class="video-info-date-views">{{ video.createdAt | myFromNow }} - {{ video.views | myNumberFormatter }} views</span>
+        <div class="video-info-private">{{ video.privacy.label }}</div>
       </div>
 
       <!-- Display only once -->
index 449cc6af4ae1eb1c99d73face6b609ae4c20f762..f276ea389f8fe9c0857a5da1b7d33b0a69bbec42 100644 (file)
       font-weight: $font-semibold;
     }
 
-    .video-info-date-views {
+    .video-info-date-views, .video-info-private {
       font-size: 13px;
+
+      &.video-info-private {
+        font-weight: $font-semibold;
+      }
     }
   }
 
index 60fe578996835d736455243899cc65a09b330149..74ed1c5806c5b0730fa957a8052257c4c4f818b8 100644 (file)
@@ -71,7 +71,7 @@ export class AuthUser extends User {
     ROLE: 'role',
     EMAIL: 'email',
     USERNAME: 'username',
-    DEFAULT_NSFW_POLICY: 'nsfw_policy',
+    NSFW_POLICY: 'nsfw_policy',
     AUTO_PLAY_VIDEO: 'auto_play_video'
   }
 
@@ -86,7 +86,7 @@ export class AuthUser extends User {
           username: peertubeLocalStorage.getItem(this.KEYS.USERNAME),
           email: peertubeLocalStorage.getItem(this.KEYS.EMAIL),
           role: parseInt(peertubeLocalStorage.getItem(this.KEYS.ROLE), 10) as UserRole,
-          nsfwPolicy: peertubeLocalStorage.getItem(this.KEYS.DEFAULT_NSFW_POLICY) as NSFWPolicyType,
+          nsfwPolicy: peertubeLocalStorage.getItem(this.KEYS.NSFW_POLICY) as NSFWPolicyType,
           autoPlayVideo: peertubeLocalStorage.getItem(this.KEYS.AUTO_PLAY_VIDEO) === 'true'
         },
         Tokens.load()
@@ -100,7 +100,7 @@ export class AuthUser extends User {
     peertubeLocalStorage.removeItem(this.KEYS.USERNAME)
     peertubeLocalStorage.removeItem(this.KEYS.ID)
     peertubeLocalStorage.removeItem(this.KEYS.ROLE)
-    peertubeLocalStorage.removeItem(this.KEYS.DEFAULT_NSFW_POLICY)
+    peertubeLocalStorage.removeItem(this.KEYS.NSFW_POLICY)
     peertubeLocalStorage.removeItem(this.KEYS.AUTO_PLAY_VIDEO)
     peertubeLocalStorage.removeItem(this.KEYS.EMAIL)
     Tokens.flush()
@@ -137,7 +137,7 @@ export class AuthUser extends User {
     peertubeLocalStorage.setItem(AuthUser.KEYS.USERNAME, this.username)
     peertubeLocalStorage.setItem(AuthUser.KEYS.EMAIL, this.email)
     peertubeLocalStorage.setItem(AuthUser.KEYS.ROLE, this.role.toString())
-    peertubeLocalStorage.setItem(AuthUser.KEYS.DEFAULT_NSFW_POLICY, this.nsfwPolicy.toString())
+    peertubeLocalStorage.setItem(AuthUser.KEYS.NSFW_POLICY, this.nsfwPolicy.toString())
     peertubeLocalStorage.setItem(AuthUser.KEYS.AUTO_PLAY_VIDEO, JSON.stringify(this.autoPlayVideo))
     this.tokens.save()
   }
index a1f7207a28149febeed5a569435dcf97da8a48a6..5397aa37f7ed9813a3e7454c17bca1881e4340cf 100644 (file)
@@ -1,17 +1,9 @@
-import {
-  UserRight,
-  VideoChannel,
-  VideoDetails as VideoDetailsServerModel,
-  VideoFile,
-  VideoPrivacy
-} from '../../../../../shared'
+import { UserRight, VideoChannel, VideoDetails as VideoDetailsServerModel, VideoFile } from '../../../../../shared'
 import { Account } from '../../../../../shared/models/actors'
-import { VideoConstant } from '../../../../../shared/models/videos/video.model'
 import { AuthUser } from '../../core'
 import { Video } from '../../shared/video/video.model'
 
 export class VideoDetails extends Video implements VideoDetailsServerModel {
-  privacy: VideoConstant<VideoPrivacy>
   descriptionPath: string
   support: string
   channel: VideoChannel
@@ -26,7 +18,6 @@ export class VideoDetails extends Video implements VideoDetailsServerModel {
   constructor (hash: VideoDetailsServerModel) {
     super(hash)
 
-    this.privacy = hash.privacy
     this.descriptionPath = hash.descriptionPath
     this.files = hash.files
     this.channel = hash.channel
index adc248a1ef902209c6ea5d41e791e9375a5a7472..e25c172e0315ec98dad13819f3082bd853edb801 100644 (file)
@@ -1,6 +1,6 @@
 import { Account } from '@app/shared/account/account.model'
 import { User } from '../'
-import { Video as VideoServerModel } from '../../../../../shared'
+import { Video as VideoServerModel, VideoPrivacy } from '../../../../../shared'
 import { Avatar } from '../../../../../shared/models/avatars/avatar.model'
 import { VideoConstant } from '../../../../../shared/models/videos/video.model'
 import { getAbsoluteAPIUrl } from '../misc/utils'
@@ -14,6 +14,7 @@ export class Video implements VideoServerModel {
   category: VideoConstant<number>
   licence: VideoConstant<number>
   language: VideoConstant<number>
+  privacy: VideoConstant<VideoPrivacy>
   description: string
   duration: number
   durationLabel: string
@@ -62,6 +63,7 @@ export class Video implements VideoServerModel {
     this.category = hash.category
     this.licence = hash.licence
     this.language = hash.language
+    this.privacy = hash.privacy
     this.description = hash.description
     this.duration = hash.duration
     this.durationLabel = Video.createDurationString(hash.duration)
index d1915586ae78537c044ca195c9b811dfbfd425b6..fb436366cc2dfed7a8f79eb9c4ee63c283d5dde2 100644 (file)
@@ -168,7 +168,7 @@ const CONFIG = {
     get DESCRIPTION () { return config.get<string>('instance.description') },
     get TERMS () { return config.get<string>('instance.terms') },
     get DEFAULT_CLIENT_ROUTE () { return config.get<string>('instance.default_client_route') },
-    get DEFAULT_NSFW_POLICY () { return config.get<NSFWPolicyType>('instance.default_nsfw_policy') },
+    get NSFW_POLICY () { return config.get<NSFWPolicyType>('instance.default_nsfw_policy') },
     CUSTOMIZATIONS: {
       get JAVASCRIPT () { return config.get<string>('instance.customizations.javascript') },
       get CSS () { return config.get<string>('instance.customizations.css') }
index 2e66f9aa7d441c312227413e72cd8e033e894139..c08d18b710198b1cd3206f79b273edc72d57c06a 100644 (file)
@@ -884,6 +884,13 @@ export class VideoModel extends Model<VideoModel> {
     return languageLabel
   }
 
+  private static getPrivacyLabel (id: number) {
+    let privacyLabel = VIDEO_PRIVACIES[id]
+    if (!privacyLabel) privacyLabel = 'Unknown'
+
+    return privacyLabel
+  }
+
   getOriginalFile () {
     if (Array.isArray(this.VideoFiles) === false) return undefined
 
@@ -990,6 +997,10 @@ export class VideoModel extends Model<VideoModel> {
         id: this.language,
         label: VideoModel.getLanguageLabel(this.language)
       },
+      privacy: {
+        id: this.privacy,
+        label: VideoModel.getPrivacyLabel(this.privacy)
+      },
       nsfw: this.nsfw,
       description: this.getTruncatedDescription(),
       isLocal: this.isOwned(),
@@ -1016,15 +1027,7 @@ export class VideoModel extends Model<VideoModel> {
   toFormattedDetailsJSON (): VideoDetails {
     const formattedJson = this.toFormattedJSON()
 
-    // Maybe our server is not up to date and there are new privacy settings since our version
-    let privacyLabel = VIDEO_PRIVACIES[this.privacy]
-    if (!privacyLabel) privacyLabel = 'Unknown'
-
     const detailsJson = {
-      privacy: {
-        id: this.privacy,
-        label: privacyLabel
-      },
       support: this.support,
       descriptionPath: this.getDescriptionPath(),
       channel: this.VideoChannel.toFormattedJSON(),
index df9071c292fa8957082f69910da24755a040907b..5e186147e3e218223f1b18850608eab446612dc6 100644 (file)
@@ -442,6 +442,8 @@ async function completeVideoCheck (
   expect(video.licence.label).to.equal(VIDEO_LICENCES[attributes.licence] || 'Unknown')
   expect(video.language.id).to.equal(attributes.language)
   expect(video.language.label).to.equal(VIDEO_LANGUAGES[attributes.language] || 'Unknown')
+  expect(video.privacy.id).to.deep.equal(attributes.privacy)
+  expect(video.privacy.label).to.deep.equal(VIDEO_PRIVACIES[attributes.privacy])
   expect(video.nsfw).to.equal(attributes.nsfw)
   expect(video.description).to.equal(attributes.description)
   expect(video.account.host).to.equal(attributes.account.host)
@@ -459,8 +461,6 @@ async function completeVideoCheck (
 
   expect(videoDetails.files).to.have.lengthOf(attributes.files.length)
   expect(videoDetails.tags).to.deep.equal(attributes.tags)
-  expect(videoDetails.privacy.id).to.deep.equal(attributes.privacy)
-  expect(videoDetails.privacy.label).to.deep.equal(VIDEO_PRIVACIES[attributes.privacy])
   expect(videoDetails.account.name).to.equal(attributes.account.name)
   expect(videoDetails.account.host).to.equal(attributes.account.host)
   expect(videoDetails.commentsEnabled).to.equal(attributes.commentsEnabled)
index 1b5f1a09c685e3ee2aa164a517f1b5843bbe76d1..70132c050988f2b13b6e97dd00fd9a7b07f4986d 100644 (file)
@@ -26,6 +26,7 @@ export interface Video {
   category: VideoConstant<number>
   licence: VideoConstant<number>
   language: VideoConstant<number>
+  privacy: VideoConstant<VideoPrivacy>
   description: string
   duration: number
   isLocal: boolean
@@ -48,7 +49,6 @@ export interface Video {
 }
 
 export interface VideoDetails extends Video {
-  privacy: VideoConstant<VideoPrivacy>
   descriptionPath: string
   support: string
   channel: VideoChannel