X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FEpisode.js;h=696d39a811385f9a7ab357af777ea84377b1da53;hb=b5a50d74cf042fa7fc874d8184dc37ae20bb74dd;hp=60c1a7b9f77976e6c640aefbebeec644a5538c26;hpb=779be2075b16953689efb4a56cc61663a33d5db5;p=alttp.git diff --git a/resources/js/helpers/Episode.js b/resources/js/helpers/Episode.js index 60c1a7b..696d39a 100644 --- a/resources/js/helpers/Episode.js +++ b/resources/js/helpers/Episode.js @@ -1,3 +1,5 @@ +import moment from 'moment'; + export const acceptsComms = episode => { if (!episode || !episode.channels) return false; return !!episode.channels.find(c => c.pivot && c.pivot.accept_comms); @@ -14,6 +16,48 @@ export const acceptsCrew = episode => { c.pivot && (c.pivot.accept_comms || c.pivot.accept_tracker)); }; +export const getSGLanguages = episode => { + if (!episode || !episode.channels) return []; + const sgChannels = episode.channels.filter( + c => c.stream_link && c.stream_link.startsWith('https://twitch.tv/speedgaming'), + ); + const langs = []; + sgChannels.forEach(channel => { + if (!channel.languages) return; + channel.languages.forEach(lang => { + if (!langs.includes(lang)) { + langs.push(lang); + } + }); + }); + return langs; +}; + +export const getSGSignupLink = (episode, lang, role) => + `https://speedgaming.org/${lang}/${role}/signup/${episode.ext_id.substr(3)}/`; + +export const hasPassed = episode => { + if (!episode || !episode.start) return false; + const now = moment(); + const end = moment(episode.start).add(episode.estimate, 'seconds'); + return end.isBefore(now); +}; + +export const hasSGRestream = episode => { + if (!episode || !episode.channels) return false; + return !!episode.channels.find( + c => c.stream_link && c.stream_link.startsWith('https://twitch.tv/speedgaming'), + ); +}; + +export const isActive = episode => { + if (!episode || !episode.start) return false; + const now = moment(); + const start = moment(episode.start).subtract(10, 'minutes'); + const end = moment(episode.start).add(episode.estimate, 'seconds'); + return start.isBefore(now) && end.isAfter(now); +}; + export const isEventSelected = (filter, event) => { return (filter.event || []).includes(event.id); };