diff options
author | Chocobozzz <me@florianbigard.com> | 2018-02-16 16:35:32 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-02-16 16:35:32 +0100 |
commit | 6de36768980ef6063b8fcd730b59fa685dd2b99c (patch) | |
tree | a8e5a87b14013b33bf2d306552a380c407a1551d /client/src/app/shared | |
parent | b6a4fd6b099b3363ac59c06cfd81b54e1356d8bc (diff) | |
download | PeerTube-6de36768980ef6063b8fcd730b59fa685dd2b99c.tar.gz PeerTube-6de36768980ef6063b8fcd730b59fa685dd2b99c.tar.zst PeerTube-6de36768980ef6063b8fcd730b59fa685dd2b99c.zip |
Add ability to update thumbnail and preview on client
Diffstat (limited to 'client/src/app/shared')
-rw-r--r-- | client/src/app/shared/forms/form-validators/video.ts | 5 | ||||
-rw-r--r-- | client/src/app/shared/forms/markdown-textarea.component.html | 2 | ||||
-rw-r--r-- | client/src/app/shared/misc/utils.ts | 24 | ||||
-rw-r--r-- | client/src/app/shared/shared.module.ts | 5 | ||||
-rw-r--r-- | client/src/app/shared/video/video-edit.model.ts | 6 | ||||
-rw-r--r-- | client/src/app/shared/video/video-thumbnail.component.html | 2 | ||||
-rw-r--r-- | client/src/app/shared/video/video.service.ts | 17 |
7 files changed, 50 insertions, 11 deletions
diff --git a/client/src/app/shared/forms/form-validators/video.ts b/client/src/app/shared/forms/form-validators/video.ts index 500b5bc5f..34a237a12 100644 --- a/client/src/app/shared/forms/form-validators/video.ts +++ b/client/src/app/shared/forms/form-validators/video.ts | |||
@@ -31,6 +31,11 @@ export const VIDEO_LANGUAGE = { | |||
31 | MESSAGES: {} | 31 | MESSAGES: {} |
32 | } | 32 | } |
33 | 33 | ||
34 | export const VIDEO_IMAGE = { | ||
35 | VALIDATORS: [ ], | ||
36 | MESSAGES: {} | ||
37 | } | ||
38 | |||
34 | export const VIDEO_CHANNEL = { | 39 | export const VIDEO_CHANNEL = { |
35 | VALIDATORS: [ Validators.required ], | 40 | VALIDATORS: [ Validators.required ], |
36 | MESSAGES: { | 41 | MESSAGES: { |
diff --git a/client/src/app/shared/forms/markdown-textarea.component.html b/client/src/app/shared/forms/markdown-textarea.component.html index d2d4cf95c..e8c5ded5b 100644 --- a/client/src/app/shared/forms/markdown-textarea.component.html +++ b/client/src/app/shared/forms/markdown-textarea.component.html | |||
@@ -5,7 +5,7 @@ | |||
5 | id="description" name="description"> | 5 | id="description" name="description"> |
6 | </textarea> | 6 | </textarea> |
7 | 7 | ||
8 | <tabset *ngIf="arePreviewsDisplayed()" #staticTabs class="previews"> | 8 | <tabset *ngIf="arePreviewsDisplayed()" class="previews"> |
9 | <tab *ngIf="truncate !== undefined" heading="Truncated description preview" [innerHTML]="truncatedDescriptionHTML"></tab> | 9 | <tab *ngIf="truncate !== undefined" heading="Truncated description preview" [innerHTML]="truncatedDescriptionHTML"></tab> |
10 | <tab heading="Complete description preview" [innerHTML]="descriptionHTML"></tab> | 10 | <tab heading="Complete description preview" [innerHTML]="descriptionHTML"></tab> |
11 | </tabset> | 11 | </tabset> |
diff --git a/client/src/app/shared/misc/utils.ts b/client/src/app/shared/misc/utils.ts index e6a697098..e2e4c5b36 100644 --- a/client/src/app/shared/misc/utils.ts +++ b/client/src/app/shared/misc/utils.ts | |||
@@ -67,6 +67,27 @@ function isInMobileView () { | |||
67 | return window.innerWidth < 500 | 67 | return window.innerWidth < 500 |
68 | } | 68 | } |
69 | 69 | ||
70 | // Thanks: https://gist.github.com/ghinda/8442a57f22099bdb2e34 | ||
71 | function objectToFormData (obj: any, form?: FormData, namespace?: string) { | ||
72 | let fd = form || new FormData() | ||
73 | let formKey | ||
74 | |||
75 | for (let key of Object.keys(obj)) { | ||
76 | if (namespace) formKey = `${namespace}[${key}]` | ||
77 | else formKey = key | ||
78 | |||
79 | if (obj[key] === undefined) continue | ||
80 | |||
81 | if (typeof obj[ key ] === 'object' && !(obj[ key ] instanceof File)) { | ||
82 | objectToFormData(obj[ key ], fd, key) | ||
83 | } else { | ||
84 | fd.append(formKey, obj[ key ]) | ||
85 | } | ||
86 | } | ||
87 | |||
88 | return fd | ||
89 | } | ||
90 | |||
70 | export { | 91 | export { |
71 | viewportHeight, | 92 | viewportHeight, |
72 | getParameterByName, | 93 | getParameterByName, |
@@ -75,5 +96,6 @@ export { | |||
75 | dateToHuman, | 96 | dateToHuman, |
76 | isInSmallView, | 97 | isInSmallView, |
77 | isInMobileView, | 98 | isInMobileView, |
78 | immutableAssign | 99 | immutableAssign, |
100 | objectToFormData | ||
79 | } | 101 | } |
diff --git a/client/src/app/shared/shared.module.ts b/client/src/app/shared/shared.module.ts index 330a0ba84..2a9426479 100644 --- a/client/src/app/shared/shared.module.ts +++ b/client/src/app/shared/shared.module.ts | |||
@@ -40,10 +40,10 @@ import { VideoService } from './video/video.service' | |||
40 | 40 | ||
41 | BsDropdownModule.forRoot(), | 41 | BsDropdownModule.forRoot(), |
42 | ModalModule.forRoot(), | 42 | ModalModule.forRoot(), |
43 | TabsModule.forRoot(), | ||
43 | 44 | ||
44 | PrimeSharedModule, | 45 | PrimeSharedModule, |
45 | NgPipesModule, | 46 | NgPipesModule |
46 | TabsModule.forRoot() | ||
47 | ], | 47 | ], |
48 | 48 | ||
49 | declarations: [ | 49 | declarations: [ |
@@ -69,6 +69,7 @@ import { VideoService } from './video/video.service' | |||
69 | 69 | ||
70 | BsDropdownModule, | 70 | BsDropdownModule, |
71 | ModalModule, | 71 | ModalModule, |
72 | TabsModule, | ||
72 | PrimeSharedModule, | 73 | PrimeSharedModule, |
73 | BytesPipe, | 74 | BytesPipe, |
74 | KeysPipe, | 75 | KeysPipe, |
diff --git a/client/src/app/shared/video/video-edit.model.ts b/client/src/app/shared/video/video-edit.model.ts index b1c772217..c39252f46 100644 --- a/client/src/app/shared/video/video-edit.model.ts +++ b/client/src/app/shared/video/video-edit.model.ts | |||
@@ -12,6 +12,10 @@ export class VideoEdit { | |||
12 | commentsEnabled: boolean | 12 | commentsEnabled: boolean |
13 | channel: number | 13 | channel: number |
14 | privacy: VideoPrivacy | 14 | privacy: VideoPrivacy |
15 | thumbnailfile?: any | ||
16 | previewfile?: any | ||
17 | thumbnailUrl: string | ||
18 | previewUrl: string | ||
15 | uuid?: string | 19 | uuid?: string |
16 | id?: number | 20 | id?: number |
17 | 21 | ||
@@ -29,6 +33,8 @@ export class VideoEdit { | |||
29 | this.commentsEnabled = videoDetails.commentsEnabled | 33 | this.commentsEnabled = videoDetails.commentsEnabled |
30 | this.channel = videoDetails.channel.id | 34 | this.channel = videoDetails.channel.id |
31 | this.privacy = videoDetails.privacy | 35 | this.privacy = videoDetails.privacy |
36 | this.thumbnailUrl = videoDetails.thumbnailUrl | ||
37 | this.previewUrl = videoDetails.previewUrl | ||
32 | } | 38 | } |
33 | } | 39 | } |
34 | 40 | ||
diff --git a/client/src/app/shared/video/video-thumbnail.component.html b/client/src/app/shared/video/video-thumbnail.component.html index 8acfb3c41..4604d10e2 100644 --- a/client/src/app/shared/video/video-thumbnail.component.html +++ b/client/src/app/shared/video/video-thumbnail.component.html | |||
@@ -2,7 +2,7 @@ | |||
2 | [routerLink]="['/videos/watch', video.uuid]" [attr.title]="video.name" | 2 | [routerLink]="['/videos/watch', video.uuid]" [attr.title]="video.name" |
3 | class="video-thumbnail" | 3 | class="video-thumbnail" |
4 | > | 4 | > |
5 | <img [attr.src]="getImageUrl()" alt="video thumbnail" [ngClass]="{ 'blur-filter': nsfw }" /> | 5 | <img [attr.src]="getImageUrl()" [ngClass]="{ 'blur-filter': nsfw }" /> |
6 | 6 | ||
7 | <div class="video-thumbnail-overlay"> | 7 | <div class="video-thumbnail-overlay"> |
8 | {{ video.durationLabel }} | 8 | {{ video.durationLabel }} |
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index 01d32176b..2e7138cd1 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -18,6 +18,7 @@ import { SortField } from './sort-field.type' | |||
18 | import { VideoDetails } from './video-details.model' | 18 | import { VideoDetails } from './video-details.model' |
19 | import { VideoEdit } from './video-edit.model' | 19 | import { VideoEdit } from './video-edit.model' |
20 | import { Video } from './video.model' | 20 | import { Video } from './video.model' |
21 | import { objectToFormData } from '@app/shared/misc/utils' | ||
21 | 22 | ||
22 | @Injectable() | 23 | @Injectable() |
23 | export class VideoService { | 24 | export class VideoService { |
@@ -46,10 +47,10 @@ export class VideoService { | |||
46 | } | 47 | } |
47 | 48 | ||
48 | updateVideo (video: VideoEdit) { | 49 | updateVideo (video: VideoEdit) { |
49 | const language = video.language || null | 50 | const language = video.language || undefined |
50 | const licence = video.licence || null | 51 | const licence = video.licence || undefined |
51 | const category = video.category || null | 52 | const category = video.category || undefined |
52 | const description = video.description || null | 53 | const description = video.description || undefined |
53 | 54 | ||
54 | const body: VideoUpdate = { | 55 | const body: VideoUpdate = { |
55 | name: video.name, | 56 | name: video.name, |
@@ -60,10 +61,14 @@ export class VideoService { | |||
60 | privacy: video.privacy, | 61 | privacy: video.privacy, |
61 | tags: video.tags, | 62 | tags: video.tags, |
62 | nsfw: video.nsfw, | 63 | nsfw: video.nsfw, |
63 | commentsEnabled: video.commentsEnabled | 64 | commentsEnabled: video.commentsEnabled, |
65 | thumbnailfile: video.thumbnailfile, | ||
66 | previewfile: video.previewfile | ||
64 | } | 67 | } |
65 | 68 | ||
66 | return this.authHttp.put(VideoService.BASE_VIDEO_URL + video.id, body) | 69 | const data = objectToFormData(body) |
70 | |||
71 | return this.authHttp.put(VideoService.BASE_VIDEO_URL + video.id, data) | ||
67 | .map(this.restExtractor.extractDataBool) | 72 | .map(this.restExtractor.extractDataBool) |
68 | .catch(this.restExtractor.handleError) | 73 | .catch(this.restExtractor.handleError) |
69 | } | 74 | } |