Chat can be enabled in video properties.

This commit is contained in:
John Livingston
2021-06-08 18:08:58 +02:00
parent 07b7f4d732
commit 385a0074c1
11 changed files with 154 additions and 16 deletions

View File

@ -37,7 +37,7 @@ interface RegisterClientFormFieldOptions {
type: 'input' | 'input-checkbox' | 'input-password' | 'input-textarea' | 'markdown-text' | 'markdown-enhanced'
descriptionHTML?: string
default?: string | boolean
private: boolean
hidden?: (options: any) => boolean
}
interface RegisterClientSettingsScript {
isSettingHidden: (options: {
@ -46,10 +46,18 @@ interface RegisterClientSettingsScript {
}) => boolean
}
interface RegisterClientVideoFieldOptions {
type: 'update' | 'upload' | 'import-url' | 'import-torrent' | 'go-live'
}
interface RegisterOptions {
registerHook: (options: RegisterClientHookOptions) => void
peertubeHelpers: RegisterClientHelpers
registerSettingsScript: (options: RegisterClientSettingsScript) => void
registerVideoField: (
commonOptions: RegisterClientFormFieldOptions,
videoFormOptions: RegisterClientVideoFieldOptions
) => void
}
interface Video {

View File

@ -23,6 +23,8 @@ function register ({ registerSettingsScript }: RegisterOptions): void {
return options.formValues['chat-type'] === 'disabled'
case 'chat-only-locals-warning':
return options.formValues['chat-only-locals'] === true
case 'chat-per-live-video-warning':
return !(options.formValues['chat-all-lives'] === true && options.formValues['chat-per-live-video'] === true)
}
return false

View File

@ -1,5 +1,5 @@
function register ({ registerHook }: RegisterOptions): void {
async function register ({ peertubeHelpers, registerHook, registerVideoField }: RegisterOptions): Promise<void> {
registerHook({
target: 'action:router.navigation-end',
handler: () => {
@ -9,6 +9,34 @@ function register ({ registerHook }: RegisterOptions): void {
}
}
})
const [label, description, settings] = await Promise.all([
peertubeHelpers.translate('Use chat'),
peertubeHelpers.translate('If enabled, there will be a chat next to the video.'),
peertubeHelpers.getSettings()
])
const webchatFieldOptions: RegisterClientFormFieldOptions = {
name: 'livechat-active',
label: label,
descriptionHTML: description,
type: 'input-checkbox',
default: true,
hidden: ({ liveVideo }) => {
if (!liveVideo) {
return true
}
if (!settings['chat-per-live-video']) {
return true
}
if (settings['chat-all-lives']) {
// No need to add this field if live is active for all live videos
return true
}
return false
}
}
registerVideoField(webchatFieldOptions, { type: 'update' })
registerVideoField(webchatFieldOptions, { type: 'go-live' })
}
export {