]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/videos/shared/video.model.ts
Update client modules
[github/Chocobozzz/PeerTube.git] / client / src / app / videos / shared / video.model.ts
index 65417f751e6c3b67d2246ca31b1ed275f437b451..0cf4039df312b5f33a1d354710af7d50747db2a5 100644 (file)
@@ -1,27 +1,33 @@
-export class Video {
+import { Video as VideoServerModel } from '../../../../../shared';
+import { User } from '../../shared';
+
+export class Video implements VideoServerModel {
   author: string;
   by: string;
-  createdDate: Date;
+  createdAt: Date;
+  categoryLabel: string;
+  category: number;
+  licenceLabel: string;
+  licence: number;
+  languageLabel: string;
+  language: number;
   description: string;
-  duration: string;
+  duration: number;
+  durationLabel: string;
   id: string;
   isLocal: boolean;
   magnetUri: string;
   name: string;
-  podUrl: string;
+  podHost: string;
   tags: string[];
   thumbnailPath: string;
+  views: number;
+  likes: number;
+  dislikes: number;
+  nsfw: boolean;
 
-  private static createByString(author: string, podUrl: string) {
-    let [ host, port ] = podUrl.replace(/^https?:\/\//, '').split(':');
-
-    if (port === '80' || port === '443') {
-      port = '';
-    } else {
-      port = ':' + port;
-    }
-
-    return author + '@' + host + port;
+  private static createByString(author: string, podHost: string) {
+    return author + '@' + podHost;
   }
 
   private static createDurationString(duration: number) {
@@ -35,33 +41,96 @@ export class Video {
 
   constructor(hash: {
     author: string,
-    createdDate: string,
+    createdAt: string,
+    categoryLabel: string,
+    category: number,
+    licenceLabel: string,
+    licence: number,
+    languageLabel: string;
+    language: number;
     description: string,
     duration: number;
     id: string,
     isLocal: boolean,
     magnetUri: string,
     name: string,
-    podUrl: string,
+    podHost: string,
     tags: string[],
-    thumbnailPath: string
+    thumbnailPath: string,
+    views: number,
+    likes: number,
+    dislikes: number,
+    nsfw: boolean
   }) {
     this.author  = hash.author;
-    this.createdDate = new Date(hash.createdDate);
+    this.createdAt = new Date(hash.createdAt);
+    this.categoryLabel = hash.categoryLabel;
+    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 = Video.createDurationString(hash.duration);
+    this.duration = hash.duration;
+    this.durationLabel = Video.createDurationString(hash.duration);
     this.id = hash.id;
     this.isLocal = hash.isLocal;
     this.magnetUri = hash.magnetUri;
     this.name = hash.name;
-    this.podUrl = hash.podUrl;
+    this.podHost = hash.podHost;
     this.tags = hash.tags;
     this.thumbnailPath = hash.thumbnailPath;
+    this.views = hash.views;
+    this.likes = hash.likes;
+    this.dislikes = hash.dislikes;
+    this.nsfw = hash.nsfw;
 
-    this.by = Video.createByString(hash.author, hash.podUrl);
+    this.by = Video.createByString(hash.author, hash.podHost);
   }
 
   isRemovableBy(user) {
-    return this.isLocal === true && user && this.author === user.username;
+    return user && this.isLocal === true && (this.author === user.username || user.isAdmin() === true);
+  }
+
+  isBlackistableBy(user) {
+    return user && user.isAdmin() === true && this.isLocal === false;
+  }
+
+  isUpdatableBy(user) {
+    return user && this.isLocal === true && user.username === this.author;
+  }
+
+  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));
+  }
+
+  patch(values: Object) {
+    Object.keys(values).forEach((key) => {
+      this[key] = values[key];
+    });
+  }
+
+  toJSON() {
+    return {
+      author: this.author,
+      createdAt: this.createdAt,
+      category: this.category,
+      licence: this.licence,
+      language: this.language,
+      description: this.description,
+      duration: this.duration,
+      id: this.id,
+      isLocal: this.isLocal,
+      magnetUri: this.magnetUri,
+      name: this.name,
+      podHost: this.podHost,
+      tags: this.tags,
+      thumbnailPath: this.thumbnailPath,
+      views: this.views,
+      likes: this.likes,
+      dislikes: this.dislikes,
+      nsfw: this.nsfw
+    };
   }
 }