edca1be70a
There are still some FIXME, but should be enought for now.
93 lines
2.2 KiB
TypeScript
93 lines
2.2 KiB
TypeScript
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { parseConfigUUIDs } from './config'
|
|
|
|
interface VideoHasWebchatSettings {
|
|
'chat-per-live-video': boolean
|
|
'chat-all-lives': boolean
|
|
'chat-all-non-lives': boolean
|
|
'chat-videos-list': string
|
|
}
|
|
|
|
interface SharedVideoBase {
|
|
uuid: string
|
|
isLive: boolean
|
|
pluginData?: {
|
|
'livechat-active'?: boolean
|
|
'livechat-remote'?: boolean
|
|
}
|
|
}
|
|
|
|
interface SharedVideoFrontend extends SharedVideoBase {
|
|
isLocal: boolean
|
|
}
|
|
|
|
interface SharedVideoBackend extends SharedVideoBase {
|
|
remote: boolean
|
|
}
|
|
|
|
type SharedVideo = SharedVideoBackend | SharedVideoFrontend
|
|
|
|
/**
|
|
* Indicate if the video has a local chat.
|
|
* @param settings plugin settings
|
|
* @param video the video
|
|
* @returns true if the video has a local chat
|
|
*/
|
|
function videoHasWebchat (settings: VideoHasWebchatSettings, video: SharedVideo): boolean {
|
|
// Never use webchat on remote videos.
|
|
if ('isLocal' in video) {
|
|
if (!video.isLocal) return false
|
|
} else {
|
|
if (video.remote) return false
|
|
}
|
|
|
|
if (settings['chat-per-live-video'] && video.isLive && video.pluginData?.['livechat-active']) {
|
|
return true
|
|
}
|
|
|
|
if (settings['chat-all-lives']) {
|
|
if (video.isLive) return true
|
|
}
|
|
|
|
if (settings['chat-all-non-lives']) {
|
|
if (!video.isLive) return true
|
|
}
|
|
|
|
const uuids = parseConfigUUIDs(settings['chat-videos-list'])
|
|
if (uuids.includes(video.uuid)) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
interface VideoHasRemoteWebchatSettings {
|
|
'federation-no-remote-chat': boolean
|
|
}
|
|
|
|
/**
|
|
* Indicates if the video has a remote chat.
|
|
* @param settings plugin settings
|
|
* @param video the video
|
|
* @returns true if the video has a remote chat
|
|
*/
|
|
function videoHasRemoteWebchat (settings: VideoHasRemoteWebchatSettings, video: SharedVideo): boolean {
|
|
if (settings['federation-no-remote-chat']) { return false }
|
|
if ('isLocal' in video) {
|
|
if (video.isLocal) return false
|
|
} else {
|
|
if (!video.remote) return false
|
|
}
|
|
if (!video.pluginData) { return false }
|
|
if (!video.pluginData['livechat-remote']) { return false }
|
|
return true
|
|
}
|
|
|
|
export {
|
|
videoHasWebchat,
|
|
videoHasRemoteWebchat
|
|
}
|