commit 8bde1ff49f98fd2f6c886902b5f4d63f30aaa26a
parent 8850a992b4e0ac4dabd2cbd2d2783ac89f5dad3a
Author: Katja (ctucx) <git@ctu.cx>
Date: Sun, 20 Apr 2025 23:37:14 +0200
parent 8850a992b4e0ac4dabd2cbd2d2783ac89f5dad3a
Author: Katja (ctucx) <git@ctu.cx>
Date: Sun, 20 Apr 2025 23:37:14 +0200
journeysCanvas: improve coach-sqequence caching and fetching even more
4 files changed, 27 insertions(+), 28 deletions(-)
diff --git a/src/coach-sequence/DBMapping.js b/src/coach-sequence/DBMapping.js @@ -152,10 +152,8 @@ const mapDirection = coaches => { return last.position.startPercent > first.position.startPercent; } -const mapSequence = async (sequence, basePercent) => { - const groups = await Promise.all( - sequence.groups.map((g) => mapGroup(g, basePercent)), - ); +const mapSequence = (sequence, basePercent) => { + const groups = sequence.groups.map(group => mapGroup(group, basePercent)); if (groups.includes(undefined)) return undefined; @@ -164,14 +162,14 @@ const mapSequence = async (sequence, basePercent) => { }; } -export const mapInformation = async (upstreamSequence, trainCategory, trainNumber, evaNumber) => { +export const mapInformation = (upstreamSequence, trainCategory, trainNumber, evaNumber) => { if (!upstreamSequence) return undefined; const [stop, basePercent] = mapStop(evaNumber, upstreamSequence.platform); if (!stop) return undefined; - const sequence = await mapSequence(upstreamSequence, basePercent); + const sequence = mapSequence(upstreamSequence, basePercent); if (!sequence) return undefined;
diff --git a/src/coach-sequence/index.js b/src/coach-sequence/index.js @@ -20,36 +20,34 @@ const rawDBCoachSequence = async (category, number, evaNumber, date, retry = 2) } } -const DBCoachSequence = async (category, number, evaNumber, date) => { - const rawSequence = await rawDBCoachSequence(category, number, evaNumber, date); - - if (!rawSequence) return undefined; - - return mapInformation(rawSequence, category, number, evaNumber); -} - export const cachedCoachSequence = (category, number, evaNumber, departure, onlyCached) => { if (!category || !number || !evaNumber || !departure) return null; - const key = `${category}-${number}-${evaNumber}-${departure.toISOString()}`; - let data = sessionStorage.getItem(key); + const key = `${category}-${number}-${evaNumber}-${departure.toISOString()}`; + let rawSequence = sessionStorage.getItem(key); + let cachedResponse = true; - if (data === null) { + if (!rawSequence) { if (onlyCached === true) return null; - - data = (async () => { + cachedResponse = false; + rawSequence = (async () => { try { - const info = await DBCoachSequence(category, number, evaNumber, departure); - if (info === undefined) return null; - sessionStorage.setItem(key, JSON.stringify(info)); - return info; + const rawSequence = await rawDBCoachSequence(category, number, evaNumber, departure); + if (!rawSequence) return null; + + sessionStorage.setItem(key, JSON.stringify(rawSequence)); + return rawSequence; } catch (e) { + console.log(e) return null; } })(); } else { - data = JSON.parse(data); + rawSequence = JSON.parse(rawSequence); } - return data; + return { + ...mapInformation(rawSequence, category, number, evaNumber), + cachedResponse + }; };
diff --git a/src/journeysCanvas.js b/src/journeysCanvas.js @@ -224,14 +224,17 @@ export class JourneysCanvas extends BaseView { if (isDevServer) console.info('JourneysCanvas(getCoachSequences): fetch start'); this.isUpdating = true; + let timeout = 500; for (const journey of this.viewState.journeys) { for (const leg of journey.legs) { if (!leg.line) continue; const [category, number] = leg.line.name.split(" "); if (category !== 'ICE') continue; - await sleep(500); - cachedCoachSequence(category, leg.line.fahrtNr || number, leg.origin.id, leg.plannedDeparture); + await sleep(timeout); + + const coachSequence = cachedCoachSequence(category, leg.line.fahrtNr || number, leg.origin.id, leg.plannedDeparture); + timeout = !coachSequence.cachedResponse ? 1000 : 0; this.renderCanvas(); }
diff --git a/src/journeysView.js b/src/journeysView.js @@ -4,7 +4,7 @@ import { choose } from 'lit/directives/choose.js'; import { when } from 'lit/directives/when.js'; import { join } from 'lit/directives/join.js'; -import { sleep, queryBackgroundColor, setThemeColor } from './helpers.js'; +import { queryBackgroundColor, setThemeColor } from './helpers.js'; import { getJourneys, getMoreJourneys, refreshJourneys, getFromPoint, getToPoint } from './app_functions.js'; import { formatPoint, formatDuration, formatPrice } from './formatters.js'; import { timeTemplate } from './templates.js';