@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
75 lines (57 loc) • 2.01 kB
text/typescript
import * as R from "ramda";
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
import { getBoolFromConfigValue } from "../configurationUtils";
/**
* Gets duration value from player manager, and from extensions
* then checks whether the value from either is a not a valid number
* If the number is invalid or less than zero we can assume it is live
* @param {object} content
* @returns {boolean}
*/
export function isLiveLegacy(content) {
const isNaNCurry = R.curry(isNaN);
const isNotaValidNumber = R.anyPass([
R.isEmpty,
R.isNil,
isNaNCurry,
R.equals(Infinity),
]);
const durationFromExt = R.path(["extensions", "duration"], content);
const durationFromMgr = playerManager.getDuration();
const duration = Math.floor(durationFromExt || durationFromMgr);
const isLive = R.anyPass([isNotaValidNumber, R.lte(R.__, 0)])(duration);
return isLive;
}
export function isLiveByDuration(duration): boolean {
const durationNumber = duration && parseFloat(duration);
if (R.isNil(durationNumber) || R.isEmpty(durationNumber)) {
return false;
}
return durationNumber <= 0;
}
export function hasLiveExtension(entry): boolean {
return !!(
entry?.type?.value === "channel" ||
getBoolFromConfigValue(entry?.extensions?.live) ||
getBoolFromConfigValue(entry?.extensions?.isLive)
);
}
export function isEntryLive(entry): boolean {
if (R.isNil(entry)) {
return false;
}
const duration = R.path(["extensions", "duration"], entry);
return hasLiveExtension(entry) || isLiveByDuration(duration);
}
function isLiveByManager(): boolean {
const playerStateIsLive =
playerManager.getActivePlayer()?.playerState?.isLive;
if (playerStateIsLive) {
return true;
}
const durationFromPlayerManager = playerManager.getDuration();
return isLiveByDuration(durationFromPlayerManager);
}
export function isLive(entry: ZappEntry): boolean {
return isEntryLive(entry) || isLiveByManager();
}