aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--client/src/app/shared/users/user.model.ts7
-rw-r--r--client/src/app/videos/shared/video.model.ts21
-rw-r--r--client/src/app/videos/video-list/video-miniature.component.html2
-rw-r--r--server/middlewares/validators/videos.ts4
-rw-r--r--server/models/user.ts2
-rw-r--r--server/models/video.ts4
-rw-r--r--shared/models/user.model.ts2
-rw-r--r--shared/models/video.model.ts22
-rw-r--r--support/doc/client/code.md22
-rw-r--r--support/doc/server/code.md14
10 files changed, 65 insertions, 35 deletions
diff --git a/client/src/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts
index f7859f495..09722704a 100644
--- a/client/src/app/shared/users/user.model.ts
+++ b/client/src/app/shared/users/user.model.ts
@@ -1,6 +1,9 @@
1export class User { 1import { User as UserServerModel } from '../../../../../shared';
2
3export class User implements UserServerModel {
2 id: number; 4 id: number;
3 username: string; 5 username: string;
6 email: string;
4 role: string; 7 role: string;
5 displayNSFW: boolean; 8 displayNSFW: boolean;
6 createdAt: Date; 9 createdAt: Date;
@@ -8,12 +11,14 @@ export class User {
8 constructor(hash: { 11 constructor(hash: {
9 id: number, 12 id: number,
10 username: string, 13 username: string,
14 email: string,
11 role: string, 15 role: string,
12 displayNSFW?: boolean, 16 displayNSFW?: boolean,
13 createdAt?: Date, 17 createdAt?: Date,
14 }) { 18 }) {
15 this.id = hash.id; 19 this.id = hash.id;
16 this.username = hash.username; 20 this.username = hash.username;
21 this.email = hash.email;
17 this.role = hash.role; 22 this.role = hash.role;
18 this.displayNSFW = hash.displayNSFW; 23 this.displayNSFW = hash.displayNSFW;
19 24
diff --git a/client/src/app/videos/shared/video.model.ts b/client/src/app/videos/shared/video.model.ts
index fafdb4ac4..0cf4039df 100644
--- a/client/src/app/videos/shared/video.model.ts
+++ b/client/src/app/videos/shared/video.model.ts
@@ -1,17 +1,19 @@
1import { Video as VideoServerModel } from '../../../../../shared';
1import { User } from '../../shared'; 2import { User } from '../../shared';
2 3
3export class Video { 4export class Video implements VideoServerModel {
4 author: string; 5 author: string;
5 by: string; 6 by: string;
6 createdAt: Date; 7 createdAt: Date;
7 categoryLabel: string; 8 categoryLabel: string;
8 category: string; 9 category: number;
9 licenceLabel: string; 10 licenceLabel: string;
10 licence: string; 11 licence: number;
11 languageLabel: string; 12 languageLabel: string;
12 language: string; 13 language: number;
13 description: string; 14 description: string;
14 duration: string; 15 duration: number;
16 durationLabel: string;
15 id: string; 17 id: string;
16 isLocal: boolean; 18 isLocal: boolean;
17 magnetUri: string; 19 magnetUri: string;
@@ -41,11 +43,11 @@ export class Video {
41 author: string, 43 author: string,
42 createdAt: string, 44 createdAt: string,
43 categoryLabel: string, 45 categoryLabel: string,
44 category: string, 46 category: number,
45 licenceLabel: string, 47 licenceLabel: string,
46 licence: string, 48 licence: number,
47 languageLabel: string; 49 languageLabel: string;
48 language: string; 50 language: number;
49 description: string, 51 description: string,
50 duration: number; 52 duration: number;
51 id: string, 53 id: string,
@@ -69,7 +71,8 @@ export class Video {
69 this.languageLabel = hash.languageLabel; 71 this.languageLabel = hash.languageLabel;
70 this.language = hash.language; 72 this.language = hash.language;
71 this.description = hash.description; 73 this.description = hash.description;
72 this.duration = Video.createDurationString(hash.duration); 74 this.duration = hash.duration;
75 this.durationLabel = Video.createDurationString(hash.duration);
73 this.id = hash.id; 76 this.id = hash.id;
74 this.isLocal = hash.isLocal; 77 this.isLocal = hash.isLocal;
75 this.magnetUri = hash.magnetUri; 78 this.magnetUri = hash.magnetUri;
diff --git a/client/src/app/videos/video-list/video-miniature.component.html b/client/src/app/videos/video-list/video-miniature.component.html
index 648ef61b1..b1b881fea 100644
--- a/client/src/app/videos/video-list/video-miniature.component.html
+++ b/client/src/app/videos/video-list/video-miniature.component.html
@@ -10,7 +10,7 @@
10 10
11 <div class="video-miniature-thumbnail-overlay"> 11 <div class="video-miniature-thumbnail-overlay">
12 <span class="video-miniature-thumbnail-overlay-views">{{ video.views }} views</span> 12 <span class="video-miniature-thumbnail-overlay-views">{{ video.views }} views</span>
13 <span class="video-miniature-thumbnail-overlay-duration">{{ video.duration }}</span> 13 <span class="video-miniature-thumbnail-overlay-duration">{{ video.durationLabel }}</span>
14 </div> 14 </div>
15 </a> 15 </a>
16 16
diff --git a/server/middlewares/validators/videos.ts b/server/middlewares/validators/videos.ts
index e99cdefb1..03742a522 100644
--- a/server/middlewares/validators/videos.ts
+++ b/server/middlewares/validators/videos.ts
@@ -8,7 +8,9 @@ import { CONSTRAINTS_FIELDS, SEARCHABLE_COLUMNS } from '../../initializers'
8import { logger, isVideoDurationValid } from '../../helpers' 8import { logger, isVideoDurationValid } from '../../helpers'
9 9
10function videosAddValidator (req: express.Request, res: express.Response, next: express.NextFunction) { 10function videosAddValidator (req: express.Request, res: express.Response, next: express.NextFunction) {
11 req.checkBody('videofile', 'Should have a valid file').isVideoFile(req.files) 11 // FIXME: Don't write an error message, it seems there is a bug with express-validator
12 // 'Should have a valid file'
13 req.checkBody('videofile').isVideoFile(req.files)
12 req.checkBody('name', 'Should have a valid name').isVideoNameValid() 14 req.checkBody('name', 'Should have a valid name').isVideoNameValid()
13 req.checkBody('category', 'Should have a valid category').isVideoCategoryValid() 15 req.checkBody('category', 'Should have a valid category').isVideoCategoryValid()
14 req.checkBody('licence', 'Should have a valid licence').isVideoLicenceValid() 16 req.checkBody('licence', 'Should have a valid licence').isVideoLicenceValid()
diff --git a/server/models/user.ts b/server/models/user.ts
index 0fbfdda50..cd383a16a 100644
--- a/server/models/user.ts
+++ b/server/models/user.ts
@@ -135,7 +135,7 @@ isPasswordMatch = function (password: string, callback: UserMethods.IsPasswordMa
135 return comparePassword(password, this.password, callback) 135 return comparePassword(password, this.password, callback)
136} 136}
137 137
138toFormatedJSON = function () { 138toFormatedJSON = function (this: UserInstance) {
139 return { 139 return {
140 id: this.id, 140 id: this.id,
141 username: this.username, 141 username: this.username,
diff --git a/server/models/video.ts b/server/models/video.ts
index 3f808b811..2234664f4 100644
--- a/server/models/video.ts
+++ b/server/models/video.ts
@@ -447,7 +447,7 @@ isOwned = function () {
447 return this.remoteId === null 447 return this.remoteId === null
448} 448}
449 449
450toFormatedJSON = function () { 450toFormatedJSON = function (this: VideoInstance) {
451 let podHost 451 let podHost
452 452
453 if (this.Author.Pod) { 453 if (this.Author.Pod) {
@@ -488,7 +488,7 @@ toFormatedJSON = function () {
488 views: this.views, 488 views: this.views,
489 likes: this.likes, 489 likes: this.likes,
490 dislikes: this.dislikes, 490 dislikes: this.dislikes,
491 tags: map(this.Tags, 'name'), 491 tags: map<VideoTagInstance, string>(this.Tags, 'name'),
492 thumbnailPath: join(STATIC_PATHS.THUMBNAILS, this.getThumbnailName()), 492 thumbnailPath: join(STATIC_PATHS.THUMBNAILS, this.getThumbnailName()),
493 createdAt: this.createdAt, 493 createdAt: this.createdAt,
494 updatedAt: this.updatedAt 494 updatedAt: this.updatedAt
diff --git a/shared/models/user.model.ts b/shared/models/user.model.ts
index 01cc380d3..a6be359d3 100644
--- a/shared/models/user.model.ts
+++ b/shared/models/user.model.ts
@@ -3,6 +3,6 @@ export interface User {
3 username: string 3 username: string
4 email: string 4 email: string
5 displayNSFW: boolean 5 displayNSFW: boolean
6 role: string[] 6 role: string
7 createdAt: Date 7 createdAt: Date
8} 8}
diff --git a/shared/models/video.model.ts b/shared/models/video.model.ts
index 355e912d2..2e35f005c 100644
--- a/shared/models/video.model.ts
+++ b/shared/models/video.model.ts
@@ -1,3 +1,23 @@
1export interface Video { 1export interface Video {
2 2 id: string
3 author: string
4 createdAt: Date
5 categoryLabel: string
6 category: number
7 licenceLabel: string
8 licence: number
9 languageLabel: string
10 language: number
11 description: string
12 duration: number
13 isLocal: boolean
14 magnetUri: string
15 name: string
16 podHost: string
17 tags: string[]
18 thumbnailPath: string
19 views: number
20 likes: number
21 dislikes: number
22 nsfw: boolean
3} 23}
diff --git a/support/doc/client/code.md b/support/doc/client/code.md
index f629af32f..c1a5c1c5f 100644
--- a/support/doc/client/code.md
+++ b/support/doc/client/code.md
@@ -1,14 +1,14 @@
1# Client code documentation 1# Client code documentation
2 2
3The client is a HTML/CSS/JavaScript web application (single page application -> SPA) developed with [TypeScript](https://www.typescriptlang.org/)/[Angular 2](https://angular.io/). 3The client is a HTML/CSS/JavaScript web application (single page application -> SPA) developed with [TypeScript](https://www.typescriptlang.org/)/[Angular](https://angular.io/).
4 4
5 5
6## Technologies 6## Technologies
7 7
8 * [TypeScript](https://www.typescriptlang.org/) -> Language 8 * [TypeScript](https://www.typescriptlang.org/) -> Language
9 * [Angular 2](https://angular.io) -> JavaScript framework 9 * [Angular](https://angular.io) -> JavaScript framework
10 * [SASS](http://sass-lang.com/) -> CSS framework 10 * [SASS](http://sass-lang.com/) -> CSS framework
11 * [Webpack 2](https://webpack.github.io/docs/) -> Source builder (compile TypeScript, SASS files, bundle them...) 11 * [Webpack](https://webpack.github.io/docs/) -> Source builder (compile TypeScript, SASS files, bundle them...)
12 * [Bootstrap](http://getbootstrap.com/) -> CSS framework 12 * [Bootstrap](http://getbootstrap.com/) -> CSS framework
13 * [WebTorrent](https://webtorrent.io/) -> JavaScript library to make P2P in the browser 13 * [WebTorrent](https://webtorrent.io/) -> JavaScript library to make P2P in the browser
14 * [VideoJS](http://videojs.com/) -> JavaScript player framework 14 * [VideoJS](http://videojs.com/) -> JavaScript player framework
@@ -25,16 +25,16 @@ Here is the description of the useful `client` files directory:
25 .bootstraprc -> Bootstrap configuration file (which module we need) 25 .bootstraprc -> Bootstrap configuration file (which module we need)
26 config -> Webpack configuration files 26 config -> Webpack configuration files
27 src 27 src
28 |__ app -> TypeScript files for Angular 2 application 28 |__ app -> TypeScript files for Angular application
29 |__ assets -> static files (images...) 29 |__ assets -> static files (images...)
30 |__ sass -> SASS files that are global for the application 30 |__ sass -> SASS files that are global for the application
31 |__ standalone -> files outside the Angular application (embed HTML page...) 31 |__ standalone -> files outside the Angular application (embed HTML page...)
32 |__ index.html -> root HTML file for our Angular 2 application 32 |__ index.html -> root HTML file for our Angular application
33 |__ main.ts -> Main TypeScript file that boostraps our Angular 2 application 33 |__ main.ts -> Main TypeScript file that boostraps our Angular application
34 |__ polyfills.ts -> Polyfills imports (ES 2015...) 34 |__ polyfills.ts -> Polyfills imports (ES 2015...)
35 |__ vendor.ts -> Vendor imports (Angular, Bootstrap...) 35 |__ vendor.ts -> Vendor imports (Angular, Bootstrap...)
36 36
37Details of the Angular 2 application file structure. It tries to follow [the official Angular 2 styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html). 37Details of the Angular application file structure. It tries to follow [the official Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
38 38
39 app 39 app
40 |__ account -> Account components (password change...) 40 |__ account -> Account components (password change...)
@@ -44,11 +44,11 @@ Details of the Angular 2 application file structure. It tries to follow [the off
44 |__ shared -> Shared components/services (search component, REST services...) 44 |__ shared -> Shared components/services (search component, REST services...)
45 |__ videos -> Video components (list, watch, upload...) 45 |__ videos -> Video components (list, watch, upload...)
46 |__ app.component.{html,scss,ts} -> Main application component 46 |__ app.component.{html,scss,ts} -> Main application component
47 |__ app.module.ts -> Angular 2 root module that imports all submodules we need 47 |__ app.module.ts -> Angular root module that imports all submodules we need
48 48
49## Conventions 49## Conventions
50 50
51Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular 2 styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html). 51Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
52 52
53## Developing 53## Developing
54 54
@@ -57,8 +57,8 @@ Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [An
57 * Run PostgreSQL and create the database `peertube_dev`. 57 * Run PostgreSQL and create the database `peertube_dev`.
58 * Run `npm run dev` to compile the client and automatically run the server. Then the server will watch and compile the client files automatically. You just need to refresh the browser to see your modifications. 58 * Run `npm run dev` to compile the client and automatically run the server. Then the server will watch and compile the client files automatically. You just need to refresh the browser to see your modifications.
59 59
60In a Angular 2 application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionnaly a SASS file. 60In a Angular application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionnaly a SASS file.
61If you are not familiar with Angular 2 I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html). 61If you are not familiar with Angular I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html).
62 62
63## Components tree 63## Components tree
64 64
diff --git a/support/doc/server/code.md b/support/doc/server/code.md
index c15885c8c..76d11c963 100644
--- a/support/doc/server/code.md
+++ b/support/doc/server/code.md
@@ -1,11 +1,11 @@
1# Server code documentation 1# Server code documentation
2 2
3The server is a web server developed with [NodeJS](https://nodejs.org)/[Express](http://expressjs.com). 3The server is a web server developed with [TypeScript](https://www.typescriptlang.org/)/[Express](http://expressjs.com).
4 4
5 5
6## Technologies 6## Technologies
7 7
8 * [NodeJS](https://nodejs.org) -> Language 8 * [TypeScript](https://www.typescriptlang.org/) -> Language
9 * [PostgreSQL](https://www.postgresql.org/) -> Database 9 * [PostgreSQL](https://www.postgresql.org/) -> Database
10 * [Express](http://expressjs.com) -> Web server framework 10 * [Express](http://expressjs.com) -> Web server framework
11 * [Sequelize](http://docs.sequelizejs.com/en/v3/) -> SQL ORM 11 * [Sequelize](http://docs.sequelizejs.com/en/v3/) -> SQL ORM
@@ -15,11 +15,11 @@ The server is a web server developed with [NodeJS](https://nodejs.org)/[Express]
15 15
16## Files 16## Files
17 17
18The server main file is [server.js](https://github.com/Chocobozzz/PeerTube/blob/master/server.js). 18The server main file is [server.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server.ts).
19The server modules description are in the [package.json](https://github.com/Chocobozzz/PeerTube/blob/master/package.json) at the project root. 19The server modules description are in the [package.json](https://github.com/Chocobozzz/PeerTube/blob/master/package.json) at the project root.
20All other server files are in the [server](https://github.com/Chocobozzz/PeerTube/tree/master/server) directory: 20All other server files are in the [server](https://github.com/Chocobozzz/PeerTube/tree/master/server) directory:
21 21
22 server.js -> app initilization, main routes configuration (static routes...) 22 server.ts -> app initilization, main routes configuration (static routes...)
23 config -> server YAML configurations (for tests, production...) 23 config -> server YAML configurations (for tests, production...)
24 scripts -> Scripts files for npm run 24 scripts -> Scripts files for npm run
25 server 25 server
@@ -42,9 +42,9 @@ Uses [JavaScript Standard Style](http://standardjs.com/).
42 * Install [the dependencies](https://github.com/Chocobozzz/PeerTube#dependencies) 42 * Install [the dependencies](https://github.com/Chocobozzz/PeerTube#dependencies)
43 * Run `npm install` at the root directory to install all the dependencies 43 * Run `npm install` at the root directory to install all the dependencies
44 * Run PostgreSQL and create the database `peertube_dev`. 44 * Run PostgreSQL and create the database `peertube_dev`.
45 * Run `npm run dev` to compile the client and automatically run the server. If the client files are already compiled you can simply run `NODE_ENV=test node server` 45 * Run `npm run dev` to compile the client and automatically run the server. If the client files are already compiled you can simply run `NODE_ENV=test node dist/server`
46 46
47The `NODE_ENV=test` is set to speed up communications between pods (see [constants.js](https://github.com/Chocobozzz/PeerTube/blob/master/server/initializers/constants.js)). 47The `NODE_ENV=test` is set to speed up communications between pods (see [constants.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server/initializers/constants.ts)).
48 48
49`npm run help` gives you all available commands. 49`npm run help` gives you all available commands.
50 50
@@ -68,5 +68,5 @@ If a user wants to watch the video, the tracker will indicate all other users th
68 68
69## Newcomers 69## Newcomers
70 70
71The server entrypoint is [server.js](https://github.com/Chocobozzz/PeerTube/blob/master/server.js). You can begin to look at this file. 71The server entrypoint is [server.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server.ts). You can begin to look at this file.
72Then you can try to understand the [controllers](https://github.com/Chocobozzz/PeerTube/tree/master/server/controllers): they are the entrypoint of each API request. 72Then you can try to understand the [controllers](https://github.com/Chocobozzz/PeerTube/tree/master/server/controllers): they are the entrypoint of each API request.