// SPDX-FileCopyrightText: 2024 John Livingston // // 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 }