From 88d591a58454c37ebb69cd880f74d01e33df48d4 Mon Sep 17 00:00:00 2001 From: Matt Isenhower Date: Fri, 1 Sep 2017 12:56:31 -0700 Subject: [PATCH] Enable merging in additional data for the Salmon Run schedule This will enable adding map/weapon data and additional schedules. --- .gitignore | 1 + src/updater/salmoncalendar.js | 34 +++++++++++++++++++++++++++++++--- src/updater/update.js | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 1346c43..4a39888 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules .env public/* manual-festivals.json +manual-salmonrun.json diff --git a/src/updater/salmoncalendar.js b/src/updater/salmoncalendar.js index a45a86b..29f5bae 100644 --- a/src/updater/salmoncalendar.js +++ b/src/updater/salmoncalendar.js @@ -1,8 +1,10 @@ require('./bootstrap'); const axios = require('axios'); const ical = require('ical.js'); +const fs = require('fs'); +const path = require('path'); -async function getSalmonRunCalendar() { +async function getEventsFromCalendar() { let response = await axios.get(process.env.SALMON_RUN_CALENDAR_ICS_URL); let now = Math.trunc((new Date).getTime() / 1000); @@ -29,11 +31,37 @@ async function getSalmonRunCalendar() { schedules.push({ start_time, end_time }); }); - schedules.sort((a, b) => { return a.start_time - b.start_time }); + return schedules; +} +function getManualEvents() { + let filename = path.resolve('manual-salmonrun.json'); + if (!fs.existsSync(filename)) + return []; + return JSON.parse(fs.readFileSync(filename)); +} + +async function getSchedules() { + let calendarEvents = await getEventsFromCalendar(); + let manualEvents = getManualEvents(); + + let keyedSchedules = {}; + + for (event of calendarEvents) + keyedSchedules[event.start_time] = event; + + for (event of manualEvents) { + if (event.start_time in keyedSchedules) + Object.assign(keyedSchedules[event.start_time], event); + else + keyedSchedules[event.start_time] = event; + } + + let schedules = Object.values(keyedSchedules); + schedules.sort((a, b) => { return a.start_time - b.start_time }); return { schedules }; } module.exports = { - getSalmonRunCalendar, + getSchedules, } diff --git a/src/updater/update.js b/src/updater/update.js index 73ad65b..c1bd4ce 100644 --- a/src/updater/update.js +++ b/src/updater/update.js @@ -139,7 +139,7 @@ function updateSalmonRunCalendar() { return handleRequest({ title: 'Salmon Run calendar', filename: `${dataPath}/salmonruncalendar.json`, - request: salmoncalendar.getSalmonRunCalendar(), + request: salmoncalendar.getSchedules(), }); }