2020-05-07 11:05:52 +00:00
|
|
|
import { broadcastApiRequest } from "../api";
|
|
|
|
import * as later from "later";
|
|
|
|
import { audioEngine } from "./audio";
|
|
|
|
import { add, set } from "date-fns";
|
|
|
|
import { Timer } from "later";
|
|
|
|
import { RootState } from "../rootReducer";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* But now it's time for the news!
|
|
|
|
*/
|
|
|
|
async function actuallyDoTheNews() {
|
|
|
|
console.log("actually doing the news");
|
|
|
|
// Sanity check
|
|
|
|
const now = new Date();
|
|
|
|
const newsInTime = set(now, { minutes: 59, seconds: 45 });
|
|
|
|
const newsOutTime = set(add(now, { hours: 1 }), { minutes: 1, seconds: 55 });
|
|
|
|
const newsInDelta = newsInTime.valueOf() - now.valueOf();
|
|
|
|
const newsOutDelta = newsOutTime.valueOf() - now.valueOf();
|
|
|
|
console.log(
|
|
|
|
"now is",
|
|
|
|
now,
|
|
|
|
"news in is at",
|
|
|
|
newsInTime,
|
|
|
|
"and out is at",
|
|
|
|
newsOutTime
|
|
|
|
);
|
|
|
|
console.log(
|
|
|
|
"so deltas are",
|
|
|
|
newsInDelta,
|
|
|
|
"and",
|
|
|
|
newsOutDelta,
|
|
|
|
"respectively"
|
|
|
|
);
|
|
|
|
if (newsInDelta > 0) {
|
|
|
|
window.setTimeout(async () => {
|
|
|
|
console.log("Playing News In");
|
|
|
|
await audioEngine.playNewsIntro();
|
|
|
|
}, newsInTime.valueOf() - now.valueOf());
|
|
|
|
}
|
|
|
|
if (newsOutDelta > 0) {
|
|
|
|
window.setTimeout(async () => {
|
|
|
|
console.log("Playing News Out");
|
|
|
|
await audioEngine.playNewsEnd();
|
|
|
|
}, newsOutTime.valueOf() - now.valueOf());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const considerDoingTheNews = (getState: () => RootState) => async () => {
|
|
|
|
console.log("considering doing the news");
|
|
|
|
const state = getState();
|
|
|
|
if (state.settings.doTheNews === "always") {
|
|
|
|
await actuallyDoTheNews();
|
|
|
|
} else if (state.settings.doTheNews === "while_live") {
|
2020-05-10 12:00:03 +00:00
|
|
|
if (
|
|
|
|
state.broadcast.connectionState === "CONNECTED" ||
|
|
|
|
state.broadcast.connectionState === "LIVE"
|
|
|
|
) {
|
2020-05-10 09:03:04 +00:00
|
|
|
const transition = await broadcastApiRequest<{
|
|
|
|
autoNews: boolean;
|
|
|
|
selSource: number;
|
|
|
|
switchAudioAtMin: number;
|
|
|
|
}>("/nextTransition", "GET", {});
|
|
|
|
if (transition.autoNews) {
|
|
|
|
await actuallyDoTheNews();
|
|
|
|
}
|
2020-05-07 11:05:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
let newsTimer: Timer | null = null;
|
|
|
|
|
|
|
|
export function butNowItsTimeFor(getStateFn: () => RootState) {
|
|
|
|
const newsSchedule = later.parse
|
|
|
|
.recur()
|
|
|
|
.on(30)
|
|
|
|
.second()
|
|
|
|
.on(59)
|
|
|
|
.minute()
|
|
|
|
.every("hour");
|
|
|
|
if (newsTimer === null) {
|
|
|
|
newsTimer = later.setInterval(
|
|
|
|
considerDoingTheNews(getStateFn),
|
|
|
|
newsSchedule
|
|
|
|
);
|
|
|
|
console.log(newsSchedule);
|
|
|
|
console.log(
|
|
|
|
"the next run of the news will be at",
|
|
|
|
later.schedule(newsSchedule).next(1)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|