Add short description in config

pull/332/merge
Chocobozzz 2018-03-15 14:31:08 +01:00
parent 44a9a76e29
commit 2e3a0215d0
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
19 changed files with 59 additions and 13 deletions

View File

@ -15,6 +15,17 @@
</div>
</div>
<div class="form-group">
<label for="instanceShortDescription">Short description</label>
<textarea
id="instanceShortDescription" formControlName="instanceShortDescription"
[ngClass]="{ 'input-error': formErrors['instanceShortDescription'] }"
></textarea>
<div *ngIf="formErrors.instanceShortDescription" class="form-error">
{{ formErrors.instanceShortDescription }}
</div>
</div>
<div class="form-group">
<label for="instanceDescription">Description</label><my-help helpType="markdownText"></my-help>
<my-markdown-textarea

View File

@ -34,4 +34,8 @@ textarea {
@include peertube-textarea(500px, 150px);
display: block;
&#instanceShortDescription {
height: 100px;
}
}

View File

@ -8,7 +8,7 @@ import { FormReactive, USER_VIDEO_QUOTA } from '@app/shared'
import {
ADMIN_EMAIL,
CACHE_PREVIEWS_SIZE,
INSTANCE_NAME,
INSTANCE_NAME, INSTANCE_SHORT_DESCRIPTION,
SIGNUP_LIMIT,
TRANSCODING_THREADS
} from '@app/shared/forms/form-validators/custom-config'
@ -44,6 +44,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
form: FormGroup
formErrors = {
instanceName: '',
instanceShortDescription: '',
instanceDescription: '',
instanceTerms: '',
instanceDefaultClientRoute: '',
@ -56,6 +57,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
customizationCSS: ''
}
validationMessages = {
instanceShortDescription: INSTANCE_SHORT_DESCRIPTION.MESSAGES,
instanceName: INSTANCE_NAME.MESSAGES,
cachePreviewsSize: CACHE_PREVIEWS_SIZE.MESSAGES,
signupLimit: SIGNUP_LIMIT.MESSAGES,
@ -84,6 +86,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
buildForm () {
const formGroupData = {
instanceName: [ '', INSTANCE_NAME.VALIDATORS ],
instanceShortDescription: [ '', INSTANCE_SHORT_DESCRIPTION.VALIDATORS ],
instanceDescription: [ '' ],
instanceTerms: [ '' ],
instanceDefaultClientRoute: [ '' ],
@ -158,6 +161,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
const data: CustomConfig = {
instance: {
name: this.form.value['instanceName'],
shortDescription: this.form.value['instanceShortDescription'],
description: this.form.value['instanceDescription'],
terms: this.form.value['instanceTerms'],
defaultClientRoute: this.form.value['instanceDefaultClientRoute'],
@ -214,6 +218,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
private updateForm () {
const data = {
instanceName: this.customConfig.instance.name,
instanceShortDescription: this.customConfig.instance.shortDescription,
instanceDescription: this.customConfig.instance.description,
instanceTerms: this.customConfig.instance.terms,
instanceDefaultClientRoute: this.customConfig.instance.defaultClientRoute,

View File

@ -21,6 +21,7 @@ export class ServerService {
private config: ServerConfig = {
instance: {
name: 'PeerTube',
shortDescription: '',
defaultClientRoute: '',
customizations: {
javascript: '',

View File

@ -7,6 +7,13 @@ export const INSTANCE_NAME = {
}
}
export const INSTANCE_SHORT_DESCRIPTION = {
VALIDATORS: [ Validators.max(250) ],
MESSAGES: {
'max': 'Short description should not be longer than 250 characters.'
}
}
export const CACHE_PREVIEWS_SIZE = {
VALIDATORS: [ Validators.required, Validators.min(1), Validators.pattern('[0-9]+') ],
MESSAGES: {

View File

@ -72,6 +72,7 @@ transcoding:
instance:
name: 'PeerTube'
short_description: 'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.'
description: 'Welcome to this PeerTube instance!' # Support markdown
terms: 'No terms for now.' # Support markdown
default_client_route: '/videos/trending'

View File

@ -85,6 +85,7 @@ transcoding:
instance:
name: 'PeerTube'
short_description: 'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.'
description: '' # Support markdown
terms: '' # Support markdown
default_client_route: '/videos/trending'

View File

@ -44,6 +44,7 @@ async function getConfig (req: express.Request, res: express.Response, next: exp
const json: ServerConfig = {
instance: {
name: CONFIG.INSTANCE.NAME,
shortDescription: CONFIG.INSTANCE.SHORT_DESCRIPTION,
defaultClientRoute: CONFIG.INSTANCE.DEFAULT_CLIENT_ROUTE,
customizations: {
javascript: CONFIG.INSTANCE.CUSTOMIZATIONS.JAVASCRIPT,
@ -85,6 +86,7 @@ function getAbout (req: express.Request, res: express.Response, next: express.Ne
const about: About = {
instance: {
name: CONFIG.INSTANCE.NAME,
shortDescription: CONFIG.INSTANCE.SHORT_DESCRIPTION,
description: CONFIG.INSTANCE.DESCRIPTION,
terms: CONFIG.INSTANCE.TERMS
}
@ -116,8 +118,10 @@ async function updateCustomConfig (req: express.Request, res: express.Response,
const toUpdateJSON = omit(toUpdate, 'videoQuota')
toUpdateJSON.user['video_quota'] = toUpdate.user.videoQuota
toUpdateJSON.instance['default_client_route'] = toUpdate.instance.defaultClientRoute
toUpdateJSON.instance['short_description'] = toUpdate.instance.shortDescription
delete toUpdate.user.videoQuota
delete toUpdate.instance.defaultClientRoute
delete toUpdate.instance.shortDescription
await writeFilePromise(CONFIG.CUSTOM_FILE, JSON.stringify(toUpdateJSON, undefined, 2))
@ -139,6 +143,7 @@ function customConfig (): CustomConfig {
return {
instance: {
name: CONFIG.INSTANCE.NAME,
shortDescription: CONFIG.INSTANCE.SHORT_DESCRIPTION,
description: CONFIG.INSTANCE.DESCRIPTION,
terms: CONFIG.INSTANCE.TERMS,
defaultClientRoute: CONFIG.INSTANCE.DEFAULT_CLIENT_ROUTE,

View File

@ -157,6 +157,7 @@ const CONFIG = {
},
INSTANCE: {
get NAME () { return config.get<string>('instance.name') },
get SHORT_DESCRIPTION () { return config.get<string>('instance.short_description') },
get DESCRIPTION () { return config.get<string>('instance.description') },
get TERMS () { return config.get<string>('instance.terms') },
get DEFAULT_CLIENT_ROUTE () { return config.get<string>('instance.default_client_route') },

View File

@ -39,7 +39,7 @@ async function processActivityPubHttpBroadcast (job: kue.Job) {
}
}
return ActorFollowModel.updateActorFollowsScoreAndRemoveBadOnes(goodUrls, badUrls, undefined)
return ActorFollowModel.updateActorFollowsScore(goodUrls, badUrls, undefined)
}
// ---------------------------------------------------------------------------

View File

@ -28,9 +28,9 @@ async function processActivityPubHttpUnicast (job: kue.Job) {
try {
await doRequest(options)
ActorFollowModel.updateActorFollowsScoreAndRemoveBadOnes([ uri ], [], undefined)
ActorFollowModel.updateActorFollowsScore([ uri ], [], undefined)
} catch (err) {
ActorFollowModel.updateActorFollowsScoreAndRemoveBadOnes([], [ uri ], undefined)
ActorFollowModel.updateActorFollowsScore([], [ uri ], undefined)
throw err
}

View File

@ -111,7 +111,7 @@ export class ActorFollowModel extends Model<ActorFollowModel> {
if (numberOfActorFollowsRemoved) logger.info('Removed bad %d actor follows.', numberOfActorFollowsRemoved)
}
static updateActorFollowsScoreAndRemoveBadOnes (goodInboxes: string[], badInboxes: string[], t: Sequelize.Transaction) {
static updateActorFollowsScore (goodInboxes: string[], badInboxes: string[], t: Sequelize.Transaction) {
if (goodInboxes.length === 0 && badInboxes.length === 0) return
logger.info('Updating %d good actor follows and %d bad actor follows scores.', goodInboxes.length, badInboxes.length)

View File

@ -16,6 +16,7 @@ describe('Test config API validators', function () {
const updateParams: CustomConfig = {
instance: {
name: 'PeerTube updated',
shortDescription: 'my short description',
description: 'my super description',
terms: 'my super terms',
defaultClientRoute: '/videos/recently-added',

View File

@ -52,6 +52,10 @@ describe('Test config', function () {
const data = res.body as CustomConfig
expect(data.instance.name).to.equal('PeerTube')
expect(data.instance.shortDescription).to.equal(
'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser ' +
'with WebTorrent and Angular.'
)
expect(data.instance.description).to.equal('Welcome to this PeerTube instance!')
expect(data.instance.terms).to.equal('No terms for now.')
expect(data.instance.defaultClientRoute).to.equal('/videos/trending')
@ -75,6 +79,7 @@ describe('Test config', function () {
const newCustomConfig = {
instance: {
name: 'PeerTube updated',
shortDescription: 'my short description',
description: 'my super description',
terms: 'my super terms',
defaultClientRoute: '/videos/recently-added',
@ -116,6 +121,7 @@ describe('Test config', function () {
const data = res.body
expect(data.instance.name).to.equal('PeerTube updated')
expect(data.instance.shortDescription).to.equal('my short description')
expect(data.instance.description).to.equal('my super description')
expect(data.instance.terms).to.equal('my super terms')
expect(data.instance.defaultClientRoute).to.equal('/videos/recently-added')
@ -146,6 +152,7 @@ describe('Test config', function () {
const data = res.body
expect(data.instance.name).to.equal('PeerTube updated')
expect(data.instance.shortDescription).to.equal('my short description')
expect(data.instance.description).to.equal('my super description')
expect(data.instance.terms).to.equal('my super terms')
expect(data.instance.defaultClientRoute).to.equal('/videos/recently-added')
@ -170,6 +177,7 @@ describe('Test config', function () {
const data: About = res.body
expect(data.instance.name).to.equal('PeerTube updated')
expect(data.instance.shortDescription).to.equal('my short description')
expect(data.instance.description).to.equal('my super description')
expect(data.instance.terms).to.equal('my super terms')
})
@ -183,6 +191,10 @@ describe('Test config', function () {
const data = res.body
expect(data.instance.name).to.equal('PeerTube')
expect(data.instance.shortDescription).to.equal(
'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser ' +
'with WebTorrent and Angular.'
)
expect(data.instance.description).to.equal('Welcome to this PeerTube instance!')
expect(data.instance.terms).to.equal('No terms for now.')
expect(data.instance.defaultClientRoute).to.equal('/videos/trending')

View File

@ -1,6 +1,7 @@
export interface About {
instance: {
name: string
shortDescription: string
description: string
terms: string
}

View File

@ -1,6 +1,7 @@
export interface CustomConfig {
instance: {
name: string
shortDescription: string
description: string
terms: string
defaultClientRoute: string

View File

@ -1,8 +0,0 @@
export interface Customization {
instance: {
customization: {
javascript: string
css: string
}
}
}

View File

@ -3,6 +3,7 @@ export interface ServerConfig {
instance: {
name: string
shortDescription: string
defaultClientRoute: string
customizations: {
javascript: string

View File

@ -152,6 +152,8 @@ logs. You can set another password with:
$ cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root
```
Now you can subscribe to the mailing list for PeerTube administrators: https://framalistes.org/sympa/subscribe/peertube-admin
## Upgrade
#### Auto (minor versions only)