katja's git: oeffisearch

fast and simple tripplanner

commit 8bde1ff49f98fd2f6c886902b5f4d63f30aaa26a
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(-)
M
src/coach-sequence/DBMapping.js
|
10
++++------
M
src/coach-sequence/index.js
|
36
+++++++++++++++++-------------------
M
src/journeysCanvas.js
|
7
+++++--
M
src/journeysView.js
|
2
+-
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';