[pim/kitinerary/release/26.08] src/lib/scripts: Add extractor script for HVV ical events
Volker Krause <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit d80b955a824f3afdf49fbc49dfcb37e506fb5c77 by Volker Krause.
Committed on 16/07/2026 at 16:05.
Pushed by vkrause into branch 'release/26.08'.
Add extractor script for HVV ical events
(cherry picked from commit 3b471245d927f92fc337ce3c35537a96c935447a)
M +2 -0 src/lib/scripts/extractors.qrc
A +37 -0 src/lib/scripts/hvv.js
A +13 -0 src/lib/scripts/hvv.json
https://invent.kde.org/pim/kitinerary/-/commit/d80b955a824f3afdf49fbc49dfcb37e506fb5c77
diff --git a/src/lib/scripts/extractors.qrc b/src/lib/scripts/extractors.qrc
index c31f0db3..be7b94c0 100644
--- a/src/lib/scripts/extractors.qrc
+++ b/src/lib/scripts/extractors.qrc
@@ -216,6 +216,8 @@
<file>hostelworld.js</file>
<file>hotels.com.json</file>
<file>hotels.com.js</file>
+ <file>hvv.json</file>
+ <file>hvv.js</file>
<file>iberia.json</file>
<file>iberia.js</file>
<file>impfzentrum_bayern.json</file>
diff --git a/src/lib/scripts/hvv.js b/src/lib/scripts/hvv.js
new file mode 100644
index 00000000..5f015b07
--- /dev/null
+++ b/src/lib/scripts/hvv.js
@@ -0,0 +1,37 @@
+// SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+function extractPlatform(s)
+{
+ const p = s ? s.match(/Gleis (.*)/) : undefined;
+ return p ? p[1] : undefined;
+}
+
+function extractEvent(ev) {
+ let reservations = [];
+ let idx = 0;
+ while (true) {
+ const leg = ev.description.substr(idx).match(/\) (.*) ➔ (.*)\nAb (\d\d:\d\d) (.*?)(?: \((.*)\))?\nAn (\d\d:\d\d) (.*?)(?: \((.*)\))?\n/);
+ if (!leg)
+ break;
+ idx += leg.index + leg[0].length;
+ let res = JsonLd.newTrainReservation();
+ res.reservationFor.trainNumber = leg[1];
+ res.reservationFor.departureDay = ev.dtStart;
+ res.reservationFor.departureTime = leg[3];
+ res.reservationFor.departureStation.name = leg[4];
+ res.reservationFor.departurePlatform = extractPlatform(leg[5]);
+ res.reservationFor.arrivalTime = leg[6];
+ res.reservationFor.arrivalStation.name = leg[7];
+ res.reservationFor.arrivalPlatform = extractPlatform(leg[8]);
+
+ const busNum = leg[1].match(/(.*) \(Bus\)/);
+ if (busNum) {
+ res.reservationFor.trainNumber = busNum[1];
+ res = JsonLd.trainToBusReservation(res);
+ }
+
+ reservations.push(res);
+ }
+ return reservations;
+}
diff --git a/src/lib/scripts/hvv.json b/src/lib/scripts/hvv.json
new file mode 100644
index 00000000..e063ea29
--- /dev/null
+++ b/src/lib/scripts/hvv.json
@@ -0,0 +1,13 @@
+{
+ "filter": [
+ {
+ "field": "description",
+ "match": "https://geofox\\.hvv\\.de/",
+ "mimeType": "internal/event",
+ "scope": "Current"
+ }
+ ],
+ "function": "extractEvent",
+ "mimeType": "internal/event",
+ "script": "hvv.js"
+}