2021-03-03 14:37:38 +00:00
|
|
|
// @flow
|
|
|
|
|
2021-07-09 12:36:19 +00:00
|
|
|
import { getFakeParticipants } from '../base/participants';
|
2021-03-03 14:37:38 +00:00
|
|
|
|
2021-04-16 09:43:34 +00:00
|
|
|
import { VIDEO_PLAYER_PARTICIPANT_NAME, YOUTUBE_PLAYER_PARTICIPANT_NAME } from './constants';
|
2021-03-03 14:37:38 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Validates the entered video url.
|
|
|
|
*
|
|
|
|
* It returns a boolean to reflect whether the url matches the youtube regex.
|
|
|
|
*
|
|
|
|
* @param {string} url - The entered video link.
|
2021-04-16 09:43:34 +00:00
|
|
|
* @returns {string} The youtube video id if matched.
|
2021-03-03 14:37:38 +00:00
|
|
|
*/
|
2022-01-14 23:35:31 +00:00
|
|
|
function getYoutubeId(url: string) {
|
2021-04-16 09:43:34 +00:00
|
|
|
if (!url) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2021-03-03 14:37:38 +00:00
|
|
|
const p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|(?:m\.)?youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;// eslint-disable-line max-len
|
|
|
|
const result = url.match(p);
|
|
|
|
|
2021-04-16 09:43:34 +00:00
|
|
|
return result ? result[1] : null;
|
2021-03-03 14:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if the status is one that is actually sharing the video - playing, pause or start.
|
|
|
|
*
|
|
|
|
* @param {string} status - The shared video status.
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
export function isSharingStatus(status: string) {
|
|
|
|
return [ 'playing', 'pause', 'start' ].includes(status);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if there is a video being shared in the meeting.
|
|
|
|
*
|
|
|
|
* @param {Object | Function} stateful - The Redux state or a function that gets resolved to the Redux state.
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
export function isVideoPlaying(stateful: Object | Function): boolean {
|
2021-07-09 12:36:19 +00:00
|
|
|
let videoPlaying = false;
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
|
|
for (const [ id, p ] of getFakeParticipants(stateful)) {
|
|
|
|
if (p.name === VIDEO_PLAYER_PARTICIPANT_NAME || p.name === YOUTUBE_PLAYER_PARTICIPANT_NAME) {
|
|
|
|
videoPlaying = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return videoPlaying;
|
2021-03-03 14:37:38 +00:00
|
|
|
}
|
2021-07-09 14:16:35 +00:00
|
|
|
|
2022-01-14 23:35:31 +00:00
|
|
|
/**
|
|
|
|
* Extracts a Youtube id or URL from the user input.
|
|
|
|
*
|
|
|
|
* @param {string} input - The user input.
|
|
|
|
* @returns {string|undefined}
|
|
|
|
*/
|
|
|
|
export function extractYoutubeIdOrURL(input: string) {
|
|
|
|
if (!input) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const trimmedLink = input.trim();
|
|
|
|
|
|
|
|
if (!trimmedLink) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const youtubeId = getYoutubeId(trimmedLink);
|
|
|
|
|
|
|
|
if (youtubeId) {
|
|
|
|
return youtubeId;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if the URL is valid, native may crash otherwise.
|
|
|
|
try {
|
|
|
|
// eslint-disable-next-line no-new
|
|
|
|
new URL(trimmedLink);
|
|
|
|
} catch (_) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
return trimmedLink;
|
|
|
|
}
|
|
|
|
|