Compare commits
No commits in common. "develop" and "master" have entirely different histories.
15 changed files with 71 additions and 131 deletions
12
.github/ISSUE_TEMPLATE.md
vendored
12
.github/ISSUE_TEMPLATE.md
vendored
|
@ -1,6 +1,6 @@
|
||||||
<!-- If you have a question, please read FAQ.md first -->
|
<!-- If you have a question, please read the FAQ.md first -->
|
||||||
<!-- If you report a security issue, please refrain from filling an issue, refer to SECURITY.md and follow the disclosure procedure it describes. -->
|
<!-- If you report a security issue, please refrain from filling an issue and refer to SECURITY.md for the disclosure procedure. -->
|
||||||
<!-- If you report a bug, please fill the following form -->
|
<!-- If you report a bug, please fill the form -->
|
||||||
|
|
||||||
**What happened?**
|
**What happened?**
|
||||||
|
|
||||||
|
@ -16,9 +16,9 @@
|
||||||
|
|
||||||
|
|
||||||
**Additional information**
|
**Additional information**
|
||||||
* PeerTube version and URL:
|
* PeerTube version or URL:
|
||||||
* Browser name and version:
|
* Browser name/version:
|
||||||
* NodeJS version:
|
* NodeJS version:
|
||||||
|
|
||||||
* Link to browser console log if useful:
|
* Link to browser console log if useful:
|
||||||
* Link to server log if useful (`journalctl` or `/var/www/peertube/storage/logs/`):
|
* Link to server log if useful (journalctl or /var/www/peertube/storage/logs/):
|
||||||
|
|
|
@ -196,7 +196,7 @@ Learn how to import/upload videos from CLI or admin your PeerTube instance with
|
||||||
See the [architecture blueprint](https://docs.joinpeertube.org/#/contribute-architecture) for a more detailed explanation of the architectural choices.
|
See the [architecture blueprint](https://docs.joinpeertube.org/#/contribute-architecture) for a more detailed explanation of the architectural choices.
|
||||||
|
|
||||||
See our REST API documentation:
|
See our REST API documentation:
|
||||||
* OpenAPI 3.0.0 schema: [/support/doc/api/openapi.yaml](https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/api/openapi.yaml)
|
* OpenAPI 3.0.0 schema: [/support/doc/api/openapi.yaml](https://github.com/Chocobozzz/PeerTube/blob/support/doc/api/openapi.yaml)
|
||||||
* Spec explorer: [docs.joinpeertube.org/api-rest-reference.html](https://docs.joinpeertube.org/api-rest-reference.html)
|
* Spec explorer: [docs.joinpeertube.org/api-rest-reference.html](https://docs.joinpeertube.org/api-rest-reference.html)
|
||||||
|
|
||||||
See our [ActivityPub documentation](https://docs.joinpeertube.org/#/api-activitypub).
|
See our [ActivityPub documentation](https://docs.joinpeertube.org/#/api-activitypub).
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<ng-template pTemplate="header">
|
<ng-template pTemplate="header">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 150px;">Action</th> <!-- column for action buttons -->
|
<th style="width: 150px;">Action</th> <!-- column for action buttons -->
|
||||||
<th style="width: calc(100% - 300px);" i18n>Account</th>
|
<th style="width: 100%;" i18n>Account</th>
|
||||||
<th style="width: 150px;" i18n pSortableColumn="createdAt">Muted at <p-sortIcon field="createdAt"></p-sortIcon></th>
|
<th style="width: 150px;" i18n pSortableColumn="createdAt">Muted at <p-sortIcon field="createdAt"></p-sortIcon></th>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
|
@ -10,48 +10,45 @@
|
||||||
|
|
||||||
<div class="select-filter-block">
|
<div class="select-filter-block">
|
||||||
<label for="jobState" i18n>Job state</label>
|
<label for="jobState" i18n>Job state</label>
|
||||||
<ng-select
|
<div class="peertube-select-container">
|
||||||
class="select-job-state"
|
<select id="jobState" name="jobState" [(ngModel)]="jobState" (ngModelChange)="onJobStateOrTypeChanged()" class="form-control">
|
||||||
[(ngModel)]="jobState"
|
<option *ngFor="let state of jobStates" [value]="state">{{ state }}</option>
|
||||||
(ngModelChange)="onJobStateOrTypeChanged()"
|
</select>
|
||||||
[clearable]="false"
|
</div>
|
||||||
[searchable]="false"
|
|
||||||
>
|
|
||||||
<ng-option *ngFor="let state of jobStates" [value]="state">
|
|
||||||
<span class="badge" [ngClass]="getJobStateClass(state)">{{ state }}</span>
|
|
||||||
</ng-option>
|
|
||||||
</ng-select>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p-table
|
<p-table
|
||||||
[value]="jobs" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions"
|
[value]="jobs" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" dataKey="uniqId"
|
||||||
[sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="uniqId" [first]="pagination.start"
|
[sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" [first]="pagination.start"
|
||||||
[tableStyle]="{'table-layout':'auto'}" (onPage)="onPage($event)"
|
[tableStyle]="{'table-layout':'auto'}" (onPage)="onPage($event)" [expandedRowKeys]="expandedRows"
|
||||||
[showCurrentPageReport]="true" i18n-currentPageReportTemplate
|
|
||||||
currentPageReportTemplate="Showing {{'{first}'}} to {{'{last}'}} of {{'{totalRecords}'}} jobs"
|
|
||||||
(onPage)="onPage($event)" [expandedRowKeys]="expandedRows"
|
|
||||||
>
|
>
|
||||||
<ng-template pTemplate="header">
|
<ng-template pTemplate="header">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 40px"></th>
|
<th style="width: 40px"></th>
|
||||||
<th style="width: calc(100% - 390px)" class="job-id" i18n>ID</th>
|
<th style="width: 100%" class="job-id" i18n>ID</th>
|
||||||
<th style="width: 200px" class="job-type" i18n>Type</th>
|
<th style="width: 200px" class="job-type" i18n>Type</th>
|
||||||
<th style="width: 150px" class="job-date" i18n pSortableColumn="createdAt">Created <p-sortIcon field="createdAt"></p-sortIcon></th>
|
<th style="width: 150px" class="job-date" i18n pSortableColumn="createdAt">Created <p-sortIcon field="createdAt"></p-sortIcon></th>
|
||||||
|
<th style="width: 150px" class="job-state" i18n>State</th>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template pTemplate="body" let-expanded="expanded" let-job>
|
<ng-template pTemplate="body" let-expanded="expanded" let-job>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="expand-cell" [pRowToggler]="job" i18n-ngbTooltip ngbTooltip="More information" placement="top-left" container="body">
|
<td class="expand-cell">
|
||||||
<span class="expander">
|
<span class="expander" [pRowToggler]="job" i18n-ngbTooltip ngbTooltip="More information" placement="top-left" container="body">
|
||||||
<i [ngClass]="expanded ? 'glyphicon glyphicon-menu-down' : 'glyphicon glyphicon-menu-right'"></i>
|
<i [ngClass]="expanded ? 'glyphicon glyphicon-menu-down' : 'glyphicon glyphicon-menu-right'"></i>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td class="job-id" [pRowToggler]="job" [title]="job.id">{{ job.id }}</td>
|
<td class="job-id" [title]="job.id">{{ job.id }}</td>
|
||||||
<td class="job-type" [pRowToggler]="job">{{ job.type }}</td>
|
<td class="job-type">{{ job.type }}</td>
|
||||||
<td class="job-date" [pRowToggler]="job">{{ job.createdAt | date: 'short' }}</td>
|
<td class="job-date">{{ job.createdAt | date: 'short' }}</td>
|
||||||
|
<td class="job-state" *ngIf="job.state === 'delayed'" class="text-muted"><span class="glyphicon glyphicon-repeat"></span> <span i18n>Delayed</span></td>
|
||||||
|
<td class="job-state" *ngIf="job.state === 'waiting'" class="text-warning"><span class="glyphicon glyphicon-hourglass"></span> <span i18n>Will start soon...</span></td>
|
||||||
|
<td class="job-state" *ngIf="job.state === 'active'" class="text-warning"><span class="glyphicon glyphicon-cog"></span> <span i18n>Running...</span></td>
|
||||||
|
<td class="job-state" *ngIf="job.state === 'completed'" class="text-success"><span class="glyphicon glyphicon-ok"></span> <span i18n>Finished</span></td>
|
||||||
|
<td class="job-state" *ngIf="job.state === 'failed'" class="text-danger"><span class="glyphicon glyphicon-remove"></span> <span i18n>Failed</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
|
@ -77,18 +74,5 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template pTemplate="emptymessage">
|
|
||||||
<tr>
|
|
||||||
<td colspan="4">
|
|
||||||
<div class="no-results">
|
|
||||||
<div class="d-block">
|
|
||||||
<ng-container *ngIf="jobType === 'all'" i18n>No <span class="badge" [ngClass]="getJobStateClass(jobState)">{{ jobState }}</span> jobs found.</ng-container>
|
|
||||||
<ng-container *ngIf="jobType !== 'all'" i18n>No <code>{{ jobType }}</code> jobs found that are <span class="badge" [ngClass]="getJobStateClass(jobState)">{{ jobState }}</span>.</ng-container>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</ng-template>
|
|
||||||
</p-table>
|
</p-table>
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
@import '_variables';
|
@import '_variables';
|
||||||
@import '_mixins';
|
@import '_mixins';
|
||||||
|
|
||||||
.select-job-state {
|
|
||||||
min-width: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.job-id {
|
.job-id {
|
||||||
max-width: 30vw !important;
|
max-width: 30vw !important;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +13,10 @@
|
||||||
width: 170px !important;
|
width: 170px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.job-state {
|
||||||
|
max-width: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
.admin-sub-header {
|
.admin-sub-header {
|
||||||
flex-direction: row !important;
|
flex-direction: row !important;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
@ -47,7 +47,3 @@ pre {
|
||||||
.job-error {
|
.job-error {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.badge {
|
|
||||||
@include table-badge;
|
|
||||||
}
|
|
||||||
|
|
|
@ -56,21 +56,6 @@ export class JobsComponent extends RestTable implements OnInit {
|
||||||
return 'JobsComponent'
|
return 'JobsComponent'
|
||||||
}
|
}
|
||||||
|
|
||||||
getJobStateClass (state: JobStateClient) {
|
|
||||||
switch (state) {
|
|
||||||
case 'active':
|
|
||||||
return 'badge-blue'
|
|
||||||
case 'completed':
|
|
||||||
return 'badge-green'
|
|
||||||
case 'delayed':
|
|
||||||
return 'badge-brown'
|
|
||||||
case 'failed':
|
|
||||||
return 'badge-red'
|
|
||||||
case 'waiting':
|
|
||||||
return 'badge-yellow'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onJobStateOrTypeChanged () {
|
onJobStateOrTypeChanged () {
|
||||||
this.pagination.start = 0
|
this.pagination.start = 0
|
||||||
|
|
||||||
|
|
|
@ -5,30 +5,17 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ng-select
|
<div class="peertube-select-container">
|
||||||
[(ngModel)]="startDate"
|
<select [(ngModel)]="startDate" (ngModelChange)="refresh()" class="form-control">
|
||||||
(ngModelChange)="refresh()"
|
<option *ngFor="let timeChoice of timeChoices" [value]="timeChoice.id">{{ timeChoice.label }}</option>
|
||||||
[clearable]="false"
|
</select>
|
||||||
[searchable]="false"
|
</div>
|
||||||
>
|
|
||||||
<ng-option *ngFor="let time of timeChoices" [value]="time.id">
|
|
||||||
{{ time.label }} ({{ time.id | date: time.dateFormat }} - <span i18n>now</span>)
|
|
||||||
</ng-option>
|
|
||||||
</ng-select>
|
|
||||||
|
|
||||||
<ng-select
|
<div class="peertube-select-container" *ngIf="!isAuditLog()">
|
||||||
[(ngModel)]="level"
|
<select [(ngModel)]="level" (ngModelChange)="refresh()" class="form-control">
|
||||||
(ngModelChange)="refresh()"
|
<option *ngFor="let levelChoice of levelChoices" [value]="levelChoice.id">{{ levelChoice.label }}</option>
|
||||||
[clearable]="false"
|
</select>
|
||||||
[searchable]="false"
|
</div>
|
||||||
>
|
|
||||||
<ng-option *ngFor="let levelChoice of levelChoices" [value]="levelChoice.id">
|
|
||||||
<ng-container *ngIf="levelChoice.id === 'debug'"><span style="font-size:80%;color:lightgray;vertical-align:text-top;">⬤</span> {{ levelChoice.label }}</ng-container>
|
|
||||||
<ng-container *ngIf="levelChoice.id === 'info'"><span style="font-size:80%;color:lightskyblue;vertical-align:text-top;">⬤</span> {{ levelChoice.label }}</ng-container>
|
|
||||||
<ng-container *ngIf="levelChoice.id === 'warn'"><span style="font-size:80%;color:orange;vertical-align:text-top;">⬤</span> {{ levelChoice.label }}</ng-container>
|
|
||||||
<ng-container *ngIf="levelChoice.id === 'error'"><span style="font-size:80%;color:red;vertical-align:text-top;">⬤</span> {{ levelChoice.label }}</ng-container>
|
|
||||||
</ng-option>
|
|
||||||
</ng-select>
|
|
||||||
|
|
||||||
<my-button i18n-label label="Refresh" icon="refresh" (click)="refresh()"></my-button>
|
<my-button i18n-label label="Refresh" icon="refresh" (click)="refresh()"></my-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -52,8 +52,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
my-button,
|
my-button,
|
||||||
.peertube-select-container,
|
.peertube-select-container {
|
||||||
ng-select {
|
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +62,6 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.peertube-select-container,
|
.peertube-select-container,
|
||||||
ng-select,
|
|
||||||
my-button {
|
my-button {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
margin-left: 0px !important;
|
margin-left: 0px !important;
|
||||||
|
@ -82,7 +80,6 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.peertube-select-container,
|
.peertube-select-container,
|
||||||
ng-select,
|
|
||||||
my-button {
|
my-button {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
margin-left: 0px !important;
|
margin-left: 0px !important;
|
||||||
|
|
|
@ -14,7 +14,7 @@ export class LogsComponent implements OnInit {
|
||||||
loading = false
|
loading = false
|
||||||
|
|
||||||
logs: LogRow[] = []
|
logs: LogRow[] = []
|
||||||
timeChoices: { id: string, label: string, dateFormat: string }[] = []
|
timeChoices: { id: string, label: string }[] = []
|
||||||
levelChoices: { id: LogLevel, label: string }[] = []
|
levelChoices: { id: LogLevel, label: string }[] = []
|
||||||
logTypeChoices: { id: 'audit' | 'standard', label: string }[] = []
|
logTypeChoices: { id: 'audit' | 'standard', label: string }[] = []
|
||||||
|
|
||||||
|
@ -76,18 +76,15 @@ export class LogsComponent implements OnInit {
|
||||||
this.timeChoices = [
|
this.timeChoices = [
|
||||||
{
|
{
|
||||||
id: lastWeek.toISOString(),
|
id: lastWeek.toISOString(),
|
||||||
label: $localize`Last week`,
|
label: $localize`Last week`
|
||||||
dateFormat: 'shortDate'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: lastDay.toISOString(),
|
id: lastDay.toISOString(),
|
||||||
label: $localize`Last day`,
|
label: $localize`Last day`
|
||||||
dateFormat: 'short'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: lastHour.toISOString(),
|
id: lastHour.toISOString(),
|
||||||
label: $localize`Last hour`,
|
label: $localize`Last hour`
|
||||||
dateFormat: 'mediumTime'
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -98,19 +95,19 @@ export class LogsComponent implements OnInit {
|
||||||
this.levelChoices = [
|
this.levelChoices = [
|
||||||
{
|
{
|
||||||
id: 'debug',
|
id: 'debug',
|
||||||
label: $localize`debug`
|
label: $localize`Debug`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'info',
|
id: 'info',
|
||||||
label: $localize`info`
|
label: $localize`Info`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'warn',
|
id: 'warn',
|
||||||
label: $localize`warning`
|
label: $localize`Warning`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'error',
|
id: 'error',
|
||||||
label: $localize`error`
|
label: $localize`Error`
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<ng-template pTemplate="header">
|
<ng-template pTemplate="header">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 150px;">Action</th> <!-- column for action buttons -->
|
<th style="width: 150px;">Action</th> <!-- column for action buttons -->
|
||||||
<th style="width: calc(100% - 300px);" i18n>Account</th>
|
<th style="width: 100%;" i18n>Account</th>
|
||||||
<th style="width: 150px;" i18n pSortableColumn="createdAt">Muted at <p-sortIcon field="createdAt"></p-sortIcon></th>
|
<th style="width: 150px;" i18n pSortableColumn="createdAt">Muted at <p-sortIcon field="createdAt"></p-sortIcon></th>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
<ng-template pTemplate="header">
|
<ng-template pTemplate="header">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 150px;">Action</th> <!-- column for action buttons -->
|
<th style="width: 150px;">Action</th> <!-- column for action buttons -->
|
||||||
<th style="width: calc(100% - 300px);" i18n>Instance</th>
|
<th style="width: 100%;" i18n>Instance</th>
|
||||||
<th style="width: 150px;" i18n pSortableColumn="createdAt">Muted at <p-sortIcon field="createdAt"></p-sortIcon></th>
|
<th style="width: 150px;" i18n pSortableColumn="createdAt">Muted at <p-sortIcon field="createdAt"></p-sortIcon></th>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
|
@ -234,7 +234,7 @@ async function onVideoFileTranscoding (video: MVideoWithFile, videoFile: MVideoF
|
||||||
const fps = await getVideoFileFPS(transcodingPath)
|
const fps = await getVideoFileFPS(transcodingPath)
|
||||||
const metadata = await getMetadataFromFile(transcodingPath)
|
const metadata = await getMetadataFromFile(transcodingPath)
|
||||||
|
|
||||||
await move(transcodingPath, outputPath, { overwrite: true })
|
await move(transcodingPath, outputPath)
|
||||||
|
|
||||||
videoFile.size = stats.size
|
videoFile.size = stats.size
|
||||||
videoFile.fps = fps
|
videoFile.fps = fps
|
||||||
|
@ -242,8 +242,12 @@ async function onVideoFileTranscoding (video: MVideoWithFile, videoFile: MVideoF
|
||||||
|
|
||||||
await createTorrentAndSetInfoHash(video, videoFile)
|
await createTorrentAndSetInfoHash(video, videoFile)
|
||||||
|
|
||||||
await VideoFileModel.customUpsert(videoFile, 'video', undefined)
|
const updatedVideoFile = await videoFile.save()
|
||||||
video.VideoFiles = await video.$get('VideoFiles')
|
|
||||||
|
// Add it if this is a new created file
|
||||||
|
if (video.VideoFiles.some(f => f.id === videoFile.id) === false) {
|
||||||
|
video.VideoFiles.push(updatedVideoFile)
|
||||||
|
}
|
||||||
|
|
||||||
return video
|
return video
|
||||||
}
|
}
|
||||||
|
|
|
@ -1307,7 +1307,7 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
waitTranscoding:
|
waitTranscoding:
|
||||||
description: Whether or not we wait transcoding before publish the video
|
description: Whether or not we wait transcoding before publish the video
|
||||||
type: boolean
|
type: string
|
||||||
support:
|
support:
|
||||||
description: A text tell the audience how to support the video creator
|
description: A text tell the audience how to support the video creator
|
||||||
example: Please support my work on <insert crowdfunding plateform>! <3
|
example: Please support my work on <insert crowdfunding plateform>! <3
|
||||||
|
@ -1331,9 +1331,6 @@ paths:
|
||||||
commentsEnabled:
|
commentsEnabled:
|
||||||
description: Enable or disable comments for this video
|
description: Enable or disable comments for this video
|
||||||
type: boolean
|
type: boolean
|
||||||
downloadEnabled:
|
|
||||||
description: Enable or disable downloading for this video
|
|
||||||
type: boolean
|
|
||||||
originallyPublishedAt:
|
originallyPublishedAt:
|
||||||
description: Date when the content was originally published
|
description: Date when the content was originally published
|
||||||
type: string
|
type: string
|
||||||
|
@ -1431,14 +1428,14 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
waitTranscoding:
|
waitTranscoding:
|
||||||
description: Whether or not we wait transcoding before publish the video
|
description: Whether or not we wait transcoding before publish the video
|
||||||
type: boolean
|
type: string
|
||||||
support:
|
support:
|
||||||
description: A text tell the audience how to support the video creator
|
description: A text tell the audience how to support the video creator
|
||||||
example: Please support my work on <insert crowdfunding plateform>! <3
|
example: Please support my work on <insert crowdfunding plateform>! <3
|
||||||
type: string
|
type: string
|
||||||
nsfw:
|
nsfw:
|
||||||
description: Whether or not this video contains sensitive content
|
description: Whether or not this video contains sensitive content
|
||||||
type: boolean
|
type: string
|
||||||
name:
|
name:
|
||||||
description: Video name
|
description: Video name
|
||||||
type: string
|
type: string
|
||||||
|
@ -1453,10 +1450,7 @@ paths:
|
||||||
maxLength: 30
|
maxLength: 30
|
||||||
commentsEnabled:
|
commentsEnabled:
|
||||||
description: Enable or disable comments for this video
|
description: Enable or disable comments for this video
|
||||||
type: boolean
|
type: string
|
||||||
downloadEnabled:
|
|
||||||
description: Enable or disable downloading for this video
|
|
||||||
type: boolean
|
|
||||||
scheduleUpdate:
|
scheduleUpdate:
|
||||||
$ref: '#/components/schemas/VideoScheduledUpdate'
|
$ref: '#/components/schemas/VideoScheduledUpdate'
|
||||||
required:
|
required:
|
||||||
|
|
|
@ -124,17 +124,13 @@ peertube._domainkey.mydomain.tld. IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
|
||||||
"j5joTnYwat4387VEUyGUnZ0aZxCERi+ndXv2/wMJ0tizq+a9+EgqIb+7lkUc2XciQPNuTujM25GhrQBEKznvHyPA6fHsFheymOuB763QpkmnQQLCxyLygAY9mE/5RY+5Q6J9oDOQIDAQAB" ) ; ----- DKIM key peertube for mydomain.tld
|
"j5joTnYwat4387VEUyGUnZ0aZxCERi+ndXv2/wMJ0tizq+a9+EgqIb+7lkUc2XciQPNuTujM25GhrQBEKznvHyPA6fHsFheymOuB763QpkmnQQLCxyLygAY9mE/5RY+5Q6J9oDOQIDAQAB" ) ; ----- DKIM key peertube for mydomain.tld
|
||||||
```
|
```
|
||||||
|
|
||||||
### Administrator password
|
|
||||||
|
|
||||||
See the production guide ["Administrator" section](https://docs.joinpeertube.org/#/install-any-os?id=administrator)
|
|
||||||
|
|
||||||
### What now?
|
### What now?
|
||||||
|
|
||||||
See the production guide ["What now" section](https://docs.joinpeertube.org/#/install-any-os?id=what-now).
|
See the production guide ["What now" section](/support/doc/production.md#what-now).
|
||||||
|
|
||||||
### Upgrade
|
### Upgrade
|
||||||
|
|
||||||
**Important:** Before upgrading, check you have all the `storage` fields in your [production.yaml file](https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/config/production.yaml).
|
**Important:** Before upgrading, check you have all the `storage` fields in your [production.yaml file](/support/docker/production/config/production.yaml).
|
||||||
|
|
||||||
Pull the latest images and rerun PeerTube:
|
Pull the latest images and rerun PeerTube:
|
||||||
|
|
||||||
|
|
|
@ -238,7 +238,7 @@ to your own administrator password, although it must be 6 characters or more.
|
||||||
Now your instance is up you can:
|
Now your instance is up you can:
|
||||||
|
|
||||||
* Subscribe to the mailing list for PeerTube administrators: https://framalistes.org/sympa/subscribe/peertube-admin
|
* Subscribe to the mailing list for PeerTube administrators: https://framalistes.org/sympa/subscribe/peertube-admin
|
||||||
* Add your instance to the public PeerTube instances index if you want to: https://instances.joinpeertube.org/
|
* Add you instance to the public PeerTube instances index if you want to: https://instances.peertu.be/
|
||||||
* Check [available CLI tools](/support/doc/tools.md)
|
* Check [available CLI tools](/support/doc/tools.md)
|
||||||
|
|
||||||
## Upgrade
|
## Upgrade
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue