diff options
9 files changed, 136 insertions, 61 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html index db3036c4e..6018ff5e0 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html | |||
@@ -13,25 +13,29 @@ | |||
13 | <ng-container formGroupName="cache"> | 13 | <ng-container formGroupName="cache"> |
14 | <div class="form-group" formGroupName="previews"> | 14 | <div class="form-group" formGroupName="previews"> |
15 | <label i18n for="cachePreviewsSize">Number of previews to keep in cache</label> | 15 | <label i18n for="cachePreviewsSize">Number of previews to keep in cache</label> |
16 | |||
16 | <div class="number-with-unit"> | 17 | <div class="number-with-unit"> |
17 | <input | 18 | <input |
18 | type="number" min="0" id="cachePreviewsSize" class="form-control" | 19 | type="number" min="0" id="cachePreviewsSize" class="form-control" |
19 | formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.previews.size'] }" | 20 | formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.previews.size'] }" |
20 | > | 21 | > |
21 | <span i18n>{form.value['cache']['previews']['size'], plural, =1 {cached image} other {cached images}}</span> | 22 | <span i18n>{getCacheSize('previews'), plural, =1 {cached image} other {cached images}}</span> |
22 | </div> | 23 | </div> |
24 | |||
23 | <div *ngIf="formErrors.cache.previews.size" class="form-error">{{ formErrors.cache.previews.size }}</div> | 25 | <div *ngIf="formErrors.cache.previews.size" class="form-error">{{ formErrors.cache.previews.size }}</div> |
24 | </div> | 26 | </div> |
25 | 27 | ||
26 | <div class="form-group" formGroupName="captions"> | 28 | <div class="form-group" formGroupName="captions"> |
27 | <label i18n for="cacheCaptionsSize">Number of video captions to keep in cache</label> | 29 | <label i18n for="cacheCaptionsSize">Number of video captions to keep in cache</label> |
30 | |||
28 | <div class="number-with-unit"> | 31 | <div class="number-with-unit"> |
29 | <input | 32 | <input |
30 | type="number" min="0" id="cacheCaptionsSize" class="form-control" | 33 | type="number" min="0" id="cacheCaptionsSize" class="form-control" |
31 | formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.captions.size'] }" | 34 | formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.captions.size'] }" |
32 | > | 35 | > |
33 | <span i18n>{form.value['cache']['captions']['size'], plural, =1 {cached image} other {cached images}}</span> | 36 | <span i18n>{getCacheSize('captions'), plural, =1 {cached caption} other {cached captions}}</span> |
34 | </div> | 37 | </div> |
38 | |||
35 | <div *ngIf="formErrors.cache.captions.size" class="form-error">{{ formErrors.cache.captions.size }}</div> | 39 | <div *ngIf="formErrors.cache.captions.size" class="form-error">{{ formErrors.cache.captions.size }}</div> |
36 | </div> | 40 | </div> |
37 | </ng-container> | 41 | </ng-container> |
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts index a37b7b7d5..934438a50 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts | |||
@@ -11,4 +11,8 @@ import { FormGroup } from '@angular/forms' | |||
11 | export class EditAdvancedConfigurationComponent { | 11 | export class EditAdvancedConfigurationComponent { |
12 | @Input() form: FormGroup | 12 | @Input() form: FormGroup |
13 | @Input() formErrors: any | 13 | @Input() formErrors: any |
14 | |||
15 | getCacheSize (type: 'captions' | 'previews') { | ||
16 | return this.form.value['cache'][type]['size'] | ||
17 | } | ||
14 | } | 18 | } |
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html index ac1a11b4d..21a719d42 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html | |||
@@ -25,6 +25,7 @@ | |||
25 | 25 | ||
26 | <div class="form-group" formGroupName="instance"> | 26 | <div class="form-group" formGroupName="instance"> |
27 | <label i18n for="instanceDefaultClientRoute">Landing page</label> | 27 | <label i18n for="instanceDefaultClientRoute">Landing page</label> |
28 | |||
28 | <div class="peertube-select-container"> | 29 | <div class="peertube-select-container"> |
29 | <select id="instanceDefaultClientRoute" formControlName="defaultClientRoute" class="form-control"> | 30 | <select id="instanceDefaultClientRoute" formControlName="defaultClientRoute" class="form-control"> |
30 | <option i18n value="/videos/overview">Discover videos</option> | 31 | <option i18n value="/videos/overview">Discover videos</option> |
@@ -41,6 +42,7 @@ | |||
41 | <option i18n value="/videos/local">Local videos</option> | 42 | <option i18n value="/videos/local">Local videos</option> |
42 | </select> | 43 | </select> |
43 | </div> | 44 | </div> |
45 | |||
44 | <div *ngIf="formErrors.instance.defaultClientRoute" class="form-error">{{ formErrors.instance.defaultClientRoute }}</div> | 46 | <div *ngIf="formErrors.instance.defaultClientRoute" class="form-error">{{ formErrors.instance.defaultClientRoute }}</div> |
45 | </div> | 47 | </div> |
46 | 48 | ||
@@ -48,6 +50,7 @@ | |||
48 | <ng-container formGroupName="videos"> | 50 | <ng-container formGroupName="videos"> |
49 | <ng-container formGroupName="algorithms"> | 51 | <ng-container formGroupName="algorithms"> |
50 | <label i18n for="trendingVideosAlgorithmsDefault">Default trending page</label> | 52 | <label i18n for="trendingVideosAlgorithmsDefault">Default trending page</label> |
53 | |||
51 | <div class="peertube-select-container"> | 54 | <div class="peertube-select-container"> |
52 | <select id="trendingVideosAlgorithmsDefault" formControlName="default" class="form-control"> | 55 | <select id="trendingVideosAlgorithmsDefault" formControlName="default" class="form-control"> |
53 | <option i18n value="best">Best videos</option> | 56 | <option i18n value="best">Best videos</option> |
@@ -56,6 +59,7 @@ | |||
56 | <option i18n value="most-liked">Most liked videos</option> | 59 | <option i18n value="most-liked">Most liked videos</option> |
57 | </select> | 60 | </select> |
58 | </div> | 61 | </div> |
62 | |||
59 | <div *ngIf="formErrors.trending.videos.algorithms.default" class="form-error">{{ formErrors.trending.videos.algorithms.default }}</div> | 63 | <div *ngIf="formErrors.trending.videos.algorithms.default" class="form-error">{{ formErrors.trending.videos.algorithms.default }}</div> |
60 | </ng-container> | 64 | </ng-container> |
61 | </ng-container> | 65 | </ng-container> |
@@ -92,6 +96,7 @@ | |||
92 | 96 | ||
93 | <div class="form-group"> | 97 | <div class="form-group"> |
94 | <label i18n for="broadcastMessageLevel">Broadcast message level</label> | 98 | <label i18n for="broadcastMessageLevel">Broadcast message level</label> |
99 | |||
95 | <div class="peertube-select-container"> | 100 | <div class="peertube-select-container"> |
96 | <select id="broadcastMessageLevel" formControlName="level" class="form-control"> | 101 | <select id="broadcastMessageLevel" formControlName="level" class="form-control"> |
97 | <option value="info">info</option> | 102 | <option value="info">info</option> |
@@ -99,15 +104,18 @@ | |||
99 | <option value="error">error</option> | 104 | <option value="error">error</option> |
100 | </select> | 105 | </select> |
101 | </div> | 106 | </div> |
107 | |||
102 | <div *ngIf="formErrors.broadcastMessage.level" class="form-error">{{ formErrors.broadcastMessage.level }}</div> | 108 | <div *ngIf="formErrors.broadcastMessage.level" class="form-error">{{ formErrors.broadcastMessage.level }}</div> |
103 | </div> | 109 | </div> |
104 | 110 | ||
105 | <div class="form-group"> | 111 | <div class="form-group"> |
106 | <label i18n for="broadcastMessageMessage">Message</label><my-help helpType="markdownText"></my-help> | 112 | <label i18n for="broadcastMessageMessage">Message</label><my-help helpType="markdownText"></my-help> |
113 | |||
107 | <my-markdown-textarea | 114 | <my-markdown-textarea |
108 | name="broadcastMessageMessage" formControlName="message" textareaMaxWidth="500px" | 115 | name="broadcastMessageMessage" formControlName="message" textareaMaxWidth="500px" |
109 | [classes]="{ 'input-error': formErrors['broadcastMessage.message'] }" | 116 | [classes]="{ 'input-error': formErrors['broadcastMessage.message'] }" |
110 | ></my-markdown-textarea> | 117 | ></my-markdown-textarea> |
118 | |||
111 | <div *ngIf="formErrors.broadcastMessage.message" class="form-error">{{ formErrors.broadcastMessage.message }}</div> | 119 | <div *ngIf="formErrors.broadcastMessage.message" class="form-error">{{ formErrors.broadcastMessage.message }}</div> |
112 | </div> | 120 | </div> |
113 | 121 | ||
@@ -139,13 +147,14 @@ | |||
139 | </ng-container> | 147 | </ng-container> |
140 | 148 | ||
141 | <ng-container ngProjectAs="extra"> | 149 | <ng-container ngProjectAs="extra"> |
142 | <my-peertube-checkbox [ngClass]="{ 'disabled-checkbox-extra': !isSignupEnabled() }" | 150 | <my-peertube-checkbox [ngClass]="getDisabledSignupClass()" |
143 | inputName="signupRequiresEmailVerification" formControlName="requiresEmailVerification" | 151 | inputName="signupRequiresEmailVerification" formControlName="requiresEmailVerification" |
144 | i18n-labelText labelText="Signup requires email verification" | 152 | i18n-labelText labelText="Signup requires email verification" |
145 | ></my-peertube-checkbox> | 153 | ></my-peertube-checkbox> |
146 | 154 | ||
147 | <div [ngClass]="{ 'disabled-checkbox-extra': !isSignupEnabled() }" class="mt-3"> | 155 | <div [ngClass]="getDisabledSignupClass()" class="mt-3"> |
148 | <label i18n for="signupLimit">Signup limit</label> | 156 | <label i18n for="signupLimit">Signup limit</label> |
157 | |||
149 | <div class="number-with-unit"> | 158 | <div class="number-with-unit"> |
150 | <input | 159 | <input |
151 | type="number" min="-1" id="signupLimit" class="form-control" | 160 | type="number" min="-1" id="signupLimit" class="form-control" |
@@ -153,8 +162,10 @@ | |||
153 | > | 162 | > |
154 | <span i18n>{form.value['signup']['limit'], plural, =1 {user} other {users}}</span> | 163 | <span i18n>{form.value['signup']['limit'], plural, =1 {user} other {users}}</span> |
155 | </div> | 164 | </div> |
165 | |||
156 | <div *ngIf="formErrors.signup.limit" class="form-error">{{ formErrors.signup.limit }}</div> | 166 | <div *ngIf="formErrors.signup.limit" class="form-error">{{ formErrors.signup.limit }}</div> |
157 | <small *ngIf="form.value['signup']['limit'] === -1" class="text-muted">Signup won't be limited to a fixed number of users.</small> | 167 | |
168 | <small i18n *ngIf="hasUnlimitedSignup()" class="text-muted">Signup won't be limited to a fixed number of users.</small> | ||
158 | </div> | 169 | </div> |
159 | </ng-container> | 170 | </ng-container> |
160 | </my-peertube-checkbox> | 171 | </my-peertube-checkbox> |
@@ -207,9 +218,7 @@ | |||
207 | 218 | ||
208 | <div class="form-group mt-4"> | 219 | <div class="form-group mt-4"> |
209 | <label i18n for="importConcurrency">Import jobs concurrency</label> | 220 | <label i18n for="importConcurrency">Import jobs concurrency</label> |
210 | <span class="text-muted ml-1"> | 221 | <span i18n class="text-muted ml-1">allows to import multiple videos in parallel. ⚠️ Requires a PeerTube restart.</span> |
211 | <span i18n>allows to import multiple videos in parallel. ⚠️ Requires a PeerTube restart.</span> | ||
212 | </span> | ||
213 | 222 | ||
214 | <div class="number-with-unit"> | 223 | <div class="number-with-unit"> |
215 | <input type="number" name="importConcurrency" formControlName="concurrency" /> | 224 | <input type="number" name="importConcurrency" formControlName="concurrency" /> |
@@ -307,24 +316,26 @@ | |||
307 | </ng-container> | 316 | </ng-container> |
308 | 317 | ||
309 | <ng-container ngProjectAs="extra"> | 318 | <ng-container ngProjectAs="extra"> |
310 | <div [ngClass]="{ 'disabled-checkbox-extra': !isSearchIndexEnabled() }"> | 319 | <div [ngClass]="getDisabledSearchIndexClass()"> |
311 | <label i18n for="searchIndexUrl">Search index URL</label> | 320 | <label i18n for="searchIndexUrl">Search index URL</label> |
321 | |||
312 | <input | 322 | <input |
313 | type="text" id="searchIndexUrl" class="form-control" | 323 | type="text" id="searchIndexUrl" class="form-control" |
314 | formControlName="url" [ngClass]="{ 'input-error': formErrors['search.searchIndex.url'] }" | 324 | formControlName="url" [ngClass]="{ 'input-error': formErrors['search.searchIndex.url'] }" |
315 | > | 325 | > |
326 | |||
316 | <div *ngIf="formErrors.search.searchIndex.url" class="form-error">{{ formErrors.search.searchIndex.url }}</div> | 327 | <div *ngIf="formErrors.search.searchIndex.url" class="form-error">{{ formErrors.search.searchIndex.url }}</div> |
317 | </div> | 328 | </div> |
318 | 329 | ||
319 | <div class="mt-3"> | 330 | <div class="mt-3"> |
320 | <my-peertube-checkbox [ngClass]="{ 'disabled-checkbox-extra': !isSearchIndexEnabled() }" | 331 | <my-peertube-checkbox [ngClass]="getDisabledSearchIndexClass()" |
321 | inputName="searchIndexDisableLocalSearch" formControlName="disableLocalSearch" | 332 | inputName="searchIndexDisableLocalSearch" formControlName="disableLocalSearch" |
322 | i18n-labelText labelText="Disable local search in search bar" | 333 | i18n-labelText labelText="Disable local search in search bar" |
323 | ></my-peertube-checkbox> | 334 | ></my-peertube-checkbox> |
324 | </div> | 335 | </div> |
325 | 336 | ||
326 | <div class="mt-3"> | 337 | <div class="mt-3"> |
327 | <my-peertube-checkbox [ngClass]="{ 'disabled-checkbox-extra': !isSearchIndexEnabled() }" | 338 | <my-peertube-checkbox [ngClass]="getDisabledSearchIndexClass()" |
328 | inputName="searchIndexIsDefaultSearch" formControlName="isDefaultSearch" | 339 | inputName="searchIndexIsDefaultSearch" formControlName="isDefaultSearch" |
329 | i18n-labelText labelText="Search bar uses the global search index by default" | 340 | i18n-labelText labelText="Search bar uses the global search index by default" |
330 | > | 341 | > |
@@ -433,10 +444,12 @@ | |||
433 | 444 | ||
434 | <div class="form-group" formGroupName="admin"> | 445 | <div class="form-group" formGroupName="admin"> |
435 | <label i18n for="adminEmail">Admin email</label> | 446 | <label i18n for="adminEmail">Admin email</label> |
447 | |||
436 | <input | 448 | <input |
437 | type="text" id="adminEmail" class="form-control" | 449 | type="text" id="adminEmail" class="form-control" |
438 | formControlName="email" [ngClass]="{ 'input-error': formErrors['admin.email'] }" | 450 | formControlName="email" [ngClass]="{ 'input-error': formErrors['admin.email'] }" |
439 | > | 451 | > |
452 | |||
440 | <div *ngIf="formErrors.admin.email" class="form-error">{{ formErrors.admin.email }}</div> | 453 | <div *ngIf="formErrors.admin.email" class="form-error">{{ formErrors.admin.email }}</div> |
441 | </div> | 454 | </div> |
442 | 455 | ||
@@ -471,6 +484,7 @@ | |||
471 | type="text" id="servicesTwitterUsername" class="form-control" | 484 | type="text" id="servicesTwitterUsername" class="form-control" |
472 | formControlName="username" [ngClass]="{ 'input-error': formErrors['services.twitter.username'] }" | 485 | formControlName="username" [ngClass]="{ 'input-error': formErrors['services.twitter.username'] }" |
473 | > | 486 | > |
487 | |||
474 | <div *ngIf="formErrors.services.twitter.username" class="form-error">{{ formErrors.services.twitter.username }}</div> | 488 | <div *ngIf="formErrors.services.twitter.username" class="form-error">{{ formErrors.services.twitter.username }}</div> |
475 | </div> | 489 | </div> |
476 | 490 | ||
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts index 9a19c2913..34d05f9f3 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts | |||
@@ -50,10 +50,22 @@ export class EditBasicConfigurationComponent implements OnInit { | |||
50 | return this.form.value['signup']['enabled'] === true | 50 | return this.form.value['signup']['enabled'] === true |
51 | } | 51 | } |
52 | 52 | ||
53 | getDisabledSignupClass () { | ||
54 | return { 'disabled-checkbox-extra': !this.isSignupEnabled() } | ||
55 | } | ||
56 | |||
57 | hasUnlimitedSignup () { | ||
58 | return this.form.value['signup']['limit'] === -1 | ||
59 | } | ||
60 | |||
53 | isSearchIndexEnabled () { | 61 | isSearchIndexEnabled () { |
54 | return this.form.value['search']['searchIndex']['enabled'] === true | 62 | return this.form.value['search']['searchIndex']['enabled'] === true |
55 | } | 63 | } |
56 | 64 | ||
65 | getDisabledSearchIndexClass () { | ||
66 | return { 'disabled-checkbox-extra': !this.isSearchIndexEnabled() } | ||
67 | } | ||
68 | |||
57 | isAutoFollowIndexEnabled () { | 69 | isAutoFollowIndexEnabled () { |
58 | return this.form.value['followings']['instance']['autoFollowIndex']['enabled'] === true | 70 | return this.form.value['followings']['instance']['autoFollowIndex']['enabled'] === true |
59 | } | 71 | } |
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.html b/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.html index 6f19ede0a..35b42e742 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.html | |||
@@ -11,28 +11,34 @@ | |||
11 | 11 | ||
12 | <div class="form-group"> | 12 | <div class="form-group"> |
13 | <label i18n for="instanceName">Name</label> | 13 | <label i18n for="instanceName">Name</label> |
14 | |||
14 | <input | 15 | <input |
15 | type="text" id="instanceName" class="form-control" | 16 | type="text" id="instanceName" class="form-control" |
16 | formControlName="name" [ngClass]="{ 'input-error': formErrors.instance.name }" | 17 | formControlName="name" [ngClass]="{ 'input-error': formErrors.instance.name }" |
17 | > | 18 | > |
19 | |||
18 | <div *ngIf="formErrors.instance.name" class="form-error">{{ formErrors.instance.name }}</div> | 20 | <div *ngIf="formErrors.instance.name" class="form-error">{{ formErrors.instance.name }}</div> |
19 | </div> | 21 | </div> |
20 | 22 | ||
21 | <div class="form-group"> | 23 | <div class="form-group"> |
22 | <label i18n for="instanceShortDescription">Short description</label> | 24 | <label i18n for="instanceShortDescription">Short description</label> |
25 | |||
23 | <textarea | 26 | <textarea |
24 | id="instanceShortDescription" formControlName="shortDescription" class="form-control small" | 27 | id="instanceShortDescription" formControlName="shortDescription" class="form-control small" |
25 | [ngClass]="{ 'input-error': formErrors['instance.shortDescription'] }" | 28 | [ngClass]="{ 'input-error': formErrors['instance.shortDescription'] }" |
26 | ></textarea> | 29 | ></textarea> |
30 | |||
27 | <div *ngIf="formErrors.instance.shortDescription" class="form-error">{{ formErrors.instance.shortDescription }}</div> | 31 | <div *ngIf="formErrors.instance.shortDescription" class="form-error">{{ formErrors.instance.shortDescription }}</div> |
28 | </div> | 32 | </div> |
29 | 33 | ||
30 | <div class="form-group"> | 34 | <div class="form-group"> |
31 | <label i18n for="instanceDescription">Description</label><my-help helpType="markdownText"></my-help> | 35 | <label i18n for="instanceDescription">Description</label><my-help helpType="markdownText"></my-help> |
36 | |||
32 | <my-markdown-textarea | 37 | <my-markdown-textarea |
33 | name="instanceDescription" formControlName="description" textareaMaxWidth="500px" | 38 | name="instanceDescription" formControlName="description" textareaMaxWidth="500px" |
34 | [classes]="{ 'input-error': formErrors['instance.description'] }" | 39 | [classes]="{ 'input-error': formErrors['instance.description'] }" |
35 | ></my-markdown-textarea> | 40 | ></my-markdown-textarea> |
41 | |||
36 | <div *ngIf="formErrors.instance.description" class="form-error">{{ formErrors.instance.description }}</div> | 42 | <div *ngIf="formErrors.instance.description" class="form-error">{{ formErrors.instance.description }}</div> |
37 | </div> | 43 | </div> |
38 | 44 | ||
@@ -111,24 +117,29 @@ | |||
111 | <option i18n value="display">Display</option> | 117 | <option i18n value="display">Display</option> |
112 | </select> | 118 | </select> |
113 | </div> | 119 | </div> |
120 | |||
114 | <div *ngIf="formErrors.instance.defaultNSFWPolicy" class="form-error">{{ formErrors.instance.defaultNSFWPolicy }}</div> | 121 | <div *ngIf="formErrors.instance.defaultNSFWPolicy" class="form-error">{{ formErrors.instance.defaultNSFWPolicy }}</div> |
115 | </div> | 122 | </div> |
116 | 123 | ||
117 | <div class="form-group"> | 124 | <div class="form-group"> |
118 | <label i18n for="instanceTerms">Terms</label><my-help helpType="markdownText"></my-help> | 125 | <label i18n for="instanceTerms">Terms</label><my-help helpType="markdownText"></my-help> |
126 | |||
119 | <my-markdown-textarea | 127 | <my-markdown-textarea |
120 | name="instanceTerms" formControlName="terms" textareaMaxWidth="500px" | 128 | name="instanceTerms" formControlName="terms" textareaMaxWidth="500px" |
121 | [ngClass]="{ 'input-error': formErrors['instance.terms'] }" | 129 | [ngClass]="{ 'input-error': formErrors['instance.terms'] }" |
122 | ></my-markdown-textarea> | 130 | ></my-markdown-textarea> |
131 | |||
123 | <div *ngIf="formErrors.instance.terms" class="form-error">{{ formErrors.instance.terms }}</div> | 132 | <div *ngIf="formErrors.instance.terms" class="form-error">{{ formErrors.instance.terms }}</div> |
124 | </div> | 133 | </div> |
125 | 134 | ||
126 | <div class="form-group"> | 135 | <div class="form-group"> |
127 | <label i18n for="instanceCodeOfConduct">Code of conduct</label><my-help helpType="markdownText"></my-help> | 136 | <label i18n for="instanceCodeOfConduct">Code of conduct</label><my-help helpType="markdownText"></my-help> |
137 | |||
128 | <my-markdown-textarea | 138 | <my-markdown-textarea |
129 | name="instanceCodeOfConduct" formControlName="codeOfConduct" textareaMaxWidth="500px" | 139 | name="instanceCodeOfConduct" formControlName="codeOfConduct" textareaMaxWidth="500px" |
130 | [ngClass]="{ 'input-error': formErrors['instance.codeOfConduct'] }" | 140 | [ngClass]="{ 'input-error': formErrors['instance.codeOfConduct'] }" |
131 | ></my-markdown-textarea> | 141 | ></my-markdown-textarea> |
142 | |||
132 | <div *ngIf="formErrors.instance.codeOfConduct" class="form-error">{{ formErrors.instance.codeOfConduct }}</div> | 143 | <div *ngIf="formErrors.instance.codeOfConduct" class="form-error">{{ formErrors.instance.codeOfConduct }}</div> |
133 | </div> | 144 | </div> |
134 | 145 | ||
@@ -140,6 +151,7 @@ | |||
140 | name="instanceModerationInformation" formControlName="moderationInformation" textareaMaxWidth="500px" | 151 | name="instanceModerationInformation" formControlName="moderationInformation" textareaMaxWidth="500px" |
141 | [ngClass]="{ 'input-error': formErrors['instance.moderationInformation'] }" | 152 | [ngClass]="{ 'input-error': formErrors['instance.moderationInformation'] }" |
142 | ></my-markdown-textarea> | 153 | ></my-markdown-textarea> |
154 | |||
143 | <div *ngIf="formErrors.instance.moderationInformation" class="form-error">{{ formErrors.instance.moderationInformation }}</div> | 155 | <div *ngIf="formErrors.instance.moderationInformation" class="form-error">{{ formErrors.instance.moderationInformation }}</div> |
144 | </div> | 156 | </div> |
145 | 157 | ||
@@ -173,6 +185,7 @@ | |||
173 | name="instanceCreationReason" formControlName="creationReason" textareaMaxWidth="500px" | 185 | name="instanceCreationReason" formControlName="creationReason" textareaMaxWidth="500px" |
174 | [ngClass]="{ 'input-error': formErrors['instance.creationReason'] }" | 186 | [ngClass]="{ 'input-error': formErrors['instance.creationReason'] }" |
175 | ></my-markdown-textarea> | 187 | ></my-markdown-textarea> |
188 | |||
176 | <div *ngIf="formErrors.instance.creationReason" class="form-error">{{ formErrors.instance.creationReason }}</div> | 189 | <div *ngIf="formErrors.instance.creationReason" class="form-error">{{ formErrors.instance.creationReason }}</div> |
177 | </div> | 190 | </div> |
178 | 191 | ||
@@ -184,6 +197,7 @@ | |||
184 | name="instanceMaintenanceLifetime" formControlName="maintenanceLifetime" textareaMaxWidth="500px" | 197 | name="instanceMaintenanceLifetime" formControlName="maintenanceLifetime" textareaMaxWidth="500px" |
185 | [ngClass]="{ 'input-error': formErrors['instance.maintenanceLifetime'] }" | 198 | [ngClass]="{ 'input-error': formErrors['instance.maintenanceLifetime'] }" |
186 | ></my-markdown-textarea> | 199 | ></my-markdown-textarea> |
200 | |||
187 | <div *ngIf="formErrors.instance.maintenanceLifetime" class="form-error">{{ formErrors.instance.maintenanceLifetime }}</div> | 201 | <div *ngIf="formErrors.instance.maintenanceLifetime" class="form-error">{{ formErrors.instance.maintenanceLifetime }}</div> |
188 | </div> | 202 | </div> |
189 | 203 | ||
@@ -195,6 +209,7 @@ | |||
195 | name="instanceBusinessModel" formControlName="businessModel" textareaMaxWidth="500px" | 209 | name="instanceBusinessModel" formControlName="businessModel" textareaMaxWidth="500px" |
196 | [ngClass]="{ 'input-error': formErrors['instance.businessModel'] }" | 210 | [ngClass]="{ 'input-error': formErrors['instance.businessModel'] }" |
197 | ></my-markdown-textarea> | 211 | ></my-markdown-textarea> |
212 | |||
198 | <div *ngIf="formErrors.instance.businessModel" class="form-error">{{ formErrors.instance.businessModel }}</div> | 213 | <div *ngIf="formErrors.instance.businessModel" class="form-error">{{ formErrors.instance.businessModel }}</div> |
199 | </div> | 214 | </div> |
200 | 215 | ||
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html index 4b1a55245..65fc31412 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | <ng-container ngProjectAs="extra"> | 26 | <ng-container ngProjectAs="extra"> |
27 | 27 | ||
28 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }"> | 28 | <div class="form-group" [ngClass]="getDisabledLiveClass()"> |
29 | <my-peertube-checkbox | 29 | <my-peertube-checkbox |
30 | inputName="liveAllowReplay" formControlName="allowReplay" | 30 | inputName="liveAllowReplay" formControlName="allowReplay" |
31 | i18n-labelText labelText="Allow your users to automatically publish a replay of their live" | 31 | i18n-labelText labelText="Allow your users to automatically publish a replay of their live" |
@@ -36,23 +36,29 @@ | |||
36 | </my-peertube-checkbox> | 36 | </my-peertube-checkbox> |
37 | </div> | 37 | </div> |
38 | 38 | ||
39 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }"> | 39 | <div class="form-group" [ngClass]="getDisabledLiveClass()"> |
40 | <label i18n for="liveMaxInstanceLives">Max simultaneous lives created on your instance <span class="text-muted">(-1 for "unlimited")</span></label> | 40 | <label i18n for="liveMaxInstanceLives"> |
41 | Max simultaneous lives created on your instance <span class="text-muted">(-1 for "unlimited")</span> | ||
42 | </label> | ||
43 | |||
41 | <div class="number-with-unit"> | 44 | <div class="number-with-unit"> |
42 | <input type="number" name="liveMaxInstanceLives" formControlName="maxInstanceLives" /> | 45 | <input type="number" name="liveMaxInstanceLives" formControlName="maxInstanceLives" /> |
43 | <span i18n>{form.value['live']['maxInstanceLives'], plural, =1 {live} other {lives}}</span> | 46 | <span i18n>{form.value['live']['maxInstanceLives'], plural, =1 {live} other {lives}}</span> |
44 | </div> | 47 | </div> |
45 | </div> | 48 | </div> |
46 | 49 | ||
47 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }"> | 50 | <div class="form-group" [ngClass]="getDisabledLiveClass()"> |
48 | <label i18n for="liveMaxUserLives">Max simultaneous lives created per user <span class="text-muted">(-1 for "unlimited")</span></label> | 51 | <label i18n for="liveMaxUserLives"> |
52 | Max simultaneous lives created per user <span class="text-muted">(-1 for "unlimited")</span> | ||
53 | </label> | ||
54 | |||
49 | <div class="number-with-unit"> | 55 | <div class="number-with-unit"> |
50 | <input type="number" name="liveMaxUserLives" formControlName="maxUserLives" /> | 56 | <input type="number" name="liveMaxUserLives" formControlName="maxUserLives" /> |
51 | <span i18n>{form.value['live']['maxUserLives'], plural, =1 {live} other {lives}}</span> | 57 | <span i18n>{form.value['live']['maxUserLives'], plural, =1 {live} other {lives}}</span> |
52 | </div> | 58 | </div> |
53 | </div> | 59 | </div> |
54 | 60 | ||
55 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }"> | 61 | <div class="form-group" [ngClass]="getDisabledLiveClass()"> |
56 | <label i18n for="liveMaxDuration">Max live duration</label> | 62 | <label i18n for="liveMaxDuration">Max live duration</label> |
57 | 63 | ||
58 | <my-select-options | 64 | <my-select-options |
@@ -81,7 +87,7 @@ | |||
81 | <ng-container formGroupName="live"> | 87 | <ng-container formGroupName="live"> |
82 | <ng-container formGroupName="transcoding"> | 88 | <ng-container formGroupName="transcoding"> |
83 | 89 | ||
84 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }"> | 90 | <div class="form-group" [ngClass]="getDisabledLiveClass()"> |
85 | <my-peertube-checkbox | 91 | <my-peertube-checkbox |
86 | inputName="liveTranscodingEnabled" formControlName="enabled" | 92 | inputName="liveTranscodingEnabled" formControlName="enabled" |
87 | > | 93 | > |
@@ -91,11 +97,12 @@ | |||
91 | </my-peertube-checkbox> | 97 | </my-peertube-checkbox> |
92 | </div> | 98 | </div> |
93 | 99 | ||
94 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }"> | 100 | <div class="form-group" [ngClass]="getDisabledLiveTranscodingClass()"> |
95 | <label i18n for="liveTranscodingThreads">Live resolutions to generate</label> | 101 | <label i18n for="liveTranscodingThreads">Live resolutions to generate</label> |
96 | 102 | ||
97 | <div class="ml-2 mt-2 d-flex flex-column"> | 103 | <div class="ml-2 mt-2 d-flex flex-column"> |
98 | <ng-container formGroupName="resolutions"> | 104 | <ng-container formGroupName="resolutions"> |
105 | |||
99 | <div class="form-group" *ngFor="let resolution of liveResolutions"> | 106 | <div class="form-group" *ngFor="let resolution of liveResolutions"> |
100 | <my-peertube-checkbox | 107 | <my-peertube-checkbox |
101 | [inputName]="getResolutionKey(resolution.id)" [formControlName]="resolution.id" | 108 | [inputName]="getResolutionKey(resolution.id)" [formControlName]="resolution.id" |
@@ -106,15 +113,22 @@ | |||
106 | </ng-template> | 113 | </ng-template> |
107 | </my-peertube-checkbox> | 114 | </my-peertube-checkbox> |
108 | </div> | 115 | </div> |
116 | |||
109 | </ng-container> | 117 | </ng-container> |
110 | </div> | 118 | </div> |
111 | </div> | 119 | </div> |
112 | 120 | ||
113 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }"> | 121 | <div class="form-group" [ngClass]="getDisabledLiveTranscodingClass()"> |
114 | <label i18n for="liveTranscodingThreads">Live transcoding threads</label> | 122 | <label i18n for="liveTranscodingThreads">Live transcoding threads</label> |
123 | |||
115 | <span class="text-muted ml-1"> | 124 | <span class="text-muted ml-1"> |
116 | <ng-container *ngIf="getTotalTranscodingThreads().atMost" i18n>will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding</ng-container> | 125 | <ng-container *ngIf="getTotalTranscodingThreads().atMost" i18n> |
117 | <ng-container *ngIf="!getTotalTranscodingThreads().atMost" i18n>will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding</ng-container> | 126 | will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding |
127 | </ng-container> | ||
128 | |||
129 | <ng-container *ngIf="!getTotalTranscodingThreads().atMost" i18n> | ||
130 | will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding | ||
131 | </ng-container> | ||
118 | </span> | 132 | </span> |
119 | 133 | ||
120 | <my-select-custom-value | 134 | <my-select-custom-value |
@@ -126,7 +140,7 @@ | |||
126 | <div *ngIf="formErrors.live.transcoding.threads" class="form-error">{{ formErrors.live.transcoding.threads }}</div> | 140 | <div *ngIf="formErrors.live.transcoding.threads" class="form-error">{{ formErrors.live.transcoding.threads }}</div> |
127 | </div> | 141 | </div> |
128 | 142 | ||
129 | <div class="form-group mt-4" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }"> | 143 | <div class="form-group mt-4" [ngClass]="getDisabledLiveTranscodingClass()"> |
130 | <label i18n for="liveTranscodingProfile">Live transcoding profile</label> | 144 | <label i18n for="liveTranscodingProfile">Live transcoding profile</label> |
131 | <span class="text-muted ml-1" i18n>new live transcoding profiles can be added by PeerTube plugins</span> | 145 | <span class="text-muted ml-1" i18n>new live transcoding profiles can be added by PeerTube plugins</span> |
132 | 146 | ||
@@ -136,14 +150,8 @@ | |||
136 | [items]="getAvailableTranscodingProfile()" | 150 | [items]="getAvailableTranscodingProfile()" |
137 | [clearable]="false" | 151 | [clearable]="false" |
138 | > | 152 | > |
139 | <ng-template ng-option-tmp let-item="item" let-index="index"> | ||
140 | {{ item }} | ||
141 | <ng-container *ngIf="item === 'default'"> | ||
142 | <br> | ||
143 | <span class="text-muted" i18n>x264, targeting maximum device compatibility</span> | ||
144 | </ng-container> | ||
145 | </ng-template> | ||
146 | </my-select-options> | 153 | </my-select-options> |
154 | |||
147 | <div *ngIf="formErrors.live.transcoding.profile" class="form-error">{{ formErrors.live.transcoding.profile }}</div> | 155 | <div *ngIf="formErrors.live.transcoding.profile" class="form-error">{{ formErrors.live.transcoding.profile }}</div> |
148 | </div> | 156 | </div> |
149 | 157 | ||
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts index a82a40a84..3328d28a9 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts | |||
@@ -42,7 +42,13 @@ export class EditLiveConfigurationComponent implements OnInit { | |||
42 | getAvailableTranscodingProfile () { | 42 | getAvailableTranscodingProfile () { |
43 | const profiles = this.serverConfig.live.transcoding.availableProfiles | 43 | const profiles = this.serverConfig.live.transcoding.availableProfiles |
44 | 44 | ||
45 | return profiles.map(p => ({ id: p, label: p })) | 45 | return profiles.map(p => { |
46 | const description = p === 'default' | ||
47 | ? $localize`x264, targeting maximum device compatibility` | ||
48 | : '' | ||
49 | |||
50 | return { id: p, label: p, description } | ||
51 | }) | ||
46 | } | 52 | } |
47 | 53 | ||
48 | getResolutionKey (resolution: string) { | 54 | getResolutionKey (resolution: string) { |
@@ -57,6 +63,14 @@ export class EditLiveConfigurationComponent implements OnInit { | |||
57 | return this.editConfigurationService.isLiveEnabled(this.form) | 63 | return this.editConfigurationService.isLiveEnabled(this.form) |
58 | } | 64 | } |
59 | 65 | ||
66 | getDisabledLiveClass () { | ||
67 | return { 'disabled-checkbox-extra': !this.isLiveEnabled() } | ||
68 | } | ||
69 | |||
70 | getDisabledLiveTranscodingClass () { | ||
71 | return { 'disabled-checkbox-extra': !this.isLiveEnabled() || !this.isLiveTranscodingEnabled() } | ||
72 | } | ||
73 | |||
60 | isLiveTranscodingEnabled () { | 74 | isLiveTranscodingEnabled () { |
61 | return this.editConfigurationService.isLiveTranscodingEnabled(this.form) | 75 | return this.editConfigurationService.isLiveTranscodingEnabled(this.form) |
62 | } | 76 | } |
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html index a51909865..5669b81ce 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html | |||
@@ -13,7 +13,9 @@ | |||
13 | </span> | 13 | </span> |
14 | 14 | ||
15 | <div class="callout-container"> | 15 | <div class="callout-container"> |
16 | <a class="callout-link" target="_blank" rel="noopener noreferrer" href="https://docs.joinpeertube.org/#/admin-configuration?id=transcoding" i18n>Read guidelines</a> | 16 | <a class="callout-link" target="_blank" rel="noopener noreferrer" href="https://docs.joinpeertube.org/#/admin-configuration?id=transcoding" i18n> |
17 | Read guidelines | ||
18 | </a> | ||
17 | </div> | 19 | </div> |
18 | </div> | 20 | </div> |
19 | </div> | 21 | </div> |
@@ -43,7 +45,7 @@ | |||
43 | <div class="callout callout-light pt-2 pb-0"> | 45 | <div class="callout callout-light pt-2 pb-0"> |
44 | <label i18n>Input formats</label> | 46 | <label i18n>Input formats</label> |
45 | 47 | ||
46 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 48 | <div class="form-group" [ngClass]="getTranscodingDisabledClass()"> |
47 | <my-peertube-checkbox | 49 | <my-peertube-checkbox |
48 | inputName="transcodingAllowAdditionalExtensions" formControlName="allowAdditionalExtensions" | 50 | inputName="transcodingAllowAdditionalExtensions" formControlName="allowAdditionalExtensions" |
49 | i18n-labelText labelText="Allow additional extensions" | 51 | i18n-labelText labelText="Allow additional extensions" |
@@ -54,7 +56,7 @@ | |||
54 | </my-peertube-checkbox> | 56 | </my-peertube-checkbox> |
55 | </div> | 57 | </div> |
56 | 58 | ||
57 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 59 | <div class="form-group" [ngClass]="getTranscodingDisabledClass()"> |
58 | <my-peertube-checkbox | 60 | <my-peertube-checkbox |
59 | inputName="transcodingAllowAudioFiles" formControlName="allowAudioFiles" | 61 | inputName="transcodingAllowAudioFiles" formControlName="allowAudioFiles" |
60 | i18n-labelText labelText="Allow audio files upload" | 62 | i18n-labelText labelText="Allow audio files upload" |
@@ -71,18 +73,14 @@ | |||
71 | <label i18n>Output formats</label> | 73 | <label i18n>Output formats</label> |
72 | 74 | ||
73 | <ng-container formGroupName="webtorrent"> | 75 | <ng-container formGroupName="webtorrent"> |
74 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 76 | <div class="form-group" [ngClass]="getTranscodingDisabledClass()"> |
75 | <my-peertube-checkbox | 77 | <my-peertube-checkbox |
76 | inputName="transcodingWebTorrentEnabled" formControlName="enabled" | 78 | inputName="transcodingWebTorrentEnabled" formControlName="enabled" |
77 | i18n-labelText labelText="WebTorrent enabled" | 79 | i18n-labelText labelText="WebTorrent enabled" |
78 | > | 80 | > |
79 | <ng-template ptTemplate="help"> | 81 | <ng-template ptTemplate="help"> |
80 | <ng-container i18n> | 82 | <ng-container> |
81 | <p>If you also enabled HLS support, it will multiply videos storage by 2</p> | 83 | <p i18n>If you also enabled HLS support, it will multiply videos storage by 2</p> |
82 | |||
83 | <br /> | ||
84 | |||
85 | <strong>If disabled, breaks federation with PeerTube instances < 2.1</strong> | ||
86 | </ng-container> | 84 | </ng-container> |
87 | </ng-template> | 85 | </ng-template> |
88 | </my-peertube-checkbox> | 86 | </my-peertube-checkbox> |
@@ -90,7 +88,7 @@ | |||
90 | </ng-container> | 88 | </ng-container> |
91 | 89 | ||
92 | <ng-container formGroupName="hls"> | 90 | <ng-container formGroupName="hls"> |
93 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 91 | <div class="form-group" [ngClass]="getTranscodingDisabledClass()"> |
94 | <my-peertube-checkbox | 92 | <my-peertube-checkbox |
95 | inputName="transcodingHlsEnabled" formControlName="enabled" | 93 | inputName="transcodingHlsEnabled" formControlName="enabled" |
96 | i18n-labelText labelText="HLS with P2P support enabled" | 94 | i18n-labelText labelText="HLS with P2P support enabled" |
@@ -114,7 +112,7 @@ | |||
114 | </div> | 112 | </div> |
115 | </ng-container> | 113 | </ng-container> |
116 | 114 | ||
117 | <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 115 | <div class="form-group" [ngClass]="getTranscodingDisabledClass()"> |
118 | <label i18n>Resolutions to generate per enabled format</label> | 116 | <label i18n>Resolutions to generate per enabled format</label> |
119 | 117 | ||
120 | <div class="ml-2 mt-2 d-flex flex-column"> | 118 | <div class="ml-2 mt-2 d-flex flex-column"> |
@@ -142,11 +140,16 @@ | |||
142 | </my-peertube-checkbox> | 140 | </my-peertube-checkbox> |
143 | </div> | 141 | </div> |
144 | 142 | ||
145 | <div class="form-group mt-4" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 143 | <div class="form-group mt-4" [ngClass]="getTranscodingDisabledClass()"> |
146 | <label i18n for="transcodingThreads">Transcoding threads</label> | 144 | <label i18n for="transcodingThreads">Transcoding threads</label> |
147 | <span class="text-muted ml-1"> | 145 | <span class="text-muted ml-1"> |
148 | <ng-container *ngIf="getTotalTranscodingThreads().atMost" i18n>will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding</ng-container> | 146 | <ng-container *ngIf="getTotalTranscodingThreads().atMost" i18n> |
149 | <ng-container *ngIf="!getTotalTranscodingThreads().atMost" i18n>will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding</ng-container> | 147 | will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding |
148 | </ng-container> | ||
149 | |||
150 | <ng-container *ngIf="!getTotalTranscodingThreads().atMost" i18n> | ||
151 | will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding | ||
152 | </ng-container> | ||
150 | </span> | 153 | </span> |
151 | 154 | ||
152 | <my-select-custom-value | 155 | <my-select-custom-value |
@@ -159,11 +162,9 @@ | |||
159 | <div *ngIf="formErrors.transcoding.threads" class="form-error">{{ formErrors.transcoding.threads }}</div> | 162 | <div *ngIf="formErrors.transcoding.threads" class="form-error">{{ formErrors.transcoding.threads }}</div> |
160 | </div> | 163 | </div> |
161 | 164 | ||
162 | <div class="form-group mt-4" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 165 | <div class="form-group mt-4" [ngClass]="getTranscodingDisabledClass()"> |
163 | <label i18n for="transcodingConcurrency">Transcoding jobs concurrency</label> | 166 | <label i18n for="transcodingConcurrency">Transcoding jobs concurrency</label> |
164 | <span class="text-muted ml-1"> | 167 | <span class="text-muted ml-1" i18n>allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart</span> |
165 | <span i18n>allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart.</span> | ||
166 | </span> | ||
167 | 168 | ||
168 | <div class="number-with-unit"> | 169 | <div class="number-with-unit"> |
169 | <input type="number" name="transcodingConcurrency" formControlName="concurrency" /> | 170 | <input type="number" name="transcodingConcurrency" formControlName="concurrency" /> |
@@ -173,7 +174,7 @@ | |||
173 | <div *ngIf="formErrors.transcoding.concurrency" class="form-error">{{ formErrors.transcoding.concurrency }}</div> | 174 | <div *ngIf="formErrors.transcoding.concurrency" class="form-error">{{ formErrors.transcoding.concurrency }}</div> |
174 | </div> | 175 | </div> |
175 | 176 | ||
176 | <div class="form-group mt-4" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> | 177 | <div class="form-group mt-4" [ngClass]="getTranscodingDisabledClass()"> |
177 | <label i18n for="transcodingProfile">Transcoding profile</label> | 178 | <label i18n for="transcodingProfile">Transcoding profile</label> |
178 | <span class="text-muted ml-1" i18n>new transcoding profiles can be added by PeerTube plugins</span> | 179 | <span class="text-muted ml-1" i18n>new transcoding profiles can be added by PeerTube plugins</span> |
179 | 180 | ||
@@ -182,15 +183,8 @@ | |||
182 | formControlName="profile" | 183 | formControlName="profile" |
183 | [items]="getAvailableTranscodingProfile()" | 184 | [items]="getAvailableTranscodingProfile()" |
184 | [clearable]="false" | 185 | [clearable]="false" |
185 | > | 186 | ></my-select-options> |
186 | <ng-template ng-option-tmp let-item="item" let-index="index"> | 187 | |
187 | {{ item }} | ||
188 | <ng-container *ngIf="item === 'default'"> | ||
189 | <br> | ||
190 | <span class="text-muted" i18n>x264, targeting maximum device compatibility</span> | ||
191 | </ng-container> | ||
192 | </ng-template> | ||
193 | </my-select-options> | ||
194 | <div *ngIf="formErrors.transcoding.profile" class="form-error">{{ formErrors.transcoding.profile }}</div> | 188 | <div *ngIf="formErrors.transcoding.profile" class="form-error">{{ formErrors.transcoding.profile }}</div> |
195 | </div> | 189 | </div> |
196 | 190 | ||
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts index d745912a0..b864f1bc4 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts | |||
@@ -34,7 +34,13 @@ export class EditVODTranscodingComponent implements OnInit { | |||
34 | getAvailableTranscodingProfile () { | 34 | getAvailableTranscodingProfile () { |
35 | const profiles = this.serverConfig.transcoding.availableProfiles | 35 | const profiles = this.serverConfig.transcoding.availableProfiles |
36 | 36 | ||
37 | return profiles.map(p => ({ id: p, label: p })) | 37 | return profiles.map(p => { |
38 | const description = p === 'default' | ||
39 | ? $localize`x264, targeting maximum device compatibility` | ||
40 | : '' | ||
41 | |||
42 | return { id: p, label: p, description } | ||
43 | }) | ||
38 | } | 44 | } |
39 | 45 | ||
40 | getResolutionKey (resolution: string) { | 46 | getResolutionKey (resolution: string) { |
@@ -45,6 +51,10 @@ export class EditVODTranscodingComponent implements OnInit { | |||
45 | return this.editConfigurationService.isTranscodingEnabled(this.form) | 51 | return this.editConfigurationService.isTranscodingEnabled(this.form) |
46 | } | 52 | } |
47 | 53 | ||
54 | getTranscodingDisabledClass () { | ||
55 | return { 'disabled-checkbox-extra': !this.isTranscodingEnabled() } | ||
56 | } | ||
57 | |||
48 | getTotalTranscodingThreads () { | 58 | getTotalTranscodingThreads () { |
49 | return this.editConfigurationService.getTotalTranscodingThreads(this.form) | 59 | return this.editConfigurationService.getTotalTranscodingThreads(this.form) |
50 | } | 60 | } |