@livetv-app/tvguide
Version:
An Android TV Live Channels-like Electronic Programme Guide for React DOM and React Native applications.
133 lines (132 loc) • 6.03 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatEpisodeText = exports.handleProgrammeAction = exports.getNextChannel = exports.getPreviousChannel = exports.getNextProgrammeTime = exports.getPreviousProgrammeTime = exports.getProgrammeAtTime = exports.formatTimeShort = exports.formatTime = exports.formatDay = exports.useCurrentTime = exports.getLocalised = exports.useLocalised = exports.LanguageContext = exports.DEFAULT_LANGUAGE = void 0;
const react_1 = require("react");
exports.DEFAULT_LANGUAGE = 'en-GB';
exports.LanguageContext = react_1.createContext(exports.DEFAULT_LANGUAGE);
function useLocalised(strings) {
const language = react_1.useContext(exports.LanguageContext).toLowerCase();
return getLocalised(language, strings);
}
exports.useLocalised = useLocalised;
function getLocalised(language, strings) {
var _a;
if (typeof strings !== 'object' || !strings)
return strings;
const languages = Object.entries(strings);
for (const [l, s] of languages) {
if (l.toLowerCase() === language)
return s;
}
return (_a = languages[0]) === null || _a === void 0 ? void 0 : _a[1];
}
exports.getLocalised = getLocalised;
function useCurrentTime(interval = 60000) {
const [time, setTime] = react_1.useState(() => new Date(Math.floor(Date.now() / interval) * interval));
react_1.useEffect(() => {
const remaining = Math.max(interval - (Date.now() % interval), 10);
let timeout;
const setTimer = () => timeout = setTimeout(() => {
setTime(new Date(Math.floor(Date.now() / interval) * interval));
setTimer();
}, remaining);
setTimer();
return () => clearTimeout(timeout);
}, [interval]);
return time;
}
exports.useCurrentTime = useCurrentTime;
function formatDay(time) {
return time.toLocaleString('en-GB', {
weekday: 'short',
day: 'numeric',
month: 'short',
year: 'numeric',
});
}
exports.formatDay = formatDay;
function formatTime(time) {
return time.toLocaleString('en-GB', {
weekday: 'short',
day: 'numeric',
month: 'short',
hour: 'numeric',
minute: 'numeric',
hour12: true,
});
}
exports.formatTime = formatTime;
function formatTimeShort(time) {
return time.toLocaleString('en-GB', {
hour: 'numeric',
minute: 'numeric',
hour12: true,
});
}
exports.formatTimeShort = formatTimeShort;
var epgdata_1 = require("@livetv-app/epgdata");
Object.defineProperty(exports, "getProgrammeAtTime", { enumerable: true, get: function () { return epgdata_1.getProgrammeAtTime; } });
Object.defineProperty(exports, "getPreviousProgrammeTime", { enumerable: true, get: function () { return epgdata_1.getPreviousProgrammeTime; } });
Object.defineProperty(exports, "getNextProgrammeTime", { enumerable: true, get: function () { return epgdata_1.getNextProgrammeTime; } });
function getPreviousChannel(channel, channels, wrap = true) {
var _a;
if (channel) {
const index = channels.findIndex(c => c.id === channel.id);
if (index === 0) {
return wrap ? channels[channels.length - 1] : null;
}
else if (index !== -1) {
return channels[index - 1];
}
}
return (_a = channels[0]) !== null && _a !== void 0 ? _a : null;
}
exports.getPreviousChannel = getPreviousChannel;
function getNextChannel(channel, channels, wrap = true) {
var _a;
if (channel) {
const index = channels.findIndex(c => c.id === channel.id);
if (index === channels.length - 1) {
return wrap ? channels[0] : null;
}
else if (index !== -1) {
return channels[index + 1];
}
}
return (_a = channels[0]) !== null && _a !== void 0 ? _a : null;
}
exports.getNextChannel = getNextChannel;
function handleProgrammeAction(programme, action, event) {
return __awaiter(this, void 0, void 0, function* () {
//
});
}
exports.handleProgrammeAction = handleProgrammeAction;
function formatEpisodeText(programme) {
return typeof programme.episode === 'number' || programme.episode_name ?
typeof programme.series === 'number' && typeof programme.episode === 'number' &&
programme.episode_name ?
`S${programme.series + 1}, E${programme.episode + 1}: ${programme.episode_name}` :
typeof programme.series === 'number' && typeof programme.episode === 'number' ?
`Series ${programme.series + 1}, Episode ${programme.episode + 1}` +
(programme.episode_name ? ': ' + programme.episode_name : '') :
typeof programme.series === 'number' && programme.episode_name ?
`S${programme.series + 1}: ${programme.episode_name}` :
typeof programme.episode === 'number' && programme.episode_name ?
`E${programme.episode + 1}: ${programme.episode_name}` :
typeof programme.episode === 'number' ?
`Episode ${programme.episode + 1}` :
programme.episode_name ?
programme.episode_name :
null : null;
}
exports.formatEpisodeText = formatEpisodeText;