Bug#1107942: unblock: kpublictransport/25.04.2-1
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: kpublictransport@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:kpublictransport
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear Release Team,
please unblock package kpublictransport.
[ Reason ]
It contains the following changes:
* New upstream release (25.04.1).
- Treat neither a positive nor a negative cache hit as missing backend.
- Adapt test data to different storage format in 25.04.
- Fix ÖBB onboard API journey data parsing and extract track information.
- Add QML module dependency information.
- Fix MOTIS v2 admin area parsing.
* New upstream release (25.04.2).
- Fix OTP arrival platform parsing.
- Fix parsing of EFA operator names.
- Continue backend search until we find at least one that covers both
sides.
- Consider all higher coverage types as well for journey coverage checks.
- Make line asset loading also work for stopovers without coordinates.
- Retain trip identifiers in DB trip queries.
- Add onboard API support for Ouigo ES.
- Check type before reading a numeric JSON value.
- Include Estonia in DB's coverage area. (kde#504042)
- Make mode filters work on the bwegt EFA endpoint.
The complete debdiff includes a lot of json data and translations so I’m
attaching a simple diff trimmed down from these for your convenience:
diff -ur --exclude=po --exclude=*.json --exclude=*.geojson kpublictransport-25.04.[02]
[ Tests ]
- Upstream test suite passes in sbuild.
[ Risks ]
Upstream point releases only contain targetted commits. Further fixes
can easily be backported or the changes reverted.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
Thanks!
unblock kpublictransport/25.04.2-1
diff -Nru kpublictransport-25.04.0/autotests/data/motis2/location-addresses.in.json kpublictransport-25.04.2/autotests/data/motis2/location-addresses.in.json
--- kpublictransport-25.04.0/autotests/data/motis2/location-addresses.in.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/motis2/location-addresses.in.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1 @@
+[{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.15267522E1,"lon":5.0755676E0,"street":"Guido Gezellelaan","houseNumber":"106","areas":[{"name":"Netherlands","adminLevel":2E0,"matched":false,"default":false},{"name":"Netherlands","adminLevel":3E0,"matched":false,"default":false},{"name":"North Brabant","adminLevel":4E0,"matched":false,"default":false},{"name":"Goirle","adminLevel":8E0,"matched":false,"default":true},{"name":"Goirle","adminLevel":1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.09369449E1,"lon":3.1515325E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"8800","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"West Flanders","adminLevel":6E0,"matched":false,"default":false},{"name":"Roeselare","adminLevel":7E0,"matched":false,"default":false},{"name":"Roeselare","adminLevel":8E0,"matched":false,"default":true},{"name":"Rumbeke","adminLevel":9E0,"matched":false,"default":false},{"name":"8800","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.08029964E1,"lon":3.1099533E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"8930","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"West Flanders","adminLevel":6E0,"matched":false,"default":false},{"name":"Kortrijk","adminLevel":7E0,"matched":false,"default":false},{"name":"Menin","adminLevel":8E0,"matched":false,"default":true},{"name":"Menin","adminLevel":9E0,"matched":false,"default":false},{"name":"8930","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.11760485E1,"lon":4.4460617E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"2640","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"Antwerp","adminLevel":6E0,"matched":false,"default":false},{"name":"Antwerp","adminLevel":7E0,"matched":false,"default":false},{"name":"Mortsel","adminLevel":8E0,"matched":false,"default":true},{"name":"2640","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.08356444E1,"lon":3.2374619E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"8501","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"West Flanders","adminLevel":6E0,"matched":false,"default":false},{"name":"Kortrijk","adminLevel":7E0,"matched":false,"default":false},{"name":"Kortrijk","adminLevel":8E0,"matched":false,"default":true},{"name":"Heule","adminLevel":9E0,"matched":false,"default":false},{"name":"8501","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.10298863E1,"lon":5.2735448E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"3550","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"Limburg","adminLevel":6E0,"matched":false,"default":false},{"name":"Hasselt","adminLevel":7E0,"matched":false,"default":false},{"name":"Heusden-Zolder","adminLevel":8E0,"matched":false,"default":true},{"name":"Heusden","adminLevel":9E0,"matched":false,"default":false},{"name":"3550","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.23460099E1,"lon":5.6386994E0,"street":"Guido Gezellelaan","houseNumber":"106","areas":[{"name":"Netherlands","adminLevel":2E0,"matched":false,"default":false},{"name":"Netherlands","adminLevel":3E0,"matched":false,"default":false},{"name":"Gelderland","adminLevel":4E0,"matched":false,"default":false},{"name":"Harderwijk","adminLevel":8E0,"matched":false,"default":true},{"name":"Harderwijk","adminLevel":1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.22800496E1,"lon":4.5847613E0,"street":"Guido Gezellelaan","houseNumber":"106","areas":[{"name":"Netherlands","adminLevel":2E0,"matched":false,"default":false},{"name":"Netherlands","adminLevel":3E0,"matched":false,"default":false},{"name":"South Holland","adminLevel":4E0,"matched":false,"default":false},{"name":"Hillegom","adminLevel":8E0,"matched":false,"default":true},{"name":"Hillegom","adminLevel":1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.09813402E1,"lon":3.5336731E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"9800","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"East Flanders","adminLevel":6E0,"matched":false,"default":false},{"name":"Gent","adminLevel":7E0,"matched":false,"default":false},{"name":"Deinze","adminLevel":8E0,"matched":false,"default":true},{"name":"Deinze","adminLevel":9E0,"matched":false,"default":false},{"name":"9800","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0},{"type":"ADDRESS","tokens":[[0E0,5E0],[6E0,1.1E1],[1.8E1,3E0]],"name":"Guido Gezellelaan 106","id":"","lat":5.10741563E1,"lon":4.2911523E0,"street":"Guido Gezellelaan","houseNumber":"106","zip":"2870","areas":[{"name":"Belgium","adminLevel":2E0,"matched":false,"default":false},{"name":"Flanders","adminLevel":4E0,"matched":false,"default":false},{"name":"Antwerp","adminLevel":6E0,"matched":false,"default":false},{"name":"Mechelen","adminLevel":7E0,"matched":false,"default":false},{"name":"Puurs-Sint-Amands","adminLevel":8E0,"matched":false,"default":true},{"name":"Puurs","adminLevel":9E0,"matched":false,"default":false},{"name":"2870","adminLevel":1.1E1,"matched":false,"default":false}],"score":-7.5E0}]
diff -Nru kpublictransport-25.04.0/autotests/data/motis2/location-addresses.out.json kpublictransport-25.04.2/autotests/data/motis2/location-addresses.out.json
--- kpublictransport-25.04.0/autotests/data/motis2/location-addresses.out.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/motis2/location-addresses.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1,105 @@
+[
+ {
+ "country": "NL",
+ "latitude": 51.5267522,
+ "locality": "Goirle",
+ "longitude": 5.0755676,
+ "name": "Guido Gezellelaan 106",
+ "region": "NL-NB",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "BE",
+ "latitude": 50.9369449,
+ "locality": "Roeselare",
+ "longitude": 3.1515325,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "8800",
+ "region": "BE-VLG",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "latitude": 50.8029964,
+ "locality": "Menin",
+ "longitude": 3.1099533,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "8930",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "BE",
+ "latitude": 51.1760485,
+ "locality": "Mortsel",
+ "longitude": 4.4460617,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "2640",
+ "region": "BE-VLG",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "BE",
+ "latitude": 50.8356444,
+ "locality": "Kortrijk",
+ "longitude": 3.2374619,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "8501",
+ "region": "BE-VLG",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "BE",
+ "latitude": 51.0298863,
+ "locality": "Heusden-Zolder",
+ "longitude": 5.2735448,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "3550",
+ "region": "BE-VLG",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "NL",
+ "latitude": 52.3460099,
+ "locality": "Harderwijk",
+ "longitude": 5.6386994,
+ "name": "Guido Gezellelaan 106",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "NL",
+ "latitude": 52.2800496,
+ "locality": "Hillegom",
+ "longitude": 4.5847613,
+ "name": "Guido Gezellelaan 106",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "BE",
+ "latitude": 50.9813402,
+ "locality": "Deinze",
+ "longitude": 3.5336731,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "9800",
+ "region": "BE-VLG",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ },
+ {
+ "country": "BE",
+ "latitude": 51.0741563,
+ "locality": "Puurs-Sint-Amands",
+ "longitude": 4.2911523,
+ "name": "Guido Gezellelaan 106",
+ "postalCode": "2870",
+ "region": "BE-VLG",
+ "streetAddress": "Guido Gezellelaan 106",
+ "type": "Address"
+ }
+]
diff -Nru kpublictransport-25.04.0/autotests/data/motis2/location-geo-search.out.json kpublictransport-25.04.2/autotests/data/motis2/location-geo-search.out.json
--- kpublictransport-25.04.0/autotests/data/motis2/location-geo-search.out.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/data/motis2/location-geo-search.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -6,6 +6,7 @@
"motis": "ch-opentransportdataswiss_Parent8023179"
},
"latitude": 51.345474,
+ "locality": "Mitte",
"longitude": 12.382064,
"name": "Leipzig Hbf",
"postalCode": "04109",
@@ -20,6 +21,7 @@
"motis": "ch-opentransportdataswiss_Parent8023179"
},
"latitude": 51.345474,
+ "locality": "Mitte",
"longitude": 12.382064,
"name": "Leipzig Hbf",
"postalCode": "04109",
@@ -34,6 +36,7 @@
"motis": "node/3575061420"
},
"latitude": 51.3450271,
+ "locality": "Mitte",
"longitude": 12.3817197,
"name": "Deutsche Bahn",
"postalCode": "04109",
@@ -47,6 +50,7 @@
"motis": "node/3575061421"
},
"latitude": 51.3450365,
+ "locality": "Mitte",
"longitude": 12.3816896,
"name": "Deutsche Bahn",
"postalCode": "04109",
@@ -60,6 +64,7 @@
"motis": "node/2202309900"
},
"latitude": 51.3448745,
+ "locality": "Mitte",
"longitude": 12.3819165,
"name": "Deutsche Bahn",
"postalCode": "04109",
@@ -73,6 +78,7 @@
"motis": "node/6510099866"
},
"latitude": 51.3449263,
+ "locality": "Mitte",
"longitude": 12.3815594,
"name": "Thüringer Grill",
"postalCode": "04109",
@@ -86,6 +92,7 @@
"motis": "node/2140362880"
},
"latitude": 51.3452195,
+ "locality": "Mitte",
"longitude": 12.3811144,
"name": "Deutsche Bahn",
"postalCode": "04109",
@@ -99,6 +106,7 @@
"motis": "node/6510099867"
},
"latitude": 51.3450387,
+ "locality": "Mitte",
"longitude": 12.3812945,
"name": "Crepes-Express",
"postalCode": "04109",
@@ -112,6 +120,7 @@
"motis": "node/2140362881"
},
"latitude": 51.3452333,
+ "locality": "Mitte",
"longitude": 12.3810763,
"name": "Deutsche Bahn",
"postalCode": "04109",
@@ -125,6 +134,7 @@
"motis": "node/6510099869"
},
"latitude": 51.344935,
+ "locality": "Mitte",
"longitude": 12.3814312,
"name": "Bäcker Lukas",
"postalCode": "04109",
diff -Nru kpublictransport-25.04.0/autotests/data/motis2/location-name-search.out.json kpublictransport-25.04.2/autotests/data/motis2/location-name-search.out.json
--- kpublictransport-25.04.0/autotests/data/motis2/location-name-search.out.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/data/motis2/location-name-search.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -6,6 +6,7 @@
"motis": "ch-opentransportdataswiss_Parent8014228"
},
"latitude": 48.993515,
+ "locality": "Südweststadt",
"longitude": 8.402185,
"name": "Karlsruhe Hbf",
"postalCode": "76137",
@@ -19,6 +20,7 @@
"motis": "ch-opentransportdataswiss_Parent8014228"
},
"latitude": 48.993515,
+ "locality": "Südweststadt",
"longitude": 8.402185,
"name": "Karlsruhe Hbf",
"postalCode": "76137",
@@ -32,6 +34,7 @@
"motis": "ch-opentransportdataswiss_Parent8014228"
},
"latitude": 48.993515,
+ "locality": "Südweststadt",
"longitude": 8.402185,
"name": "Karlsruhe Hbf",
"postalCode": "76137",
@@ -45,6 +48,7 @@
"motis": "ch-opentransportdataswiss_Parent8014228"
},
"latitude": 48.993515,
+ "locality": "Südweststadt",
"longitude": 8.402185,
"name": "Karlsruhe Hbf",
"postalCode": "76137",
@@ -70,6 +74,7 @@
"motis": "node/5876433289"
},
"latitude": 49.0053102,
+ "locality": "Daxlanden",
"longitude": 8.3335171,
"name": "Karlsruher Hof",
"postalCode": "76189",
@@ -82,6 +87,7 @@
"motis": "way/483431081"
},
"latitude": 52.7029911,
+ "locality": "Oberkrämer",
"longitude": 13.1329952,
"name": "Karlsruher Feld",
"postalCode": "16727",
@@ -95,6 +101,7 @@
"motis": "way/137200489"
},
"latitude": 52.7017056,
+ "locality": "Oberkrämer",
"longitude": 13.1108933,
"name": "Karlsruher Feld",
"postalCode": "16727",
@@ -108,6 +115,7 @@
"motis": "way/483431086"
},
"latitude": 52.7055211,
+ "locality": "Oberkrämer",
"longitude": 13.1184815,
"name": "Karlsruher Feld",
"postalCode": "16727",
@@ -121,6 +129,7 @@
"motis": "way/483431082"
},
"latitude": 52.7021982,
+ "locality": "Oberkrämer",
"longitude": 13.122589,
"name": "Karlsruher Feld",
"postalCode": "16727",
diff -Nru kpublictransport-25.04.0/autotests/data/onboard-journey/oebb-railnet-tracks.in.json kpublictransport-25.04.2/autotests/data/onboard-journey/oebb-railnet-tracks.in.json
--- kpublictransport-25.04.0/autotests/data/onboard-journey/oebb-railnet-tracks.in.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/onboard-journey/oebb-railnet-tracks.in.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1 @@
+{"lineNumber":"633","tripNumber":"633","trainType":"RJ","won":"2","startStation":"Wien Hbf","destination":{"all":"Villach Hbf","de":"Villach Hbf"},"stations":[{"id":"8103000","name":{"de":"Wien Hbf"},"track":{"de":"5A-B"},"departure":{"scheduled":"18:24","forecast":"19:19"},"arrival":{"scheduled":"","forecast":null},"exitSide":null,"distanceFromPrevious":null,"connections":null},{"id":"8100514","name":{"de":"Wien Meidling"},"track":{"de":"5"},"departure":{"scheduled":"18:31","forecast":"19:29"},"arrival":{"scheduled":"18:29","forecast":"19:27"},"exitSide":null,"distanceFromPrevious":3437,"connections":null},{"id":"8100516","name":{"de":"Wiener Neustadt Hbf"},"track":{"de":"4"},"departure":{"scheduled":"18:56","forecast":"20:05"},"arrival":{"scheduled":"18:54","forecast":"20:02"},"exitSide":null,"distanceFromPrevious":44681,"connections":null},{"id":"8100032","name":{"de":"Bruck\/Mur"},"track":{"de":"1"},"departure":{"scheduled":"20:15","forecast":"21:25"},"arrival":{"scheduled":"20:13","forecast":"21:24"},"exitSide":null,"distanceFromPrevious":109685,"connections":[{"type":"EC","lineNumber":"219","track":{"de":"3"},"destination":{"de":"Graz Hbf"},"departure":{"scheduled":"21:50","forecast":"21:50"},"reachable":"yes","comment":null},{"type":"D","lineNumber":"852","track":{"de":"2"},"destination":{"de":"Wien Hbf"},"departure":{"scheduled":"22:03","forecast":"22:03"},"reachable":"yes","comment":null},{"type":"REX","lineNumber":"4587","track":{"de":"1"},"destination":{"de":"Unzmarkt Bahnhof"},"departure":{"scheduled":"22:06","forecast":"22:06"},"reachable":"yes","comment":null},{"type":"S","lineNumber":"9","track":{"de":"3D-F"},"destination":{"de":"M\u00fcrzzuschlag Bahnhof"},"departure":{"scheduled":"22:08","forecast":"22:08"},"reachable":"yes","comment":null}]},{"id":"8100070","name":{"de":"Leoben Hbf"},"track":{"de":"3"},"departure":{"scheduled":"20:26","forecast":"21:36"},"arrival":{"scheduled":"20:24","forecast":"21:34"},"exitSide":null,"distanceFromPrevious":16491,"connections":null},{"id":"8100072","name":{"de":"Knittelfeld"},"track":{"de":"2"},"departure":{"scheduled":"20:47","forecast":"21:55"},"arrival":{"scheduled":"20:45","forecast":"21:53"},"exitSide":null,"distanceFromPrevious":30209,"connections":null},{"id":"8100073","name":{"de":"Judenburg"},"track":{"de":"3"},"departure":{"scheduled":"20:59","forecast":"22:07"},"arrival":{"scheduled":"20:58","forecast":"22:05"},"exitSide":null,"distanceFromPrevious":15076,"connections":null},{"id":"8100074","name":{"de":"Unzmarkt"},"track":{"de":"3"},"departure":{"scheduled":"21:13","forecast":"22:20"},"arrival":{"scheduled":"21:12","forecast":"22:19"},"exitSide":null,"distanceFromPrevious":18935,"connections":null},{"id":"8100096","name":{"de":"Treibach-Althofen"},"track":{"de":"2"},"departure":{"scheduled":"21:51","forecast":"22:56"},"arrival":{"scheduled":"21:49","forecast":"22:55"},"exitSide":null,"distanceFromPrevious":47367,"connections":null},{"id":"8100078","name":{"de":"St. Veit\/Glan"},"track":{"de":"3"},"departure":{"scheduled":"22:08","forecast":"23:13"},"arrival":{"scheduled":"22:06","forecast":"23:11"},"exitSide":null,"distanceFromPrevious":21880,"connections":null},{"id":"8100085","name":{"de":"Klagenfurt Hbf"},"track":{"de":"1"},"departure":{"scheduled":"22:21","forecast":"23:25"},"arrival":{"scheduled":"22:19","forecast":"23:23"},"exitSide":null,"distanceFromPrevious":20072,"connections":null},{"id":"8100081","name":{"de":"Velden am W\u00f6rthersee"},"track":{"de":"2"},"departure":{"scheduled":"22:36","forecast":"23:38"},"arrival":{"scheduled":"22:34","forecast":"23:37"},"exitSide":null,"distanceFromPrevious":22002,"connections":null},{"id":"8100147","name":{"de":"Villach Hbf"},"track":{"de":"7"},"departure":{"scheduled":"","forecast":null},"arrival":{"scheduled":"22:46","forecast":"23:47"},"exitSide":null,"distanceFromPrevious":16381,"connections":null}],"latestStatus":{"dateTime":"2025-04-22T20:40:40+0200","situation":{"type":"drive-to","station":"8100032"},"gpsPosition":{"latitude":"47.658528","longitude":"15.816061","orientation":"253.640"},"speed":60,"distance":{"meters":49892,"fromStation":"8100516"},"totalDelay":4260,"comment":null},"currentStation":{"id":"8100516","name":{"de":"Wiener Neustadt Hbf"},"track":{"de":"4"},"departure":{"scheduled":"18:56","forecast":"20:05"},"arrival":{"scheduled":"18:54","forecast":"20:02"},"exitSide":null,"distanceFromPrevious":44681,"connections":null},"nextStation":{"id":"8100032","name":{"de":"Bruck\/Mur"},"track":{"de":"1"},"departure":{"scheduled":"20:15","forecast":"21:25"},"arrival":{"scheduled":"20:13","forecast":"21:24"},"exitSide":null,"distanceFromPrevious":109685,"connections":[{"type":"EC","lineNumber":"219","track":{"de":"3"},"destination":{"de":"Graz Hbf"},"departure":{"scheduled":"21:50","forecast":"21:50"},"reachable":"yes","comment":null},{"type":"D","lineNumber":"852","track":{"de":"2"},"destination":{"de":"Wien Hbf"},"departure":{"scheduled":"22:03","forecast":"22:03"},"reachable":"yes","comment":null},{"type":"REX","lineNumber":"4587","track":{"de":"1"},"destination":{"de":"Unzmarkt Bahnhof"},"departure":{"scheduled":"22:06","forecast":"22:06"},"reachable":"yes","comment":null},{"type":"S","lineNumber":"9","track":{"de":"3D-F"},"destination":{"de":"M\u00fcrzzuschlag Bahnhof"},"departure":{"scheduled":"22:08","forecast":"22:08"},"reachable":"yes","comment":null}]},"nextStationProgress":45}
diff -Nru kpublictransport-25.04.0/autotests/data/onboard-journey/oebb-railnet-tracks.out.json kpublictransport-25.04.2/autotests/data/onboard-journey/oebb-railnet-tracks.out.json
--- kpublictransport-25.04.0/autotests/data/onboard-journey/oebb-railnet-tracks.out.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/onboard-journey/oebb-railnet-tracks.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1,201 @@
+{
+ "sections": [
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalPlatform": "7",
+ "expectedArrivalTime": "2025-04-22T23:47:00",
+ "expectedDeparturePlatform": "5A-B",
+ "expectedDepartureTime": "2025-04-22T19:19:00",
+ "from": {
+ "identifier": {
+ "ibnr": "8103000"
+ },
+ "name": "Wien Hbf",
+ "type": "Stop"
+ },
+ "intermediateStops": [
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T19:27:00",
+ "expectedDepartureTime": "2025-04-22T19:29:00",
+ "expectedPlatform": "5",
+ "scheduledArrivalTime": "2025-04-22T18:29:00",
+ "scheduledDepartureTime": "2025-04-22T18:31:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100514"
+ },
+ "name": "Wien Meidling",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T20:02:00",
+ "expectedDepartureTime": "2025-04-22T20:05:00",
+ "expectedPlatform": "4",
+ "scheduledArrivalTime": "2025-04-22T18:54:00",
+ "scheduledDepartureTime": "2025-04-22T18:56:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100516"
+ },
+ "name": "Wiener Neustadt Hbf",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T21:24:00",
+ "expectedDepartureTime": "2025-04-22T21:25:00",
+ "expectedPlatform": "1",
+ "scheduledArrivalTime": "2025-04-22T20:13:00",
+ "scheduledDepartureTime": "2025-04-22T20:15:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100032"
+ },
+ "name": "Bruck/Mur",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T21:34:00",
+ "expectedDepartureTime": "2025-04-22T21:36:00",
+ "expectedPlatform": "3",
+ "scheduledArrivalTime": "2025-04-22T20:24:00",
+ "scheduledDepartureTime": "2025-04-22T20:26:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100070"
+ },
+ "name": "Leoben Hbf",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T21:53:00",
+ "expectedDepartureTime": "2025-04-22T21:55:00",
+ "expectedPlatform": "2",
+ "scheduledArrivalTime": "2025-04-22T20:45:00",
+ "scheduledDepartureTime": "2025-04-22T20:47:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100072"
+ },
+ "name": "Knittelfeld",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T22:05:00",
+ "expectedDepartureTime": "2025-04-22T22:07:00",
+ "expectedPlatform": "3",
+ "scheduledArrivalTime": "2025-04-22T20:58:00",
+ "scheduledDepartureTime": "2025-04-22T20:59:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100073"
+ },
+ "name": "Judenburg",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T22:19:00",
+ "expectedDepartureTime": "2025-04-22T22:20:00",
+ "expectedPlatform": "3",
+ "scheduledArrivalTime": "2025-04-22T21:12:00",
+ "scheduledDepartureTime": "2025-04-22T21:13:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100074"
+ },
+ "name": "Unzmarkt",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T22:55:00",
+ "expectedDepartureTime": "2025-04-22T22:56:00",
+ "expectedPlatform": "2",
+ "scheduledArrivalTime": "2025-04-22T21:49:00",
+ "scheduledDepartureTime": "2025-04-22T21:51:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100096"
+ },
+ "name": "Treibach-Althofen",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T23:11:00",
+ "expectedDepartureTime": "2025-04-22T23:13:00",
+ "expectedPlatform": "3",
+ "scheduledArrivalTime": "2025-04-22T22:06:00",
+ "scheduledDepartureTime": "2025-04-22T22:08:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100078"
+ },
+ "name": "St. Veit/Glan",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T23:23:00",
+ "expectedDepartureTime": "2025-04-22T23:25:00",
+ "expectedPlatform": "1",
+ "scheduledArrivalTime": "2025-04-22T22:19:00",
+ "scheduledDepartureTime": "2025-04-22T22:21:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100085"
+ },
+ "name": "Klagenfurt Hbf",
+ "type": "Stop"
+ }
+ },
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-04-22T23:37:00",
+ "expectedDepartureTime": "2025-04-22T23:38:00",
+ "expectedPlatform": "2",
+ "scheduledArrivalTime": "2025-04-22T22:34:00",
+ "scheduledDepartureTime": "2025-04-22T22:36:00",
+ "stopPoint": {
+ "identifier": {
+ "ibnr": "8100081"
+ },
+ "name": "Velden am Wörthersee",
+ "type": "Stop"
+ }
+ }
+ ],
+ "mode": "PublicTransport",
+ "route": {
+ "line": {
+ "mode": "LongDistanceTrain",
+ "name": "RJ 633"
+ }
+ },
+ "scheduledArrivalTime": "2025-04-22T22:46:00",
+ "scheduledDepartureTime": "2025-04-22T18:24:00",
+ "to": {
+ "identifier": {
+ "ibnr": "8100147"
+ },
+ "name": "Villach Hbf",
+ "type": "Stop"
+ }
+ }
+ ]
+}
diff -Nru kpublictransport-25.04.0/autotests/data/onboard-journey/ouigo-es.in.json kpublictransport-25.04.2/autotests/data/onboard-journey/ouigo-es.in.json
--- kpublictransport-25.04.0/autotests/data/onboard-journey/ouigo-es.in.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/onboard-journey/ouigo-es.in.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1 @@
+{"commercialId":"06470","codeCirculation":"71801-60000","distance":627.945,"stations":[{"name":"BARCELONA-SANTS","rank":1,"code":"71801","departAt":"2025-05-11T06:25:00+02:00","arrivalAt":null,"theoricalDepartTime":"2025-05-11T06:25:00+02:00","theoricalArrivalTime":null,"coords":{"coordXLng":2.1394773,"coordYLat":41.379335,"type":"WGS84"}},{"name":"ZARAGOZA-DELICIAS","rank":31,"code":"04040","departAt":"2025-05-11T07:51:00+02:00","arrivalAt":"2025-05-11T07:48:00+02:00","theoricalDepartTime":"2025-05-11T07:51:00+02:00","theoricalArrivalTime":"2025-05-11T07:48:00+02:00","coords":{"coordXLng":null,"coordYLat":null,"type":"WGS84"}},{"name":"MADRID-P.ATOCHA-ALMUDENA GRANDES","rank":57,"code":"60000","departAt":null,"arrivalAt":"2025-05-11T09:17:00+02:00","theoricalDepartTime":null,"theoricalArrivalTime":"2025-05-11T09:17:00+02:00","coords":{"coordXLng":-3.6895915,"coordYLat":40.4053548,"type":"WGS84"}}],"path":[{"longitude":2.114931667,"latitude":41.347183333},{"longitude":2.11427,"latitude":41.34149},{"longitude":2.113211667,"latitude":41.339381667},{"longitude":2.098121667,"latitude":41.333598333},{"longitude":2.05653,"latitude":41.33894},{"longitude":2.055688333,"latitude":41.347643333},{"longitude":2.052683333,"latitude":41.352723333},{"longitude":2.043811667,"latitude":41.362456667},{"longitude":2.035668333,"latitude":41.368218333},{"longitude":2.032016667,"latitude":41.371831667},{"longitude":2.027041667,"latitude":41.378195},{"longitude":2.019986667,"latitude":41.389961667},{"longitude":2.004876667,"latitude":41.418816667},{"longitude":2.002036667,"latitude":41.43155},{"longitude":2.00002,"latitude":41.436393333},{"longitude":1.996546667,"latitude":41.440693333},{"longitude":1.989565,"latitude":41.446318333},{"longitude":1.98374,"latitude":41.452691667},{"longitude":1.978441667,"latitude":41.462631667},{"longitude":1.973223333,"latitude":41.469736667},{"longitude":1.965351667,"latitude":41.475105},{"longitude":1.945948333,"latitude":41.481265},{"longitude":1.927555,"latitude":41.483076667},{"longitude":1.904416667,"latitude":41.484075},{"longitude":1.893826667,"latitude":41.482116667},{"longitude":1.875806667,"latitude":41.473725},{"longitude":1.861266667,"latitude":41.462718333},{"longitude":1.84614,"latitude":41.453255},{"longitude":1.815068333,"latitude":41.429423333},{"longitude":1.781368333,"latitude":41.41182},{"longitude":1.737838333,"latitude":41.382495},{"longitude":1.728466667,"latitude":41.374138333},{"longitude":1.697356667,"latitude":41.337293333},{"longitude":1.689711667,"latitude":41.330155},{"longitude":1.68026,"latitude":41.324086667},{"longitude":1.657668333,"latitude":41.31304},{"longitude":1.622995,"latitude":41.292685},{"longitude":1.567343333,"latitude":41.246145},{"longitude":1.560125,"latitude":41.2411},{"longitude":1.547781667,"latitude":41.23499},{"longitude":1.523825,"latitude":41.226591667},{"longitude":1.51739,"latitude":41.223241667},{"longitude":1.495836667,"latitude":41.208771667},{"longitude":1.475958333,"latitude":41.199161667},{"longitude":1.470151667,"latitude":41.198938333},{"longitude":1.410985,"latitude":41.18076},{"longitude":1.382193333,"latitude":41.177575},{"longitude":1.362693333,"latitude":41.177708333},{"longitude":1.353133333,"latitude":41.179},{"longitude":1.325255,"latitude":41.185078333},{"longitude":1.289523333,"latitude":41.189008333},{"longitude":1.249358333,"latitude":41.196391667},{"longitude":1.240698333,"latitude":41.199241667},{"longitude":1.228716667,"latitude":41.20493},{"longitude":1.218173333,"latitude":41.211988333},{"longitude":1.209281667,"latitude":41.220241667},{"longitude":1.202266667,"latitude":41.229491667},{"longitude":1.193043333,"latitude":41.245715},{"longitude":1.189806667,"latitude":41.25618},{"longitude":1.186765,"latitude":41.274448333},{"longitude":1.18539,"latitude":41.29482},{"longitude":1.186395,"latitude":41.313505},{"longitude":1.189305,"latitude":41.32277},{"longitude":1.193371667,"latitude":41.342171667},{"longitude":1.192833333,"latitude":41.350586667},{"longitude":1.19091,"latitude":41.358428333},{"longitude":1.186251667,"latitude":41.368308333},{"longitude":1.179088333,"latitude":41.37789},{"longitude":1.16982,"latitude":41.386313333},{"longitude":1.158543333,"latitude":41.393453333},{"longitude":1.146255,"latitude":41.398765},{"longitude":1.129291667,"latitude":41.403051667},{"longitude":1.116885,"latitude":41.404331667},{"longitude":1.047056667,"latitude":41.406881667},{"longitude":1.012438333,"latitude":41.412495},{"longitude":0.984966667,"latitude":41.415273333},{"longitude":0.974278333,"latitude":41.417725},{"longitude":0.963996667,"latitude":41.421235},{"longitude":0.931735,"latitude":41.435686667},{"longitude":0.91679,"latitude":41.444485},{"longitude":0.900998333,"latitude":41.45677},{"longitude":0.87748,"latitude":41.483191667},{"longitude":0.869048333,"latitude":41.490583333},{"longitude":0.85843,"latitude":41.497518333},{"longitude":0.827031667,"latitude":41.515541667},{"longitude":0.765103333,"latitude":41.545396667},{"longitude":0.747843333,"latitude":41.55242},{"longitude":0.734251667,"latitude":41.55657},{"longitude":0.705783333,"latitude":41.563376667},{"longitude":0.672043333,"latitude":41.56879},{"longitude":0.648891667,"latitude":41.574753333},{"longitude":0.640015,"latitude":41.577991667},{"longitude":0.624163333,"latitude":41.586738333},{"longitude":0.589678333,"latitude":41.612635},{"longitude":0.57752,"latitude":41.618868333},{"longitude":0.564011667,"latitude":41.623091667},{"longitude":0.554358333,"latitude":41.62475},{"longitude":0.51524,"latitude":41.628671667},{"longitude":0.49173,"latitude":41.629313333},{"longitude":0.440066667,"latitude":41.625461667},{"longitude":0.406045,"latitude":41.6238},{"longitude":0.347606667,"latitude":41.615743333},{"longitude":0.327888333,"latitude":41.615788333},{"longitude":0.303566667,"latitude":41.61937},{"longitude":0.289866667,"latitude":41.620313333},{"longitude":0.274228333,"latitude":41.619326667},{"longitude":0.240383333,"latitude":41.614056667},{"longitude":0.222261667,"latitude":41.610021667},{"longitude":0.174388333,"latitude":41.593305},{"longitude":0.144355,"latitude":41.585993333},{"longitude":0.131186667,"latitude":41.581811667},{"longitude":0.088356667,"latitude":41.56445},{"longitude":0.080101667,"latitude":41.560301667},{"longitude":0.069046667,"latitude":41.552748333},{"longitude":0.052483333,"latitude":41.538803333},{"longitude":0.040676667,"latitude":41.532243333},{"longitude":0.027831667,"latitude":41.52754},{"longitude":0.009873333,"latitude":41.524145},{"longitude":-0.006003333,"latitude":41.523803333},{"longitude":-0.030476667,"latitude":41.526675},{"longitude":-0.055115,"latitude":41.528228333},{"longitude":-0.13655,"latitude":41.526243333},{"longitude":-0.219903333,"latitude":41.529263333},{"longitude":-0.309343333,"latitude":41.529705},{"longitude":-0.39218,"latitude":41.53547},{"longitude":-0.471231667,"latitude":41.536545},{"longitude":-0.533526667,"latitude":41.530046667},{"longitude":-0.54813,"latitude":41.527691667},{"longitude":-0.561716667,"latitude":41.523226667},{"longitude":-0.586511667,"latitude":41.512053333},{"longitude":-0.616766667,"latitude":41.501365},{"longitude":-0.630618333,"latitude":41.498373333},{"longitude":-0.644931667,"latitude":41.497506667},{"longitude":-0.663973333,"latitude":41.499746667},{"longitude":-0.677311667,"latitude":41.503873333},{"longitude":-0.685536667,"latitude":41.50773},{"longitude":-0.69666,"latitude":41.515215},{"longitude":-0.712333333,"latitude":41.52929},{"longitude":-0.723385,"latitude":41.536546667},{"longitude":-0.801128333,"latitude":41.575},{"longitude":-0.808768333,"latitude":41.579393333},{"longitude":-0.822976667,"latitude":41.589313333},{"longitude":-0.839378333,"latitude":41.597108333},{"longitude":-0.848466667,"latitude":41.599875},{"longitude":-0.862611667,"latitude":41.602426667},{"longitude":-0.886895,"latitude":41.603103333},{"longitude":-0.901553333,"latitude":41.604571667},{"longitude":-0.976468333,"latitude":41.619885},{"longitude":-1.002103333,"latitude":41.628908333},{"longitude":-1.037571667,"latitude":41.637153333},{"longitude":-1.049888333,"latitude":41.641346667},{"longitude":-1.111166667,"latitude":41.673148333},{"longitude":-1.13297,"latitude":41.681803333},{"longitude":-1.169816667,"latitude":41.692693333},{"longitude":-1.179323333,"latitude":41.694726667},{"longitude":-1.198971667,"latitude":41.696343333},{"longitude":-1.21849,"latitude":41.69461},{"longitude":-1.23242,"latitude":41.691218333},{"longitude":-1.249518333,"latitude":41.683991667},{"longitude":-1.284131667,"latitude":41.663526667},{"longitude":-1.290795,"latitude":41.658353333},{"longitude":-1.299023333,"latitude":41.649911667},{"longitude":-1.306793333,"latitude":41.637801667},{"longitude":-1.31043,"latitude":41.627805},{"longitude":-1.311923333,"latitude":41.617268333},{"longitude":-1.312133333,"latitude":41.599066667},{"longitude":-1.31496,"latitude":41.588306667},{"longitude":-1.320241667,"latitude":41.577896667},{"longitude":-1.329298333,"latitude":41.564648333},{"longitude":-1.334183333,"latitude":41.55822},{"longitude":-1.340133333,"latitude":41.552336667},{"longitude":-1.350523333,"latitude":41.54482},{"longitude":-1.366535,"latitude":41.537165},{"longitude":-1.492641667,"latitude":41.499828333},{"longitude":-1.505136667,"latitude":41.495035},{"longitude":-1.51626,"latitude":41.488808333},{"longitude":-1.525786667,"latitude":41.481581667},{"longitude":-1.541253333,"latitude":41.465391667},{"longitude":-1.547835,"latitude":41.456665},{"longitude":-1.552615,"latitude":41.447215},{"longitude":-1.554581667,"latitude":41.44055},{"longitude":-1.55742,"latitude":41.417291667},{"longitude":-1.586398333,"latitude":41.380115},{"longitude":-1.621636667,"latitude":41.35582},{"longitude":-1.656791667,"latitude":41.336323333},{"longitude":-1.665105,"latitude":41.332333333},{"longitude":-1.673928333,"latitude":41.329365},{"longitude":-1.74074,"latitude":41.31547},{"longitude":-1.759076667,"latitude":41.314366667},{"longitude":-1.786003333,"latitude":41.316226667},{"longitude":-1.79621,"latitude":41.31581},{"longitude":-1.833663333,"latitude":41.310705},{"longitude":-1.845185,"latitude":41.307398333},{"longitude":-1.871051667,"latitude":41.297305},{"longitude":-1.919795,"latitude":41.276505},{"longitude":-1.931178333,"latitude":41.269913333},{"longitude":-1.944588333,"latitude":41.259641667},{"longitude":-1.95185,"latitude":41.255056667},{"longitude":-1.968398333,"latitude":41.247703333},{"longitude":-2.015168333,"latitude":41.236475},{"longitude":-2.116743333,"latitude":41.21746},{"longitude":-2.134365,"latitude":41.210888333},{"longitude":-2.157745,"latitude":41.198331667},{"longitude":-2.204643333,"latitude":41.182348333},{"longitude":-2.218181667,"latitude":41.178891667},{"longitude":-2.251373333,"latitude":41.174531667},{"longitude":-2.268851667,"latitude":41.168991667},{"longitude":-2.310835,"latitude":41.147148333},{"longitude":-2.362935,"latitude":41.111218333},{"longitude":-2.403461667,"latitude":41.087126667},{"longitude":-2.41624,"latitude":41.075988333},{"longitude":-2.443756667,"latitude":41.042281667},{"longitude":-2.452626667,"latitude":41.034108333},{"longitude":-2.459685,"latitude":41.029106667},{"longitude":-2.60181,"latitude":40.950396667},{"longitude":-2.624661667,"latitude":40.936345},{"longitude":-2.649565,"latitude":40.924531667},{"longitude":-2.668318333,"latitude":40.912798333},{"longitude":-2.68471,"latitude":40.904746667},{"longitude":-2.765083333,"latitude":40.872971667},{"longitude":-2.858846667,"latitude":40.84163},{"longitude":-2.875425,"latitude":40.834055},{"longitude":-2.919458333,"latitude":40.804628333},{"longitude":-2.963945,"latitude":40.765123333},{"longitude":-2.977401667,"latitude":40.754488333},{"longitude":-3.026141667,"latitude":40.725086667},{"longitude":-3.039671667,"latitude":40.714486667},{"longitude":-3.045288333,"latitude":40.708455},{"longitude":-3.057553333,"latitude":40.692328333},{"longitude":-3.061485,"latitude":40.685491667},{"longitude":-3.078018333,"latitude":40.650491667},{"longitude":-3.102145,"latitude":40.610128333},{"longitude":-3.109411667,"latitude":40.60073},{"longitude":-3.118605,"latitude":40.592368333},{"longitude":-3.216793333,"latitude":40.51514},{"longitude":-3.222901667,"latitude":40.509326667},{"longitude":-3.236045,"latitude":40.493545},{"longitude":-3.242121667,"latitude":40.487713333},{"longitude":-3.248901667,"latitude":40.48244},{"longitude":-3.260423333,"latitude":40.475886667},{"longitude":-3.268933333,"latitude":40.472276667},{"longitude":-3.29998,"latitude":40.461585},{"longitude":-3.333496667,"latitude":40.447075},{"longitude":-3.357068333,"latitude":40.434016667},{"longitude":-3.370301667,"latitude":40.429353333},{"longitude":-3.384386667,"latitude":40.426476667},{"longitude":-3.394031667,"latitude":40.425593333},{"longitude":-3.422915,"latitude":40.426495},{"longitude":-3.44183,"latitude":40.424688333},{"longitude":-3.458956667,"latitude":40.42002},{"longitude":-3.49786,"latitude":40.403488333},{"longitude":-3.506411667,"latitude":40.401366667},{"longitude":-3.526403333,"latitude":40.398113333},{"longitude":-3.534358333,"latitude":40.395511667},{"longitude":-3.543455,"latitude":40.390685},{"longitude":-3.548376667,"latitude":40.386748333},{"longitude":-3.554208333,"latitude":40.37997},{"longitude":-3.559546667,"latitude":40.36981},{"longitude":-3.563101667,"latitude":40.364946667},{"longitude":-3.567625,"latitude":40.360528333},{"longitude":-3.58069,"latitude":40.351333333},{"longitude":-3.588878333,"latitude":40.346773333},{"longitude":-3.597466667,"latitude":40.34339},{"longitude":-3.629373333,"latitude":40.3357},{"longitude":-3.639193333,"latitude":40.335053333},{"longitude":-3.650695,"latitude":40.337515},{"longitude":-3.657601667,"latitude":40.341181667},{"longitude":-3.669283333,"latitude":40.351718333},{"longitude":-3.673593333,"latitude":40.358086667},{"longitude":-3.678408333,"latitude":40.370721667},{"longitude":-3.682025,"latitude":40.377773333},{"longitude":-3.680888333,"latitude":40.381893333},{"longitude":-3.67357,"latitude":40.389638333},{"longitude":-3.672926667,"latitude":40.392373333},{"longitude":-3.673631667,"latitude":40.395125},{"longitude":-3.677448333,"latitude":40.399638333},{"longitude":-3.686803333,"latitude":40.402866667},{"longitude":-3.689203333,"latitude":40.405026667}]}
diff -Nru kpublictransport-25.04.0/autotests/data/onboard-journey/ouigo-es.out.json kpublictransport-25.04.2/autotests/data/onboard-journey/ouigo-es.out.json
--- kpublictransport-25.04.0/autotests/data/onboard-journey/ouigo-es.out.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/onboard-journey/ouigo-es.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1,1193 @@
+{
+ "sections": [
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": {
+ "timezone": "Europe/Madrid",
+ "value": "2025-05-11T09:17:00+02:00"
+ },
+ "expectedDepartureTime": {
+ "timezone": "Europe/Madrid",
+ "value": "2025-05-11T06:25:00+02:00"
+ },
+ "from": {
+ "country": "ES",
+ "identifier": {
+ "uic": "7171801"
+ },
+ "latitude": 41.379335,
+ "longitude": 2.1394773,
+ "name": "BARCELONA-SANTS",
+ "region": "ES-CT",
+ "type": "Stop"
+ },
+ "intermediateStops": [
+ {
+ "disruptionEffect": "NormalService",
+ "expectedArrivalTime": "2025-05-11T07:48:00+02:00",
+ "expectedDepartureTime": "2025-05-11T07:51:00+02:00",
+ "scheduledArrivalTime": "2025-05-11T07:48:00+02:00",
+ "scheduledDepartureTime": "2025-05-11T07:51:00+02:00",
+ "stopPoint": {
+ "identifier": {
+ "uic": "7104040"
+ },
+ "latitude": 0,
+ "longitude": 0,
+ "name": "ZARAGOZA-DELICIAS",
+ "type": "Stop"
+ }
+ }
+ ],
+ "mode": "PublicTransport",
+ "path": {
+ "sections": [
+ {
+ "path": {
+ "coordinates": [
+ [
+ 2.114931667,
+ 41.347183333
+ ],
+ [
+ 2.11427,
+ 41.34149
+ ],
+ [
+ 2.113211667,
+ 41.339381667
+ ],
+ [
+ 2.098121667,
+ 41.333598333
+ ],
+ [
+ 2.05653,
+ 41.33894
+ ],
+ [
+ 2.055688333,
+ 41.347643333
+ ],
+ [
+ 2.052683333,
+ 41.352723333
+ ],
+ [
+ 2.043811667,
+ 41.362456667
+ ],
+ [
+ 2.035668333,
+ 41.368218333
+ ],
+ [
+ 2.032016667,
+ 41.371831667
+ ],
+ [
+ 2.027041667,
+ 41.378195
+ ],
+ [
+ 2.019986667,
+ 41.389961667
+ ],
+ [
+ 2.004876667,
+ 41.418816667
+ ],
+ [
+ 2.002036667,
+ 41.43155
+ ],
+ [
+ 2.00002,
+ 41.436393333
+ ],
+ [
+ 1.996546667,
+ 41.440693333
+ ],
+ [
+ 1.989565,
+ 41.446318333
+ ],
+ [
+ 1.98374,
+ 41.452691667
+ ],
+ [
+ 1.978441667,
+ 41.462631667
+ ],
+ [
+ 1.973223333,
+ 41.469736667
+ ],
+ [
+ 1.965351667,
+ 41.475105
+ ],
+ [
+ 1.945948333,
+ 41.481265
+ ],
+ [
+ 1.927555,
+ 41.483076667
+ ],
+ [
+ 1.904416667,
+ 41.484075
+ ],
+ [
+ 1.893826667,
+ 41.482116667
+ ],
+ [
+ 1.875806667,
+ 41.473725
+ ],
+ [
+ 1.861266667,
+ 41.462718333
+ ],
+ [
+ 1.84614,
+ 41.453255
+ ],
+ [
+ 1.815068333,
+ 41.429423333
+ ],
+ [
+ 1.781368333,
+ 41.41182
+ ],
+ [
+ 1.737838333,
+ 41.382495
+ ],
+ [
+ 1.728466667,
+ 41.374138333
+ ],
+ [
+ 1.697356667,
+ 41.337293333
+ ],
+ [
+ 1.689711667,
+ 41.330155
+ ],
+ [
+ 1.68026,
+ 41.324086667
+ ],
+ [
+ 1.657668333,
+ 41.31304
+ ],
+ [
+ 1.622995,
+ 41.292685
+ ],
+ [
+ 1.567343333,
+ 41.246145
+ ],
+ [
+ 1.560125,
+ 41.2411
+ ],
+ [
+ 1.547781667,
+ 41.23499
+ ],
+ [
+ 1.523825,
+ 41.226591667
+ ],
+ [
+ 1.51739,
+ 41.223241667
+ ],
+ [
+ 1.495836667,
+ 41.208771667
+ ],
+ [
+ 1.475958333,
+ 41.199161667
+ ],
+ [
+ 1.470151667,
+ 41.198938333
+ ],
+ [
+ 1.410985,
+ 41.18076
+ ],
+ [
+ 1.382193333,
+ 41.177575
+ ],
+ [
+ 1.362693333,
+ 41.177708333
+ ],
+ [
+ 1.353133333,
+ 41.179
+ ],
+ [
+ 1.325255,
+ 41.185078333
+ ],
+ [
+ 1.289523333,
+ 41.189008333
+ ],
+ [
+ 1.249358333,
+ 41.196391667
+ ],
+ [
+ 1.240698333,
+ 41.199241667
+ ],
+ [
+ 1.228716667,
+ 41.20493
+ ],
+ [
+ 1.218173333,
+ 41.211988333
+ ],
+ [
+ 1.209281667,
+ 41.220241667
+ ],
+ [
+ 1.202266667,
+ 41.229491667
+ ],
+ [
+ 1.193043333,
+ 41.245715
+ ],
+ [
+ 1.189806667,
+ 41.25618
+ ],
+ [
+ 1.186765,
+ 41.274448333
+ ],
+ [
+ 1.18539,
+ 41.29482
+ ],
+ [
+ 1.186395,
+ 41.313505
+ ],
+ [
+ 1.189305,
+ 41.32277
+ ],
+ [
+ 1.193371667,
+ 41.342171667
+ ],
+ [
+ 1.192833333,
+ 41.350586667
+ ],
+ [
+ 1.19091,
+ 41.358428333
+ ],
+ [
+ 1.186251667,
+ 41.368308333
+ ],
+ [
+ 1.179088333,
+ 41.37789
+ ],
+ [
+ 1.16982,
+ 41.386313333
+ ],
+ [
+ 1.158543333,
+ 41.393453333
+ ],
+ [
+ 1.146255,
+ 41.398765
+ ],
+ [
+ 1.129291667,
+ 41.403051667
+ ],
+ [
+ 1.116885,
+ 41.404331667
+ ],
+ [
+ 1.047056667,
+ 41.406881667
+ ],
+ [
+ 1.012438333,
+ 41.412495
+ ],
+ [
+ 0.984966667,
+ 41.415273333
+ ],
+ [
+ 0.974278333,
+ 41.417725
+ ],
+ [
+ 0.963996667,
+ 41.421235
+ ],
+ [
+ 0.931735,
+ 41.435686667
+ ],
+ [
+ 0.91679,
+ 41.444485
+ ],
+ [
+ 0.900998333,
+ 41.45677
+ ],
+ [
+ 0.87748,
+ 41.483191667
+ ],
+ [
+ 0.869048333,
+ 41.490583333
+ ],
+ [
+ 0.85843,
+ 41.497518333
+ ],
+ [
+ 0.827031667,
+ 41.515541667
+ ],
+ [
+ 0.765103333,
+ 41.545396667
+ ],
+ [
+ 0.747843333,
+ 41.55242
+ ],
+ [
+ 0.734251667,
+ 41.55657
+ ],
+ [
+ 0.705783333,
+ 41.563376667
+ ],
+ [
+ 0.672043333,
+ 41.56879
+ ],
+ [
+ 0.648891667,
+ 41.574753333
+ ],
+ [
+ 0.640015,
+ 41.577991667
+ ],
+ [
+ 0.624163333,
+ 41.586738333
+ ],
+ [
+ 0.589678333,
+ 41.612635
+ ],
+ [
+ 0.57752,
+ 41.618868333
+ ],
+ [
+ 0.564011667,
+ 41.623091667
+ ],
+ [
+ 0.554358333,
+ 41.62475
+ ],
+ [
+ 0.51524,
+ 41.628671667
+ ],
+ [
+ 0.49173,
+ 41.629313333
+ ],
+ [
+ 0.440066667,
+ 41.625461667
+ ],
+ [
+ 0.406045,
+ 41.6238
+ ],
+ [
+ 0.347606667,
+ 41.615743333
+ ],
+ [
+ 0.327888333,
+ 41.615788333
+ ],
+ [
+ 0.303566667,
+ 41.61937
+ ],
+ [
+ 0.289866667,
+ 41.620313333
+ ],
+ [
+ 0.274228333,
+ 41.619326667
+ ],
+ [
+ 0.240383333,
+ 41.614056667
+ ],
+ [
+ 0.222261667,
+ 41.610021667
+ ],
+ [
+ 0.174388333,
+ 41.593305
+ ],
+ [
+ 0.144355,
+ 41.585993333
+ ],
+ [
+ 0.131186667,
+ 41.581811667
+ ],
+ [
+ 0.088356667,
+ 41.56445
+ ],
+ [
+ 0.080101667,
+ 41.560301667
+ ],
+ [
+ 0.069046667,
+ 41.552748333
+ ],
+ [
+ 0.052483333,
+ 41.538803333
+ ],
+ [
+ 0.040676667,
+ 41.532243333
+ ],
+ [
+ 0.027831667,
+ 41.52754
+ ],
+ [
+ 0.009873333,
+ 41.524145
+ ],
+ [
+ -0.006003333,
+ 41.523803333
+ ],
+ [
+ -0.030476667,
+ 41.526675
+ ],
+ [
+ -0.055115,
+ 41.528228333
+ ],
+ [
+ -0.13655,
+ 41.526243333
+ ],
+ [
+ -0.219903333,
+ 41.529263333
+ ],
+ [
+ -0.309343333,
+ 41.529705
+ ],
+ [
+ -0.39218,
+ 41.53547
+ ],
+ [
+ -0.471231667,
+ 41.536545
+ ],
+ [
+ -0.533526667,
+ 41.530046667
+ ],
+ [
+ -0.54813,
+ 41.527691667
+ ],
+ [
+ -0.561716667,
+ 41.523226667
+ ],
+ [
+ -0.586511667,
+ 41.512053333
+ ],
+ [
+ -0.616766667,
+ 41.501365
+ ],
+ [
+ -0.630618333,
+ 41.498373333
+ ],
+ [
+ -0.644931667,
+ 41.497506667
+ ],
+ [
+ -0.663973333,
+ 41.499746667
+ ],
+ [
+ -0.677311667,
+ 41.503873333
+ ],
+ [
+ -0.685536667,
+ 41.50773
+ ],
+ [
+ -0.69666,
+ 41.515215
+ ],
+ [
+ -0.712333333,
+ 41.52929
+ ],
+ [
+ -0.723385,
+ 41.536546667
+ ],
+ [
+ -0.801128333,
+ 41.575
+ ],
+ [
+ -0.808768333,
+ 41.579393333
+ ],
+ [
+ -0.822976667,
+ 41.589313333
+ ],
+ [
+ -0.839378333,
+ 41.597108333
+ ],
+ [
+ -0.848466667,
+ 41.599875
+ ],
+ [
+ -0.862611667,
+ 41.602426667
+ ],
+ [
+ -0.886895,
+ 41.603103333
+ ],
+ [
+ -0.901553333,
+ 41.604571667
+ ],
+ [
+ -0.976468333,
+ 41.619885
+ ],
+ [
+ -1.002103333,
+ 41.628908333
+ ],
+ [
+ -1.037571667,
+ 41.637153333
+ ],
+ [
+ -1.049888333,
+ 41.641346667
+ ],
+ [
+ -1.111166667,
+ 41.673148333
+ ],
+ [
+ -1.13297,
+ 41.681803333
+ ],
+ [
+ -1.169816667,
+ 41.692693333
+ ],
+ [
+ -1.179323333,
+ 41.694726667
+ ],
+ [
+ -1.198971667,
+ 41.696343333
+ ],
+ [
+ -1.21849,
+ 41.69461
+ ],
+ [
+ -1.23242,
+ 41.691218333
+ ],
+ [
+ -1.249518333,
+ 41.683991667
+ ],
+ [
+ -1.284131667,
+ 41.663526667
+ ],
+ [
+ -1.290795,
+ 41.658353333
+ ],
+ [
+ -1.299023333,
+ 41.649911667
+ ],
+ [
+ -1.306793333,
+ 41.637801667
+ ],
+ [
+ -1.31043,
+ 41.627805
+ ],
+ [
+ -1.311923333,
+ 41.617268333
+ ],
+ [
+ -1.312133333,
+ 41.599066667
+ ],
+ [
+ -1.31496,
+ 41.588306667
+ ],
+ [
+ -1.320241667,
+ 41.577896667
+ ],
+ [
+ -1.329298333,
+ 41.564648333
+ ],
+ [
+ -1.334183333,
+ 41.55822
+ ],
+ [
+ -1.340133333,
+ 41.552336667
+ ],
+ [
+ -1.350523333,
+ 41.54482
+ ],
+ [
+ -1.366535,
+ 41.537165
+ ],
+ [
+ -1.492641667,
+ 41.499828333
+ ],
+ [
+ -1.505136667,
+ 41.495035
+ ],
+ [
+ -1.51626,
+ 41.488808333
+ ],
+ [
+ -1.525786667,
+ 41.481581667
+ ],
+ [
+ -1.541253333,
+ 41.465391667
+ ],
+ [
+ -1.547835,
+ 41.456665
+ ],
+ [
+ -1.552615,
+ 41.447215
+ ],
+ [
+ -1.554581667,
+ 41.44055
+ ],
+ [
+ -1.55742,
+ 41.417291667
+ ],
+ [
+ -1.586398333,
+ 41.380115
+ ],
+ [
+ -1.621636667,
+ 41.35582
+ ],
+ [
+ -1.656791667,
+ 41.336323333
+ ],
+ [
+ -1.665105,
+ 41.332333333
+ ],
+ [
+ -1.673928333,
+ 41.329365
+ ],
+ [
+ -1.74074,
+ 41.31547
+ ],
+ [
+ -1.759076667,
+ 41.314366667
+ ],
+ [
+ -1.786003333,
+ 41.316226667
+ ],
+ [
+ -1.79621,
+ 41.31581
+ ],
+ [
+ -1.833663333,
+ 41.310705
+ ],
+ [
+ -1.845185,
+ 41.307398333
+ ],
+ [
+ -1.871051667,
+ 41.297305
+ ],
+ [
+ -1.919795,
+ 41.276505
+ ],
+ [
+ -1.931178333,
+ 41.269913333
+ ],
+ [
+ -1.944588333,
+ 41.259641667
+ ],
+ [
+ -1.95185,
+ 41.255056667
+ ],
+ [
+ -1.968398333,
+ 41.247703333
+ ],
+ [
+ -2.015168333,
+ 41.236475
+ ],
+ [
+ -2.116743333,
+ 41.21746
+ ],
+ [
+ -2.134365,
+ 41.210888333
+ ],
+ [
+ -2.157745,
+ 41.198331667
+ ],
+ [
+ -2.204643333,
+ 41.182348333
+ ],
+ [
+ -2.218181667,
+ 41.178891667
+ ],
+ [
+ -2.251373333,
+ 41.174531667
+ ],
+ [
+ -2.268851667,
+ 41.168991667
+ ],
+ [
+ -2.310835,
+ 41.147148333
+ ],
+ [
+ -2.362935,
+ 41.111218333
+ ],
+ [
+ -2.403461667,
+ 41.087126667
+ ],
+ [
+ -2.41624,
+ 41.075988333
+ ],
+ [
+ -2.443756667,
+ 41.042281667
+ ],
+ [
+ -2.452626667,
+ 41.034108333
+ ],
+ [
+ -2.459685,
+ 41.029106667
+ ],
+ [
+ -2.60181,
+ 40.950396667
+ ],
+ [
+ -2.624661667,
+ 40.936345
+ ],
+ [
+ -2.649565,
+ 40.924531667
+ ],
+ [
+ -2.668318333,
+ 40.912798333
+ ],
+ [
+ -2.68471,
+ 40.904746667
+ ],
+ [
+ -2.765083333,
+ 40.872971667
+ ],
+ [
+ -2.858846667,
+ 40.84163
+ ],
+ [
+ -2.875425,
+ 40.834055
+ ],
+ [
+ -2.919458333,
+ 40.804628333
+ ],
+ [
+ -2.963945,
+ 40.765123333
+ ],
+ [
+ -2.977401667,
+ 40.754488333
+ ],
+ [
+ -3.026141667,
+ 40.725086667
+ ],
+ [
+ -3.039671667,
+ 40.714486667
+ ],
+ [
+ -3.045288333,
+ 40.708455
+ ],
+ [
+ -3.057553333,
+ 40.692328333
+ ],
+ [
+ -3.061485,
+ 40.685491667
+ ],
+ [
+ -3.078018333,
+ 40.650491667
+ ],
+ [
+ -3.102145,
+ 40.610128333
+ ],
+ [
+ -3.109411667,
+ 40.60073
+ ],
+ [
+ -3.118605,
+ 40.592368333
+ ],
+ [
+ -3.216793333,
+ 40.51514
+ ],
+ [
+ -3.222901667,
+ 40.509326667
+ ],
+ [
+ -3.236045,
+ 40.493545
+ ],
+ [
+ -3.242121667,
+ 40.487713333
+ ],
+ [
+ -3.248901667,
+ 40.48244
+ ],
+ [
+ -3.260423333,
+ 40.475886667
+ ],
+ [
+ -3.268933333,
+ 40.472276667
+ ],
+ [
+ -3.29998,
+ 40.461585
+ ],
+ [
+ -3.333496667,
+ 40.447075
+ ],
+ [
+ -3.357068333,
+ 40.434016667
+ ],
+ [
+ -3.370301667,
+ 40.429353333
+ ],
+ [
+ -3.384386667,
+ 40.426476667
+ ],
+ [
+ -3.394031667,
+ 40.425593333
+ ],
+ [
+ -3.422915,
+ 40.426495
+ ],
+ [
+ -3.44183,
+ 40.424688333
+ ],
+ [
+ -3.458956667,
+ 40.42002
+ ],
+ [
+ -3.49786,
+ 40.403488333
+ ],
+ [
+ -3.506411667,
+ 40.401366667
+ ],
+ [
+ -3.526403333,
+ 40.398113333
+ ],
+ [
+ -3.534358333,
+ 40.395511667
+ ],
+ [
+ -3.543455,
+ 40.390685
+ ],
+ [
+ -3.548376667,
+ 40.386748333
+ ],
+ [
+ -3.554208333,
+ 40.37997
+ ],
+ [
+ -3.559546667,
+ 40.36981
+ ],
+ [
+ -3.563101667,
+ 40.364946667
+ ],
+ [
+ -3.567625,
+ 40.360528333
+ ],
+ [
+ -3.58069,
+ 40.351333333
+ ],
+ [
+ -3.588878333,
+ 40.346773333
+ ],
+ [
+ -3.597466667,
+ 40.34339
+ ],
+ [
+ -3.629373333,
+ 40.3357
+ ],
+ [
+ -3.639193333,
+ 40.335053333
+ ],
+ [
+ -3.650695,
+ 40.337515
+ ],
+ [
+ -3.657601667,
+ 40.341181667
+ ],
+ [
+ -3.669283333,
+ 40.351718333
+ ],
+ [
+ -3.673593333,
+ 40.358086667
+ ],
+ [
+ -3.678408333,
+ 40.370721667
+ ],
+ [
+ -3.682025,
+ 40.377773333
+ ],
+ [
+ -3.680888333,
+ 40.381893333
+ ],
+ [
+ -3.67357,
+ 40.389638333
+ ],
+ [
+ -3.672926667,
+ 40.392373333
+ ],
+ [
+ -3.673631667,
+ 40.395125
+ ],
+ [
+ -3.677448333,
+ 40.399638333
+ ],
+ [
+ -3.686803333,
+ 40.402866667
+ ],
+ [
+ -3.689203333,
+ 40.405026667
+ ]
+ ],
+ "type": "LineString"
+ }
+ }
+ ]
+ },
+ "route": {
+ "line": {
+ "mode": "LongDistanceTrain",
+ "name": "06470"
+ }
+ },
+ "scheduledArrivalTime": {
+ "timezone": "Europe/Madrid",
+ "value": "2025-05-11T09:17:00+02:00"
+ },
+ "scheduledDepartureTime": {
+ "timezone": "Europe/Madrid",
+ "value": "2025-05-11T06:25:00+02:00"
+ },
+ "to": {
+ "country": "ES",
+ "identifier": {
+ "uic": "7160000"
+ },
+ "latitude": 40.4053548,
+ "longitude": -3.6895915,
+ "name": "MADRID-P.ATOCHA-ALMUDENA GRANDES",
+ "region": "ES-MD",
+ "type": "Stop"
+ }
+ }
+ ]
+}
diff -Nru kpublictransport-25.04.0/autotests/data/onboard-position/ouigo-es.json kpublictransport-25.04.2/autotests/data/onboard-position/ouigo-es.json
--- kpublictransport-25.04.0/autotests/data/onboard-position/ouigo-es.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/autotests/data/onboard-position/ouigo-es.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1 @@
+{"success":true,"fix":9,"timestamp":1746945751,"latitude":40.871605,"longitude":-2.768676667,"altitude":1063.76,"speed":77.115,"heading":245.4}
diff -Nru kpublictransport-25.04.0/autotests/data/otp/fi-digitransit-journey.out.json kpublictransport-25.04.2/autotests/data/otp/fi-digitransit-journey.out.json
--- kpublictransport-25.04.0/autotests/data/otp/fi-digitransit-journey.out.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/data/otp/fi-digitransit-journey.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -180,8 +180,8 @@
"region": "FI-18"
},
"mode": "Walking",
+ "scheduledArrivalPlatform": "2",
"scheduledArrivalTime": "2020-01-09T18:06:00Z",
- "scheduledDeparturePlatform": "2",
"scheduledDepartureTime": "2020-01-09T18:03:55Z",
"to": {
"country": "FI",
@@ -219,8 +219,9 @@
"name": "U"
}
},
+ "scheduledArrivalPlatform": "8",
"scheduledArrivalTime": "2020-01-09T18:13:34Z",
- "scheduledDeparturePlatform": "8",
+ "scheduledDeparturePlatform": "2",
"scheduledDepartureTime": "2020-01-09T18:06:00Z",
"to": {
"country": "FI",
@@ -250,6 +251,7 @@
},
"mode": "Walking",
"scheduledArrivalTime": "2020-01-09T18:16:10Z",
+ "scheduledDeparturePlatform": "8",
"scheduledDepartureTime": "2020-01-09T18:13:34Z",
"to": {
"country": "FI",
diff -Nru kpublictransport-25.04.0/autotests/data/otp/no-entur-journey.out.json kpublictransport-25.04.2/autotests/data/otp/no-entur-journey.out.json
--- kpublictransport-25.04.0/autotests/data/otp/no-entur-journey.out.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/data/otp/no-entur-journey.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -12,8 +12,8 @@
"region": "NO-03"
},
"mode": "Walking",
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2020-01-12T13:29:17+01:00",
- "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T13:27:23+01:00",
"to": {
"country": "NO",
@@ -54,6 +54,7 @@
"textColor": "#ffffff"
}
},
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2020-01-12T13:38:00+01:00",
"scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T13:27:00+01:00",
@@ -86,8 +87,9 @@
"type": "Stop"
},
"mode": "Walking",
+ "scheduledArrivalPlatform": "3",
"scheduledArrivalTime": "2020-01-12T13:44:29+01:00",
- "scheduledDeparturePlatform": "3",
+ "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T13:40:17+01:00",
"to": {
"country": "NO",
@@ -128,8 +130,9 @@
"textColor": "#ffffff"
}
},
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2020-01-12T14:17:00+01:00",
- "scheduledDeparturePlatform": "1",
+ "scheduledDeparturePlatform": "3",
"scheduledDepartureTime": "2020-01-12T13:48:00+01:00",
"to": {
"country": "NO",
@@ -161,6 +164,7 @@
},
"mode": "Walking",
"scheduledArrivalTime": "2020-01-12T14:17:28+01:00",
+ "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T14:17:00+01:00",
"to": {
"country": "NO",
@@ -185,8 +189,8 @@
"region": "NO-03"
},
"mode": "Walking",
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2020-01-12T13:34:09+01:00",
- "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T13:32:15+01:00",
"to": {
"country": "NO",
@@ -230,6 +234,7 @@
"textColor": "#ffffff"
}
},
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2020-01-12T13:44:00+01:00",
"scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T13:33:00+01:00",
@@ -262,8 +267,9 @@
"type": "Stop"
},
"mode": "Walking",
+ "scheduledArrivalPlatform": "3",
"scheduledArrivalTime": "2020-01-12T13:49:21+01:00",
- "scheduledDeparturePlatform": "3",
+ "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2020-01-12T13:45:09+01:00",
"to": {
"country": "NO",
@@ -304,8 +310,9 @@
"textColor": "#ffffff"
}
},
+ "scheduledArrivalPlatform": "2",
"scheduledArrivalTime": "2020-01-12T14:22:00+01:00",
- "scheduledDeparturePlatform": "2",
+ "scheduledDeparturePlatform": "3",
"scheduledDepartureTime": "2020-01-12T13:54:00+01:00",
"to": {
"country": "NO",
@@ -337,6 +344,7 @@
},
"mode": "Walking",
"scheduledArrivalTime": "2020-01-12T14:22:18+01:00",
+ "scheduledDeparturePlatform": "2",
"scheduledDepartureTime": "2020-01-12T14:22:00+01:00",
"to": {
"country": "NO",
diff -Nru kpublictransport-25.04.0/autotests/data/otp/no-entur-navigation-guides.out.json kpublictransport-25.04.2/autotests/data/otp/no-entur-navigation-guides.out.json
--- kpublictransport-25.04.0/autotests/data/otp/no-entur-navigation-guides.out.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/data/otp/no-entur-navigation-guides.out.json 2025-06-02 22:01:42.000000000 +0200
@@ -216,8 +216,8 @@
}
]
},
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2021-10-07T17:37:16+02:00",
- "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2021-10-07T17:32:33+02:00",
"to": {
"country": "NO",
@@ -1005,6 +1005,7 @@
"textColor": "#ffffff"
}
},
+ "scheduledArrivalPlatform": "1",
"scheduledArrivalTime": "2021-10-07T17:48:00+02:00",
"scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2021-10-07T17:36:00+02:00",
@@ -1158,6 +1159,7 @@
]
},
"scheduledArrivalTime": "2021-10-07T17:51:13+02:00",
+ "scheduledDeparturePlatform": "1",
"scheduledDepartureTime": "2021-10-07T17:49:16+02:00",
"to": {
"country": "NO",
diff -Nru kpublictransport-25.04.0/autotests/efarequesttest.cpp kpublictransport-25.04.2/autotests/efarequesttest.cpp
--- kpublictransport-25.04.0/autotests/efarequesttest.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/efarequesttest.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -111,7 +111,7 @@
QTest::newRow("arrival-with-access-mode") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0"));
req.setLineModes({Line::Bus, Line::Ferry});
- QTest::newRow("line-mode-constraints") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&inclMOT_5=on&inclMOT_6=on&inclMOT_7=on&inclMOT_17=on&inclMOT_19=on&inclMOT_9=on&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0"));
+ QTest::newRow("line-mode-constraints") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&inclMOT_5=on&inclMOT_6=on&inclMOT_7=on&inclMOT_17=on&inclMOT_19=on&inclMOT_9=on&includedMeans=checkbox&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0"));
}
void testJourneyRequest()
diff -Nru kpublictransport-25.04.0/autotests/motis2parsertest.cpp kpublictransport-25.04.2/autotests/motis2parsertest.cpp
--- kpublictransport-25.04.0/autotests/motis2parsertest.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/motis2parsertest.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -36,6 +36,9 @@
QTest::newRow("geo-lookup")
<< QStringLiteral(SOURCE_DIR "/data/motis2/location-geo-search.in.json")
<< QStringLiteral(SOURCE_DIR "/data/motis2/location-geo-search.out.json");
+ QTest::newRow("address")
+ << QStringLiteral(SOURCE_DIR "/data/motis2/location-addresses.in.json")
+ << QStringLiteral(SOURCE_DIR "/data/motis2/location-addresses.out.json");
}
void testParseLocation()
diff -Nru kpublictransport-25.04.0/autotests/onboardstatustest.cpp kpublictransport-25.04.2/autotests/onboardstatustest.cpp
--- kpublictransport-25.04.0/autotests/onboardstatustest.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/onboardstatustest.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -22,6 +22,7 @@
#define s(x) QStringLiteral(x)
+using namespace Qt::Literals;
using namespace KPublicTransport;
class OnboardStatusTest : public QObject
@@ -68,6 +69,7 @@
QTest::newRow("aegean") << s("aegean") << s("aegean.json") << 47.96723323f << 11.781437752f << 1007.0f << 137.0f << 7328.0f;
QTest::newRow("eurowings") << s("lufthansa") << s("../onboard-journey/eurowings.in.json") << 51.58527374267578f << 12.357730865478516f << 637.087f << -137.6375f << 9018.42f;
QTest::newRow("lufthansa") << s("lufthansa") << s("../onboard-journey/lufthansa.in.json") << 51.9423f << 12.4496f << 718.576f << -120.785f << 6491.63f;
+ QTest::newRow("ouigo-es") << u"ouigo-es"_s << u"ouigo-es.json"_s << 40.871605f << -2.768676667f << 277.614f << 245.4f << 1063.76f;
}
void testScriptedPositionParsers()
@@ -117,6 +119,7 @@
QTest::newRow("sncf-inoui") << s("sncf-tgv") << s("sncf-inoui");
QTest::newRow("sbb") << s("sbb") << s("sbb");
QTest::newRow("oebb-railnet") << s("oebb") << s("oebb-railnet");
+ QTest::newRow("oebb-railnet-tracks") << s("oebb") << s("oebb-railnet-tracks");
QTest::newRow("ana") << s("panasonic-inflight-v1") << s("ana");
QTest::newRow("unite-panasonic") << s("panasonic-inflight-v1") << s("united-panasonic");
@@ -125,6 +128,7 @@
QTest::newRow("lufthansa") << s("lufthansa") << s("lufthansa");
QTest::newRow("united") << s("united") << s("united");
QTest::newRow("nstrein") << s("nstrein") << s("nstrein");
+ QTest::newRow("ouigo-es") << u"ouigo-es"_s << u"ouigo-es"_s;
}
void testScriptedJourneyParsers()
diff -Nru kpublictransport-25.04.0/CMakeLists.txt kpublictransport-25.04.2/CMakeLists.txt
--- kpublictransport-25.04.0/CMakeLists.txt 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/CMakeLists.txt 2025-06-02 22:01:42.000000000 +0200
@@ -6,7 +6,7 @@
# KDE Application Version, managed by release script
set (RELEASE_SERVICE_VERSION_MAJOR "25")
set (RELEASE_SERVICE_VERSION_MINOR "04")
-set (RELEASE_SERVICE_VERSION_MICRO "0")
+set (RELEASE_SERVICE_VERSION_MICRO "2")
set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(KPublicTransport VERSION ${RELEASE_SERVICE_VERSION})
diff -Nru kpublictransport-25.04.0/debian/changelog kpublictransport-25.04.2/debian/changelog
--- kpublictransport-25.04.0/debian/changelog 2025-04-17 21:45:25.000000000 +0200
+++ kpublictransport-25.04.2/debian/changelog 2025-06-10 00:17:59.000000000 +0200
@@ -1,3 +1,27 @@
+kpublictransport (25.04.2-1) unstable; urgency=medium
+
+ [ Aurélien COUDERC ]
+ * New upstream release (25.04.1).
+ - Treat neither a positive nor a negative cache hit as missing backend.
+ - Adapt test data to different storage format in 25.04.
+ - Fix ÖBB onboard API journey data parsing and extract track information.
+ - Add QML module dependency information.
+ - Fix MOTIS v2 admin area parsing.
+ * New upstream release (25.04.2).
+ - Fix OTP arrival platform parsing.
+ - Fix parsing of EFA operator names.
+ - Continue backend search until we find at least one that covers both
+ sides.
+ - Consider all higher coverage types as well for journey coverage checks.
+ - Make line asset loading also work for stopovers without coordinates.
+ - Retain trip identifiers in DB trip queries.
+ - Add onboard API support for Ouigo ES.
+ - Check type before reading a numeric JSON value.
+ - Include Estonia in DB's coverage area. (kde#504042)
+ - Make mode filters work on the bwegt EFA endpoint.
+
+ -- Aurélien COUDERC <coucouf@debian.org> Tue, 10 Jun 2025 00:17:59 +0200
+
kpublictransport (25.04.0-1) unstable; urgency=medium
[ Aurélien COUDERC ]
diff -Nru kpublictransport-25.04.0/debian/gbp.conf kpublictransport-25.04.2/debian/gbp.conf
--- kpublictransport-25.04.0/debian/gbp.conf 2025-01-26 22:33:52.000000000 +0100
+++ kpublictransport-25.04.2/debian/gbp.conf 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-[DEFAULT]
-debian-branch = debian/main
diff -Nru kpublictransport-25.04.0/po/es/kpublictransport.po kpublictransport-25.04.2/po/es/kpublictransport.po
--- kpublictransport-25.04.0/po/es/kpublictransport.po 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/po/es/kpublictransport.po 2025-06-02 22:01:42.000000000 +0200
@@ -1,5 +1,5 @@
# Spanish translations for kpublictransport.po package.
-# Copyright (C) 2024 This file is copyright:
+# Copyright (C) 2024-2025 This file is copyright:
# This file is distributed under the same license as the kpublictransport package.
# Automatically generated, 2024.
#
@@ -9,7 +9,7 @@
"Project-Id-Version: kpublictransport\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-02-27 00:39+0000\n"
-"PO-Revision-Date: 2025-01-05 01:12+0100\n"
+"PO-Revision-Date: 2025-05-18 13:48+0100\n"
"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
"Language: es\n"
diff -Nru kpublictransport-25.04.0/po/fr/kpublictransport.po kpublictransport-25.04.2/po/fr/kpublictransport.po
--- kpublictransport-25.04.0/po/fr/kpublictransport.po 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/po/fr/kpublictransport.po 2025-06-02 22:01:42.000000000 +0200
@@ -12,7 +12,7 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Lokalize 24.12.3\n"
+"X-Generator: Lokalize 25.04.1\n"
#: lib/datatypes/feature.cpp:52
#, kde-format
diff -Nru kpublictransport-25.04.0/po/gl/kpublictransport.po kpublictransport-25.04.2/po/gl/kpublictransport.po
--- kpublictransport-25.04.0/po/gl/kpublictransport.po 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/po/gl/kpublictransport.po 2025-06-02 22:01:42.000000000 +0200
@@ -15,7 +15,7 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 24.12.0\n"
+"X-Generator: Lokalize 25.04.1\n"
#: lib/datatypes/feature.cpp:52
#, kde-format
diff -Nru kpublictransport-25.04.0/po/he/kpublictransport.po kpublictransport-25.04.2/po/he/kpublictransport.po
--- kpublictransport-25.04.0/po/he/kpublictransport.po 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/po/he/kpublictransport.po 2025-06-02 22:01:42.000000000 +0200
@@ -1,13 +1,13 @@
# Copyright (C) 2024 This file is copyright:
# This file is distributed under the same license as the kpublictransport package.
#
-# SPDX-FileCopyrightText: 2024 Yaron Shahrabani <sh.yaron@gmail.com>
+# SPDX-FileCopyrightText: 2024, 2025 Yaron Shahrabani <sh.yaron@gmail.com>
msgid ""
msgstr ""
"Project-Id-Version: kpublictransport\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-02-27 00:39+0000\n"
-"PO-Revision-Date: 2025-01-04 21:42+0200\n"
+"PO-Revision-Date: 2025-05-03 14:42+0300\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: צוות התרגום של KDE ישראל\n"
"Language: he\n"
@@ -16,7 +16,7 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
-"X-Generator: Lokalize 24.12.0\n"
+"X-Generator: Lokalize 25.04.0\n"
#: lib/datatypes/feature.cpp:52
#, kde-format
diff -Nru kpublictransport-25.04.0/po/it/kpublictransport.po kpublictransport-25.04.2/po/it/kpublictransport.po
--- kpublictransport-25.04.0/po/it/kpublictransport.po 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/po/it/kpublictransport.po 2025-06-02 22:01:42.000000000 +0200
@@ -15,7 +15,7 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.12.3\n"
+"X-Generator: Lokalize 25.04.1\n"
#: lib/datatypes/feature.cpp:52
#, kde-format
diff -Nru kpublictransport-25.04.0/po/pl/kpublictransport.po kpublictransport-25.04.2/po/pl/kpublictransport.po
--- kpublictransport-25.04.0/po/pl/kpublictransport.po 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/po/pl/kpublictransport.po 2025-06-02 22:01:42.000000000 +0200
@@ -16,7 +16,6 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 24.12.0\n"
#: lib/datatypes/feature.cpp:52
#, kde-format
diff -Nru kpublictransport-25.04.0/src/lib/backends/deutschebahnbackend.cpp kpublictransport-25.04.2/src/lib/backends/deutschebahnbackend.cpp
--- kpublictransport-25.04.0/src/lib/backends/deutschebahnbackend.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/deutschebahnbackend.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -301,7 +301,7 @@
logRequest(request, netReq);
auto netReply = nam->get(netReq);
netReply->setParent(reply);
- QObject::connect(netReply, &QNetworkReply::finished, reply, [this, reply, netReply]() {
+ QObject::connect(netReply, &QNetworkReply::finished, reply, [this, reply, netReply, tripId]() {
netReply->deleteLater();
const auto data = netReply->readAll();
logReply(reply, netReply, data);
@@ -313,6 +313,7 @@
const auto responseObj = QJsonDocument::fromJson(data).object();
auto jny = DeutscheBahnParser::parseTrip(responseObj, m_parser);
+ jny.setIdentifier(locationIdentifierType(), tripId); // not contained in the response
addResult(reply, this, std::move(jny));
});
diff -Nru kpublictransport-25.04.0/src/lib/backends/efamodeoftransport.cpp kpublictransport-25.04.2/src/lib/backends/efamodeoftransport.cpp
--- kpublictransport-25.04.0/src/lib/backends/efamodeoftransport.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/efamodeoftransport.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -10,6 +10,7 @@
#include <vector>
+using namespace Qt::Literals;
using namespace KPublicTransport;
// comments below are EFA names found in XML responses (usually translated)
@@ -62,4 +63,6 @@
}
}
}
+
+ query.addQueryItem(u"includedMeans"_s, u"checkbox"_s);
}
diff -Nru kpublictransport-25.04.0/src/lib/backends/efaxmlparser.cpp kpublictransport-25.04.2/src/lib/backends/efaxmlparser.cpp
--- kpublictransport-25.04.0/src/lib/backends/efaxmlparser.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/efaxmlparser.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -131,7 +131,7 @@
{
QString opName;
while (reader.readNextElement()) {
- if (reader.name() == "name"_L1) {
+ if (opName.isEmpty() && reader.name() == "name"_L1) {
opName = reader.readElementText();
}
}
diff -Nru kpublictransport-25.04.0/src/lib/backends/motis2parser.cpp kpublictransport-25.04.2/src/lib/backends/motis2parser.cpp
--- kpublictransport-25.04.0/src/lib/backends/motis2parser.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/motis2parser.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -356,12 +356,14 @@
l.setLatitude(locObj.value("lat"_L1).toDouble());
l.setLongitude(locObj.value("lon"_L1).toDouble());
l.setFloorLevel(locObj.value("level"_L1).toInt(std::numeric_limits<int>::lowest()));
- const auto areas = locObj.value("area"_L1).toArray();
+ const auto areas = locObj.value("areas"_L1).toArray();
+ int cityLevel = std::numeric_limits<int>::max();
for (const auto &areaV : areas) {
const auto area = areaV.toObject();
- if (const auto level = area.value("adminLevel"_L1).toInt(); level <= 8) {
+ if (const auto level = area.value("adminLevel"_L1).toInt(); level >= 8 && level < cityLevel) {
// TODO needs a proper country-specific admin-level mapping, for now taken from Motis v1 parser
// see https://wiki.openstreetmap.org/wiki/Key:admin_level
+ cityLevel = level;
l.setLocality(area.value("name"_L1).toString());
}
}
diff -Nru kpublictransport-25.04.0/src/lib/backends/opentripplannerparser.cpp kpublictransport-25.04.2/src/lib/backends/opentripplannerparser.cpp
--- kpublictransport-25.04.0/src/lib/backends/opentripplannerparser.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/opentripplannerparser.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -444,7 +444,7 @@
const auto toStop = toObj.value(QLatin1String("stop")).toObject();
const auto to = parseLocation(toObj);
section.setTo(to);
- section.setScheduledDeparturePlatform(toStop.value(QLatin1String("platformCode")).toString());
+ section.setScheduledArrivalPlatform(toStop.value(QLatin1String("platformCode")).toString());
section.setDistance(obj.value(QLatin1String("distance")).toDouble());
diff -Nru kpublictransport-25.04.0/src/lib/datatypes/backend.cpp kpublictransport-25.04.2/src/lib/datatypes/backend.cpp
--- kpublictransport-25.04.0/src/lib/datatypes/backend.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/datatypes/backend.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -42,6 +42,21 @@
return d->coverage[coverageType];
}
+bool Backend::coversLocation(const Location &loc, KPublicTransport::CoverageArea::Type coverageType) const
+{
+ for (const auto c : { CoverageArea::Realtime, CoverageArea::Regular, CoverageArea::Any }) {
+ const auto cov = coverageArea(c);
+ if (!cov.isEmpty() && cov.coversLocation(loc)) {
+ return true;
+ }
+ if (c == coverageType) {
+ break;
+ }
+ }
+
+ return false;
+}
+
const AbstractBackend* BackendPrivate::impl(const Backend &b)
{
return b.d->m_backendImpl.get();
diff -Nru kpublictransport-25.04.0/src/lib/datatypes/backend.h kpublictransport-25.04.2/src/lib/datatypes/backend.h
--- kpublictransport-25.04.0/src/lib/datatypes/backend.h 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/datatypes/backend.h 2025-06-02 22:01:42.000000000 +0200
@@ -41,6 +41,12 @@
bool isSecure() const;
Q_INVOKABLE KPublicTransport::CoverageArea coverageArea(KPublicTransport::CoverageArea::Type coverageType) const;
+
+ /** Checks whether the given location is covered by this backend
+ * with at least the given coverage type @p coverageType, ie. this
+ * also checks all better coverage types.
+ */
+ [[nodiscard]] bool coversLocation(const Location &loc, KPublicTransport::CoverageArea::Type coverageType) const;
};
}
diff -Nru kpublictransport-25.04.0/src/lib/datatypes/json.cpp kpublictransport-25.04.2/src/lib/datatypes/json.cpp
--- kpublictransport-25.04.0/src/lib/datatypes/json.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/datatypes/json.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -183,7 +183,10 @@
if (v.isString()) {
return v.toString().toDouble();
}
- return v.toDouble();
+ if (v.isDouble()) {
+ return v.toDouble();
+ }
+ return {};
case QMetaType::Int:
if (v.isString()) {
return v.toString().toInt();
diff -Nru kpublictransport-25.04.0/src/lib/manager.cpp kpublictransport-25.04.2/src/lib/manager.cpp
--- kpublictransport-25.04.0/src/lib/manager.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/manager.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -558,7 +558,7 @@
// first time/direct query
if (req.contexts().empty()) {
QSet<QString> triedBackends;
- bool foundNonGlobalCoverage = false;
+ bool foundSymmetricNonGlobalCoverage = false;
for (const auto coverageType : { CoverageArea::Realtime, CoverageArea::Regular, CoverageArea::Any }) {
const auto checkBackend = [&](const Backend &backend, bool bothLocationMatch) {
if (triedBackends.contains(backend.identifier()) || d->shouldSkipBackend(backend, req)) {
@@ -570,17 +570,17 @@
}
if (bothLocationMatch) {
- if (!coverage.coversLocation(req.from()) || !coverage.coversLocation(req.to())) {
+ if (!backend.coversLocation(req.from(), coverageType) || !backend.coversLocation(req.to(), coverageType)) {
return;
}
} else {
- if (!coverage.coversLocation(req.from()) && !coverage.coversLocation(req.to())) {
+ if (!backend.coversLocation(req.from(), coverageType) && !backend.coversLocation(req.to(), coverageType)) {
return;
}
}
triedBackends.insert(backend.identifier());
- foundNonGlobalCoverage |= !coverage.isGlobal();
+ foundSymmetricNonGlobalCoverage |= !coverage.isGlobal() && bothLocationMatch;
if (d->queryJourney(BackendPrivate::impl(backend), req, reply)) {
++pendingOps;
@@ -591,7 +591,7 @@
for (const auto &backend: d->m_backends) {
checkBackend(backend, true);
}
- if (pendingOps && foundNonGlobalCoverage) {
+ if (pendingOps && foundSymmetricNonGlobalCoverage) {
break;
}
@@ -599,7 +599,7 @@
for (const auto &backend: d->m_backends) {
checkBackend(backend, false);
}
- if (pendingOps && foundNonGlobalCoverage) {
+ if (pendingOps && foundSymmetricNonGlobalCoverage) {
break;
}
}
@@ -948,7 +948,7 @@
{
auto reply = d->makeReply<VehicleLayoutReply>(req);
int pendingOps = 0;
- int negativeCacheHit = 0;
+ int cacheHit = 0;
// validate input
if (!req.isValid()) {
@@ -973,10 +973,11 @@
auto cache = Cache::lookupVehicleLayout(backend.identifier(), req.cacheKey());
switch (cache.type) {
case CacheHitType::Negative:
- ++negativeCacheHit;
+ ++cacheHit;
qCDebug(Log) << "Negative cache hit for backend" << backend.identifier();
break;
case CacheHitType::Positive:
+ ++cacheHit;
qCDebug(Log) << "Positive cache hit for backend" << backend.identifier();
if (cache.data.size() == 1) {
reply->addAttributions(std::move(cache.attributions));
@@ -997,7 +998,7 @@
}
}
- if (pendingOps == 0 && negativeCacheHit == 0) {
+ if (pendingOps == 0 && cacheHit == 0) {
reply->addError(Reply::NoBackend, u"No viable backend found."_s);
}
reply->setPendingOps(pendingOps);
diff -Nru kpublictransport-25.04.0/src/lib/networks/de_by_mvv.json kpublictransport-25.04.2/src/lib/networks/de_by_mvv.json
--- kpublictransport-25.04.0/src/lib/networks/de_by_mvv.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/networks/de_by_mvv.json 2025-06-02 22:01:42.000000000 +0200
@@ -1,7 +1,7 @@
{
"KPlugin": {
"Description": "Local transport in and around Munich, Germany.",
- "Description[ca@valencia]": "Transport local a Munic i rodalia, Alemanya.",
+ "Description[ca@valencia]": "Transport local en Munic i rodalia, Alemanya.",
"Description[ca]": "Transport local a Munic i rodalia, Alemanya.",
"Description[cs]": "Místní doprava v Mnichově a okolí, Německo.",
"Description[de]": "Lokale Verkehrsmittel in und um München, Deutschland.",
diff -Nru kpublictransport-25.04.0/src/lib/networks/de_db.json kpublictransport-25.04.2/src/lib/networks/de_db.json
--- kpublictransport-25.04.0/src/lib/networks/de_db.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/networks/de_db.json 2025-06-02 22:01:42.000000000 +0200
@@ -78,6 +78,7 @@
"region": [
"BG",
"DK",
+ "EE",
"ES",
"FI",
"FR",
diff -Nru kpublictransport-25.04.0/src/lib/networks/fi_19_varely.json kpublictransport-25.04.2/src/lib/networks/fi_19_varely.json
--- kpublictransport-25.04.0/src/lib/networks/fi_19_varely.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/networks/fi_19_varely.json 2025-06-02 22:01:42.000000000 +0200
@@ -29,7 +29,7 @@
"Name[es]": "Varsinais-Suomen ELY",
"Name[eu]": "Varsinais-Suomen ELY",
"Name[fi]": "Varsinais-Suomen ELY",
- "Name[fr]": "Varsinais-Suomen ELY",
+ "Name[fr]": "s ELY",
"Name[gl]": "ELY de Varsinais-Suomen",
"Name[ia]": "Varsinais-Suomen ELY",
"Name[it]": "Varsinais-Suomen ELY",
diff -Nru kpublictransport-25.04.0/src/lib/networks/geometry/de_db_any.geojson kpublictransport-25.04.2/src/lib/networks/geometry/de_db_any.geojson
--- kpublictransport-25.04.0/src/lib/networks/geometry/de_db_any.geojson 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/networks/geometry/de_db_any.geojson 2025-06-02 22:01:42.000000000 +0200
@@ -1 +1 @@
-{"coordinates":[[[[12.388,54.385],[13.176,54.745],[13.170,54.860],[13.793,54.920],[14.178,54.896],[14.422,54.632],[15.277,54.512],[15.709,54.800],[15.835,55.456],[15.855,55.452],[16.973,55.877],[17.549,56.798],[17.623,56.562],[18.245,56.413],[18.739,56.558],[19.603,57.192],[19.593,57.442],[20.001,57.746],[19.782,58.785],[19.395,58.795],[20.106,59.240],[22.432,59.210],[27.577,59.931],[28.055,60.356],[31.333,62.180],[32.050,62.937],[31.382,63.494],[30.662,63.769],[30.812,63.884],[30.794,64.400],[30.356,64.599],[30.349,64.866],[30.350,64.866],[30.349,64.867],[30.345,65.046],[30.209,65.071],[30.035,65.324],[30.079,65.384],[30.503,65.442],[30.419,65.806],[30.172,66.322],[29.528,66.886],[30.166,67.304],[30.409,67.824],[29.437,68.360],[28.833,68.469],[28.827,68.479],[29.460,69.025],[30.295,69.196],[30.341,69.313],[31.215,69.264],[31.340,69.461],[31.237,69.653],[31.849,69.919],[31.849,70.767],[30.548,71.163],[28.393,71.598],[25.678,71.689],[23.718,71.588],[18.186,70.671],[16.951,70.038],[14.656,69.529],[12.449,68.518],[11.967,68.085],[11.199,67.829],[10.987,67.308],[11.408,66.850],[9.811,65.125],[7.977,64.316],[6.709,63.537],[4.788,62.739],[3.880,61.864],[3.775,60.979],[4.345,59.683],[4.125,59.093],[4.782,58.705],[4.984,58.342],[6.389,57.586],[7.610,57.448],[8.580,57.661],[9.892,58.377],[10.423,58.445],[10.554,58.218],[10.495,58.236],[9.608,58.012],[9.133,57.624],[8.348,57.575],[7.832,57.263],[7.472,56.635],[7.437,55.397],[7.742,55.187],[7.777,54.868],[9.265,54.521],[10.191,54.501],[10.678,54.257],[10.951,54.454],[12.164,54.148],[12.388,54.385]]],[[[-7.343,70.501],[-6.751,71.236],[-7.545,71.743],[-8.274,71.767],[-9.963,71.277],[-10.088,70.543],[-9.359,70.225],[-7.343,70.501]]],[[[36.634,35.937],[36.611,36.036],[36.974,36.070],[36.760,36.498],[36.783,36.558],[37.046,36.409],[37.529,36.432],[38.258,36.714],[39.222,36.466],[40.785,36.930],[41.558,36.879],[42.137,37.075],[42.210,36.884],[42.668,36.960],[42.859,37.160],[43.921,36.973],[44.056,37.066],[44.248,36.683],[44.662,36.976],[44.853,36.912],[44.973,37.022],[44.768,37.893],[44.520,37.987],[44.815,38.434],[44.476,38.547],[44.313,39.207],[44.552,39.229],[44.679,39.506],[44.879,39.375],[45.041,39.731],[44.411,40.225],[43.860,40.262],[43.774,40.445],[43.965,40.654],[43.848,41.047],[43.031,41.589],[43.098,41.825],[42.485,41.771],[42.408,41.637],[41.833,41.628],[41.286,41.828],[40.135,41.344],[39.382,41.501],[38.396,41.331],[36.722,41.782],[36.513,41.734],[36.235,42.079],[35.611,42.070],[35.558,42.318],[34.934,42.509],[34.628,42.340],[33.296,42.419],[32.425,42.201],[31.106,41.630],[31.018,41.494],[29.069,41.646],[28.548,41.832],[28.282,42.354],[28.348,42.872],[28.944,43.200],[29.074,43.933],[28.294,43.957],[27.970,44.248],[27.743,44.165],[27.045,44.351],[26.075,44.172],[25.362,43.821],[23.245,43.983],[23.298,44.123],[22.897,44.393],[23.116,44.461],[22.874,44.733],[22.420,44.941],[22.125,44.707],[21.787,44.833],[21.667,45.332],[20.998,45.596],[21.087,46.038],[20.753,45.968],[20.249,46.357],[19.508,46.379],[19.267,46.212],[18.985,46.302],[18.929,46.149],[18.535,46.113],[18.373,45.941],[17.917,45.966],[16.354,46.773],[15.388,46.339],[15.473,45.988],[14.980,45.854],[15.048,45.657],[14.876,45.673],[14.542,45.958],[14.258,45.674],[14.182,45.670],[14.214,45.699],[13.817,45.917],[13.855,46.285],[13.933,46.698],[12.540,46.879],[12.258,47.308],[11.064,47.160],[10.930,46.981],[10.350,47.089],[10.279,46.834],[10.211,46.881],[9.911,46.568],[9.687,46.528],[9.631,46.712],[9.193,46.695],[8.912,46.273],[8.614,46.385],[8.516,46.736],[7.806,46.340],[7.897,46.192],[7.817,46.130],[7.555,46.193],[7.171,46.077],[7.019,46.234],[7.102,46.661],[6.436,46.576],[7.264,47.240],[7.432,47.214],[7.731,47.414],[8.013,48.523],[8.512,48.947],[8.478,49.108],[7.487,49.409],[6.834,49.381],[6.699,49.597],[6.258,49.729],[5.520,49.709],[5.101,49.915],[5.183,50.240],[4.767,50.419],[4.588,50.193],[4.413,50.179],[4.386,50.444],[3.805,50.513],[3.173,51.018],[2.909,50.912],[2.781,50.982],[2.476,51.526],[1.911,51.470],[1.868,51.684],[1.814,51.697],[2.060,51.879],[2.317,52.427],[2.167,52.963],[1.511,53.325],[0.819,53.391],[0.393,54.034],[0.426,54.333],[-0.233,54.823],[-0.802,55.028],[-1.127,55.894],[-1.906,56.355],[-1.894,56.525],[-1.179,57.373],[-1.278,57.813],[-1.844,58.107],[-2.619,58.126],[-2.606,58.133],[-1.838,59.154],[-1.178,59.186],[-1.080,59.479],[-0.804,59.568],[-0.128,60.266],[-0.165,61.005],[-0.645,61.258],[-1.106,61.258],[-1.821,60.970],[-2.776,60.183],[-2.580,59.827],[-2.219,59.750],[-2.910,59.810],[-3.410,59.687],[-3.889,59.331],[-4.557,59.522],[-5.182,59.060],[-5.146,59.011],[-6.366,58.927],[-7.271,58.631],[-7.738,58.702],[-8.221,58.495],[-8.184,58.224],[-8.440,58.317],[-9.231,58.021],[-9.178,57.598],[-8.719,57.375],[-8.244,57.464],[-8.088,57.173],[-8.235,56.650],[-7.574,55.977],[-7.138,55.845],[-6.948,55.448],[-6.948,55.417],[-7.548,55.202],[-7.679,54.949],[-8.068,54.903],[-8.068,54.719],[-8.516,54.570],[-7.968,54.022],[-7.254,53.879],[-7.01,54.123],[-6.683,53.797],[-6.319,53.883],[-5.828,53.622],[-5.112,54.015],[-4.960,54.248],[-4.226,54.325],[-3.651,53.807],[-3.696,53.739],[-4.458,53.851],[-5.087,53.682],[-5.337,52.558],[-5.148,52.454],[-5.374,52.385],[-6.011,51.898],[-5.932,51.455],[-5.598,51.340],[-5.598,50.657],[-6.125,50.334],[-6.781,50.269],[-6.925,49.853],[-6.636,49.491],[-6.123,49.491],[-5.883,49.674],[-5.054,49.545],[-4.375,49.915],[-3.588,49.784],[-2.869,50.269],[-2.499,50.084],[-1.698,50.248],[-1.184,50.158],[-0.223,50.408],[0.347,50.318],[1.026,50.503],[0.995,50.380],[-0.077,50.061],[-0.348,49.753],[-0.764,49.784],[-1.149,50.108],[-2.212,50.108],[-2.397,49.497],[-2.075,49.195],[-2.117,49.097],[-2.344,49.117],[-2.372,49.383],[-2.984,49.519],[-3.250,49.308],[-5.388,48.844],[-5.680,48.469],[-5.353,47.731],[-4.180,47.273],[-3.763,47.245],[-3.465,46.927],[-2.879,46.864],[-2.852,46.509],[-1.891,45.915],[-1.653,45.324],[-1.920,43.776],[-2.194,43.720],[-3.579,43.909],[-4.356,43.810],[-5.864,44.069],[-6.877,43.980],[-7.675,44.192],[-8.264,44.072],[-9.539,43.460],[-9.777,43.152],[-9.376,42.117],[-9.240,40.695],[-9.343,40.379],[-10.033,39.575],[-9.944,38.587],[-9.367,37.831],[-9.335,36.604],[-7.799,36.570],[-7.373,36.778],[-7.011,36.747],[-6.306,35.852],[-5.669,35.739],[-5.010,35.861],[-4.794,36.088],[-4.008,36.331],[-1.919,36.362],[-1.246,37.066],[-0.402,37.292],[-0.020,38.097],[0.698,38.602],[0.583,39.034],[0.248,39.341],[0.248,39.506],[0.335,39.601],[0.569,39.417],[1.135,39.573],[1.151,40.159],[0.916,40.237],[1.465,40.742],[2.298,40.918],[3.552,41.603],[3.808,42.302],[3.577,42.870],[4.027,43.084],[6.479,42.572],[7.590,43.333],[8.349,43.556],[8.792,43.961],[9.540,43.696],[9.480,43.659],[9.408,43.390],[9.069,43.330],[8.065,42.500],[8.135,41.736],[8.324,41.496],[8.159,41.515],[7.727,41.083],[7.666,40.529],[7.905,40.217],[7.949,39.687],[7.732,39.058],[8.258,38.470],[8.952,38.481],[9.770,38.736],[10.038,38.979],[10.290,40.518],[10.222,41.017],[9.849,41.475],[9.966,42.000],[11.528,41.728],[12.136,41.332],[12.570,40.578],[13.725,40.318],[15.404,39.541],[15.579,39.266],[15.622,39.073],[15.582,39.004],[15.185,39.244],[14.797,38.982],[13.949,38.846],[13.987,38.461],[13.591,38.565],[13.704,38.738],[13.196,39.153],[12.631,38.760],[12.786,38.559],[11.794,38.345],[11.566,38.072],[11.670,37.701],[12.465,37.196],[14.561,36.331],[15.406,36.320],[15.792,36.936],[15.731,37.575],[16.336,37.592],[17.584,38.755],[17.611,39.117],[18.680,39.477],[19.004,40.162],[18.292,40.976],[16.709,41.611],[16.612,42.063],[16.710,42.082],[16.757,42.359],[17.363,42.351],[18.013,42.200],[18.863,41.631],[19.484,41.479],[19.600,42.264],[19.672,42.336],[19.721,42.254],[20.136,42.337],[20.251,42.588],[20.721,42.748],[20.841,43.012],[21.009,42.946],[21.265,42.567],[21.374,42.541],[21.241,42.440],[21.512,42.043],[22.280,42.127],[22.726,41.869],[22.821,41.693],[22.660,41.103],[24.481,41.357],[25.272,41.027],[26.135,41.154],[26.148,41.053],[25.715,40.857],[25.819,40.473],[25.343,40.178],[25.711,39.784],[25.827,39.206],[26.336,39.228],[26.470,39.063],[26.450,38.968],[26.049,38.844],[25.994,38.146],[26.755,37.781],[26.640,37.735],[26.958,37.253],[26.935,36.935],[27.087,36.843],[27.014,36.770],[27.240,36.405],[27.711,36.378],[27.771,36.422],[27.821,36.251],[28.399,36.353],[29.205,35.812],[29.517,35.946],[29.670,35.712],[30.705,35.831],[30.968,36.445],[31.152,36.433],[32.769,35.615],[34.151,35.870],[34.738,36.364],[36.217,35.594],[36.634,35.937]]],[[[-5.496,58.687],[-5.112,59.055],[-5.353,59.501],[-6.471,59.538],[-6.860,58.955],[-6.432,58.652],[-5.496,58.687]]],[[[25.324,54.003],[25.344,53.919],[26.005,53.966],[26.085,54.136],[25.877,54.428],[25.951,54.661],[27.076,55.141],[27.085,55.344],[26.829,55.480],[27.160,55.605],[27.802,55.534],[27.858,55.759],[28.453,56.057],[28.138,57.080],[28.026,57.080],[28.154,57.405],[27.663,57.773],[26.874,57.884],[26.568,57.779],[26.174,58.075],[25.252,58.357],[24.370,58.111],[23.429,58.144],[23.315,57.901],[22.754,58.199],[21.347,57.907],[20.548,57.063],[20.429,56.266],[20.372,55.216],[22.046,54.787],[22.506,54.824],[22.599,54.743],[22.532,54.196],[23.198,54.038],[23.386,53.735],[24.413,53.656],[25.324,54.003]]],[[[34.298,44.038],[34.813,44.392],[36.786,44.776],[36.877,45.822],[35.741,45.846],[35.599,45.754],[35.468,45.889],[35.659,46.050],[35.871,46.183],[36.191,46.093],[36.550,46.319],[36.922,46.267],[37.180,46.492],[38.207,46.660],[38.580,46.886],[38.543,47.438],[38.934,47.509],[39.006,47.671],[39.873,47.641],[40.243,48.235],[39.973,48.610],[40.311,48.779],[40.298,48.960],[40.154,49.007],[40.474,49.200],[40.249,49.843],[39.844,49.771],[39.208,50.130],[38.943,50.018],[38.367,50.296],[38.046,50.281],[38.004,50.202],[37.507,50.682],[36.658,50.433],[36.123,50.661],[35.745,50.581],[35.631,51.154],[35.181,51.433],[34.486,51.462],[34.424,51.590],[34.717,51.778],[33.906,52.563],[33.140,52.586],[32.880,52.460],[32.319,52.556],[32.032,52.238],[30.785,52.309],[30.304,51.675],[30.223,51.732],[29.410,51.606],[29.131,51.985],[28.716,51.701],[28.468,51.735],[28.337,51.933],[28.011,51.776],[27.408,51.801],[27.370,51.963],[25.784,52.155],[24.330,52.083],[23.958,51.796],[23.549,51.896],[23.433,51.183],[23.880,50.827],[23.869,50.616],[23.163,50.273],[22.397,49.585],[22.473,49.302],[22.441,49.308],[21.989,48.690],[21.946,48.282],[22.534,47.890],[22.695,47.905],[22.779,47.714],[23.187,47.882],[23.451,47.764],[24.512,47.764],[24.836,47.505],[25.371,47.716],[26.254,47.798],[26.915,48.208],[27.575,48.281],[28.431,47.857],[28.719,47.917],[28.830,47.715],[28.984,47.750],[28.984,47.292],[29.364,47.165],[29.335,46.862],[29.702,46.713],[29.669,46.658],[29.596,46.605],[29.325,46.785],[28.807,46.659],[28.743,46.146],[28.353,45.877],[28.328,45.682],[27.967,45.605],[28.196,45.167],[28.710,45.008],[29.378,45.215],[29.571,45.003],[30.458,44.858],[30.681,45.464],[30.458,45.558],[31.156,46.134],[31.332,45.896],[32.195,45.733],[32.095,45.673],[32.019,45.158],[33.019,44.815],[32.893,44.426],[33.212,44.148],[33.756,43.982],[34.298,44.038]]],[[[12.51,43.99],[12.52,43.99],[12.52,43.99],[12.51,43.99],[12.51,43.99]]],[[[3.576,39.128],[3.825,39.528],[4.341,39.418],[4.631,39.542],[4.778,39.929],[4.591,40.263],[4.072,40.470],[3.606,40.387],[3.482,40.233],[3.306,40.340],[2.812,40.283],[1.837,39.711],[1.982,39.306],[2.673,38.809],[3.037,38.746],[3.576,39.128]]],[[[1.911,38.382],[2.095,39.084],[1.859,39.399],[1.527,39.501],[0.845,39.266],[0.767,38.733],[1.142,38.309],[1.911,38.382]]],[[[12.485,36.696],[12.365,37.071],[11.698,37.160],[11.492,36.875],[11.650,36.488],[12.247,36.399],[12.485,36.696]]],[[[12.968,35.240],[12.978,35.555],[13.333,35.841],[13.042,36.224],[12.594,36.195],[12.506,35.882],[12.137,35.892],[11.872,35.554],[12.093,35.231],[12.606,35.115],[12.968,35.240]]]],"type":"MultiPolygon"}
\ Pas de fin de ligne à la fin du fichier
+{"coordinates":[[[[-7.343,70.501],[-6.751,71.236],[-7.545,71.743],[-8.274,71.767],[-9.963,71.277],[-10.088,70.543],[-9.359,70.225],[-7.343,70.501]]],[[[25.298,53.954],[25.315,53.881],[26.029,53.931],[26.127,54.140],[25.917,54.434],[25.980,54.634],[27.111,55.117],[27.122,55.365],[26.917,55.475],[27.165,55.568],[27.829,55.494],[27.889,55.734],[28.497,56.038],[28.165,57.117],[28.080,57.117],[28.206,57.435],[27.855,57.638],[28.149,57.879],[27.728,58.682],[28.349,59.088],[28.527,59.525],[27.937,59.864],[27.288,59.899],[27.574,59.930],[28.054,60.358],[31.332,62.182],[32.047,62.936],[31.381,63.492],[30.659,63.768],[30.810,63.885],[30.792,64.399],[30.354,64.598],[30.343,65.044],[30.208,65.069],[30.032,65.324],[30.078,65.385],[30.500,65.444],[30.417,65.805],[30.170,66.321],[29.525,66.887],[30.165,67.305],[30.406,67.823],[29.437,68.358],[28.832,68.468],[28.825,68.479],[29.459,69.027],[30.293,69.198],[30.340,69.315],[31.214,69.266],[31.338,69.461],[31.235,69.654],[31.775,69.889],[32.133,70.356],[31.762,70.791],[30.548,71.161],[28.393,71.596],[25.708,71.687],[23.718,71.586],[18.146,70.659],[16.951,70.036],[14.626,69.518],[12.450,68.516],[11.970,68.085],[11.282,67.869],[10.936,67.424],[11.416,66.855],[9.812,65.124],[7.978,64.315],[6.709,63.536],[4.789,62.737],[3.882,61.863],[3.777,60.979],[4.347,59.683],[4.136,59.117],[5.474,58.011],[6.426,57.577],[7.579,57.450],[8.579,57.662],[9.891,58.379],[10.424,58.447],[10.558,58.215],[10.495,58.234],[9.609,58.010],[9.134,57.622],[8.349,57.573],[7.834,57.262],[7.474,56.635],[7.439,55.398],[7.743,55.188],[7.777,54.885],[8.428,54.655],[10.185,54.506],[10.678,54.260],[10.950,54.456],[12.129,54.159],[13.174,54.759],[13.168,54.850],[14.186,54.889],[14.422,54.634],[15.276,54.514],[15.708,54.801],[15.834,55.459],[15.854,55.454],[16.972,55.879],[17.571,56.837],[17.696,56.527],[18.251,56.416],[18.770,56.581],[19.601,57.193],[19.591,57.450],[20.009,57.799],[19.995,58.426],[19.658,58.807],[19.411,58.807],[20.105,59.241],[21.632,59.214],[21.393,59.091],[21.070,58.260],[21.335,57.826],[20.511,57.085],[20.327,55.190],[22.042,54.750],[22.493,54.786],[22.561,54.729],[22.492,54.168],[23.175,54.006],[23.365,53.700],[24.418,53.619],[25.298,53.954]]],[[[36.634,35.937],[36.611,36.036],[36.974,36.070],[36.760,36.498],[36.783,36.558],[37.046,36.409],[37.529,36.432],[38.258,36.714],[39.222,36.466],[40.785,36.930],[41.558,36.879],[42.137,37.075],[42.210,36.884],[42.668,36.960],[42.859,37.160],[43.921,36.973],[44.056,37.066],[44.248,36.683],[44.662,36.976],[44.853,36.912],[44.973,37.022],[44.768,37.893],[44.520,37.987],[44.815,38.434],[44.476,38.547],[44.313,39.207],[44.552,39.229],[44.679,39.506],[44.879,39.375],[45.041,39.731],[44.411,40.225],[43.860,40.262],[43.774,40.445],[43.965,40.654],[43.848,41.047],[43.031,41.589],[43.098,41.825],[42.485,41.771],[42.408,41.637],[41.833,41.628],[41.286,41.828],[40.135,41.344],[39.382,41.501],[38.396,41.331],[36.722,41.782],[36.513,41.734],[36.235,42.079],[35.611,42.070],[35.558,42.318],[34.934,42.509],[34.628,42.340],[33.296,42.419],[32.425,42.201],[31.106,41.630],[31.018,41.494],[29.069,41.646],[28.548,41.832],[28.282,42.354],[28.348,42.872],[28.944,43.200],[29.074,43.933],[28.294,43.957],[27.970,44.248],[27.743,44.165],[27.045,44.351],[26.075,44.172],[25.362,43.821],[23.245,43.983],[23.298,44.123],[22.897,44.393],[23.116,44.461],[22.874,44.733],[22.420,44.941],[22.125,44.707],[21.787,44.833],[21.667,45.332],[20.998,45.596],[21.087,46.038],[20.753,45.968],[20.249,46.357],[19.508,46.379],[19.267,46.212],[18.985,46.302],[18.929,46.149],[18.535,46.113],[18.373,45.941],[17.917,45.966],[16.354,46.773],[15.388,46.339],[15.473,45.988],[14.980,45.854],[15.048,45.657],[14.876,45.673],[14.542,45.958],[14.258,45.674],[14.182,45.670],[14.214,45.699],[13.817,45.917],[13.855,46.285],[13.933,46.698],[12.540,46.879],[12.258,47.308],[11.064,47.160],[10.930,46.981],[10.350,47.089],[10.279,46.834],[10.211,46.881],[9.911,46.568],[9.687,46.528],[9.631,46.712],[9.193,46.695],[8.912,46.273],[8.614,46.385],[8.516,46.736],[7.806,46.340],[7.897,46.192],[7.817,46.130],[7.555,46.193],[7.171,46.077],[7.019,46.234],[7.102,46.661],[6.436,46.576],[7.264,47.240],[7.432,47.214],[7.731,47.414],[8.013,48.523],[8.512,48.947],[8.478,49.108],[7.487,49.409],[6.834,49.381],[6.699,49.597],[6.258,49.729],[5.520,49.709],[5.101,49.915],[5.183,50.240],[4.767,50.419],[4.588,50.193],[4.413,50.179],[4.386,50.444],[3.805,50.513],[3.173,51.018],[2.909,50.912],[2.781,50.982],[2.476,51.526],[1.911,51.470],[1.868,51.684],[1.814,51.697],[2.060,51.879],[2.317,52.427],[2.167,52.963],[1.511,53.325],[0.819,53.391],[0.393,54.034],[0.426,54.333],[-0.233,54.823],[-0.802,55.028],[-1.127,55.894],[-1.906,56.355],[-1.894,56.525],[-1.179,57.373],[-1.278,57.813],[-1.844,58.107],[-2.619,58.126],[-2.606,58.133],[-1.838,59.154],[-1.178,59.186],[-1.080,59.479],[-0.804,59.568],[-0.128,60.266],[-0.165,61.005],[-0.645,61.258],[-1.106,61.258],[-1.821,60.970],[-2.776,60.183],[-2.580,59.827],[-2.219,59.750],[-2.910,59.810],[-3.410,59.687],[-3.889,59.331],[-4.557,59.522],[-5.182,59.060],[-5.146,59.011],[-6.366,58.927],[-7.271,58.631],[-7.738,58.702],[-8.221,58.495],[-8.184,58.224],[-8.440,58.317],[-9.231,58.021],[-9.178,57.598],[-8.719,57.375],[-8.244,57.464],[-8.088,57.173],[-8.235,56.650],[-7.574,55.977],[-7.138,55.845],[-6.948,55.448],[-6.948,55.417],[-7.548,55.202],[-7.679,54.949],[-8.068,54.903],[-8.068,54.719],[-8.516,54.570],[-7.968,54.022],[-7.254,53.879],[-7.01,54.123],[-6.683,53.797],[-6.319,53.883],[-5.828,53.622],[-5.112,54.015],[-4.960,54.248],[-4.226,54.325],[-3.651,53.807],[-3.696,53.739],[-4.458,53.851],[-5.087,53.682],[-5.337,52.558],[-5.148,52.454],[-5.374,52.385],[-6.011,51.898],[-5.932,51.455],[-5.598,51.340],[-5.598,50.657],[-6.125,50.334],[-6.781,50.269],[-6.925,49.853],[-6.636,49.491],[-6.123,49.491],[-5.883,49.674],[-5.054,49.545],[-4.375,49.915],[-3.588,49.784],[-2.869,50.269],[-2.499,50.084],[-1.698,50.248],[-1.184,50.158],[-0.223,50.408],[0.347,50.318],[1.026,50.503],[0.995,50.380],[-0.077,50.061],[-0.348,49.753],[-0.764,49.784],[-1.149,50.108],[-2.212,50.108],[-2.397,49.497],[-2.075,49.195],[-2.117,49.097],[-2.344,49.117],[-2.372,49.383],[-2.984,49.519],[-3.250,49.308],[-5.388,48.844],[-5.680,48.469],[-5.353,47.731],[-4.180,47.273],[-3.763,47.245],[-3.465,46.927],[-2.879,46.864],[-2.852,46.509],[-1.891,45.915],[-1.653,45.324],[-1.920,43.776],[-2.194,43.720],[-3.579,43.909],[-4.356,43.810],[-5.864,44.069],[-6.877,43.980],[-7.675,44.192],[-8.264,44.072],[-9.539,43.460],[-9.777,43.152],[-9.376,42.117],[-9.240,40.695],[-9.343,40.379],[-10.033,39.575],[-9.944,38.587],[-9.367,37.831],[-9.335,36.604],[-7.799,36.570],[-7.373,36.778],[-7.011,36.747],[-6.306,35.852],[-5.669,35.739],[-5.010,35.861],[-4.794,36.088],[-4.008,36.331],[-1.919,36.362],[-1.246,37.066],[-0.402,37.292],[-0.020,38.097],[0.698,38.602],[0.583,39.034],[0.248,39.341],[0.248,39.506],[0.335,39.601],[0.569,39.417],[1.135,39.573],[1.151,40.159],[0.916,40.237],[1.465,40.742],[2.298,40.918],[3.552,41.603],[3.808,42.302],[3.577,42.870],[4.027,43.084],[6.479,42.572],[7.590,43.333],[8.349,43.556],[8.792,43.961],[9.540,43.696],[9.480,43.659],[9.408,43.390],[9.069,43.330],[8.065,42.500],[8.135,41.736],[8.324,41.496],[8.159,41.515],[7.727,41.083],[7.666,40.529],[7.905,40.217],[7.949,39.687],[7.732,39.058],[8.258,38.470],[8.952,38.481],[9.770,38.736],[10.038,38.979],[10.290,40.518],[10.222,41.017],[9.849,41.475],[9.966,42.000],[11.528,41.728],[12.136,41.332],[12.570,40.578],[13.725,40.318],[15.404,39.541],[15.579,39.266],[15.622,39.073],[15.582,39.004],[15.185,39.244],[14.797,38.982],[13.949,38.846],[13.987,38.461],[13.591,38.565],[13.704,38.738],[13.196,39.153],[12.631,38.760],[12.786,38.559],[11.794,38.345],[11.566,38.072],[11.670,37.701],[12.465,37.196],[14.561,36.331],[15.406,36.320],[15.792,36.936],[15.731,37.575],[16.336,37.592],[17.584,38.755],[17.611,39.117],[18.680,39.477],[19.004,40.162],[18.292,40.976],[16.709,41.611],[16.612,42.063],[16.710,42.082],[16.757,42.359],[17.363,42.351],[18.013,42.200],[18.863,41.631],[19.484,41.479],[19.600,42.264],[19.672,42.336],[19.721,42.254],[20.136,42.337],[20.251,42.588],[20.721,42.748],[20.841,43.012],[21.009,42.946],[21.265,42.567],[21.374,42.541],[21.241,42.440],[21.512,42.043],[22.280,42.127],[22.726,41.869],[22.821,41.693],[22.660,41.103],[24.481,41.357],[25.272,41.027],[26.135,41.154],[26.148,41.053],[25.715,40.857],[25.819,40.473],[25.343,40.178],[25.711,39.784],[25.827,39.206],[26.336,39.228],[26.470,39.063],[26.450,38.968],[26.049,38.844],[25.994,38.146],[26.755,37.781],[26.640,37.735],[26.958,37.253],[26.935,36.935],[27.087,36.843],[27.014,36.770],[27.240,36.405],[27.711,36.378],[27.771,36.422],[27.821,36.251],[28.399,36.353],[29.205,35.812],[29.517,35.946],[29.670,35.712],[30.705,35.831],[30.968,36.445],[31.152,36.433],[32.769,35.615],[34.151,35.870],[34.738,36.364],[36.217,35.594],[36.634,35.937]]],[[[-5.496,58.687],[-5.112,59.055],[-5.353,59.501],[-6.471,59.538],[-6.860,58.955],[-6.432,58.652],[-5.496,58.687]]],[[[34.298,44.038],[34.813,44.392],[36.786,44.776],[36.877,45.822],[35.741,45.846],[35.599,45.754],[35.468,45.889],[35.659,46.050],[35.871,46.183],[36.191,46.093],[36.550,46.319],[36.922,46.267],[37.180,46.492],[38.207,46.660],[38.580,46.886],[38.543,47.438],[38.934,47.509],[39.006,47.671],[39.873,47.641],[40.243,48.235],[39.973,48.610],[40.311,48.779],[40.298,48.960],[40.154,49.007],[40.474,49.200],[40.249,49.843],[39.844,49.771],[39.208,50.130],[38.943,50.018],[38.367,50.296],[38.046,50.281],[38.004,50.202],[37.507,50.682],[36.658,50.433],[36.123,50.661],[35.745,50.581],[35.631,51.154],[35.181,51.433],[34.486,51.462],[34.424,51.590],[34.717,51.778],[33.906,52.563],[33.140,52.586],[32.880,52.460],[32.319,52.556],[32.032,52.238],[30.785,52.309],[30.304,51.675],[30.223,51.732],[29.410,51.606],[29.131,51.985],[28.716,51.701],[28.468,51.735],[28.337,51.933],[28.011,51.776],[27.408,51.801],[27.370,51.963],[25.784,52.155],[24.330,52.083],[23.958,51.796],[23.549,51.896],[23.433,51.183],[23.880,50.827],[23.869,50.616],[23.163,50.273],[22.397,49.585],[22.473,49.302],[22.441,49.308],[21.989,48.690],[21.946,48.282],[22.534,47.890],[22.695,47.905],[22.779,47.714],[23.187,47.882],[23.451,47.764],[24.512,47.764],[24.836,47.505],[25.371,47.716],[26.254,47.798],[26.915,48.208],[27.575,48.281],[28.431,47.857],[28.719,47.917],[28.830,47.715],[28.984,47.750],[28.984,47.292],[29.364,47.165],[29.335,46.862],[29.702,46.713],[29.669,46.658],[29.596,46.605],[29.325,46.785],[28.807,46.659],[28.743,46.146],[28.353,45.877],[28.328,45.682],[27.967,45.605],[28.196,45.167],[28.710,45.008],[29.378,45.215],[29.571,45.003],[30.458,44.858],[30.681,45.464],[30.458,45.558],[31.156,46.134],[31.332,45.896],[32.195,45.733],[32.095,45.673],[32.019,45.158],[33.019,44.815],[32.893,44.426],[33.212,44.148],[33.756,43.982],[34.298,44.038]]],[[[12.51,43.99],[12.52,43.99],[12.52,43.99],[12.51,43.99],[12.51,43.99]]],[[[3.576,39.128],[3.825,39.528],[4.341,39.418],[4.631,39.542],[4.778,39.929],[4.591,40.263],[4.072,40.470],[3.606,40.387],[3.482,40.233],[3.306,40.340],[2.812,40.283],[1.837,39.711],[1.982,39.306],[2.673,38.809],[3.037,38.746],[3.576,39.128]]],[[[1.911,38.382],[2.095,39.084],[1.859,39.399],[1.527,39.501],[0.845,39.266],[0.767,38.733],[1.142,38.309],[1.911,38.382]]],[[[12.485,36.696],[12.365,37.071],[11.698,37.160],[11.492,36.875],[11.650,36.488],[12.247,36.399],[12.485,36.696]]],[[[12.968,35.240],[12.978,35.555],[13.333,35.841],[13.042,36.224],[12.594,36.195],[12.506,35.882],[12.137,35.892],[11.872,35.554],[12.093,35.231],[12.606,35.115],[12.968,35.240]]]],"type":"MultiPolygon"}
\ Pas de fin de ligne à la fin du fichier
diff -Nru kpublictransport-25.04.0/src/lib/networks/un_transitous.json kpublictransport-25.04.2/src/lib/networks/un_transitous.json
--- kpublictransport-25.04.0/src/lib/networks/un_transitous.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/networks/un_transitous.json 2025-06-02 22:01:42.000000000 +0200
@@ -1,7 +1,7 @@
{
"KPlugin": {
"Description": "Community-run free and open public transport routing service.",
- "Description[ca@valencia]": "Servei de rutes de transport públic obert i gratuït de gestió comunitària.",
+ "Description[ca@valencia]": "Servei de rutes de transport públic obert i debades de gestió comunitària.",
"Description[ca]": "Servei de rutes de transport públic obert i gratuït de gestió comunitària.",
"Description[en_GB]": "Community-run free and open public transport routing service.",
"Description[eo]": "Komunume prizorgita libera kaj malferma publiktransporta itinerservo",
diff -Nru kpublictransport-25.04.0/src/lib/stopoverreply.cpp kpublictransport-25.04.2/src/lib/stopoverreply.cpp
--- kpublictransport-25.04.0/src/lib/stopoverreply.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/stopoverreply.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -153,7 +153,16 @@
// augment line information
for (auto &dep : res) {
- dep.applyMetaData(request().downloadAssets());
+ if (dep.stopPoint().hasCoordinate()) {
+ dep.applyMetaData(request().downloadAssets());
+ } else {
+ // workaround for backends not delivering coordinates in stopover replies (e.g. DB)
+ auto route = dep.route();
+ auto line = route.line();
+ line.applyMetaData(request().stop(), request().downloadAssets());
+ route.setLine(line);
+ dep.setRoute(route);
+ }
}
// apply static attributions if @p backend contributed to the results
diff -Nru kpublictransport-25.04.0/src/onboard/data/accesspoints.json kpublictransport-25.04.2/src/onboard/data/accesspoints.json
--- kpublictransport-25.04.0/src/onboard/data/accesspoints.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard/data/accesspoints.json 2025-06-02 22:01:42.000000000 +0200
@@ -12,6 +12,7 @@
{ "ssid": "FlyNet", "id": "lufthansa" },
{ "ssid": "MAVSTART-WIFI", "id": "mav" },
{ "ssid": "OEBB", "id": "oebb" },
+ { "ssid": "RED_OUIGO", "id": "ouigo-es" },
{ "ssid": "SBB-Free", "id": "sbb" },
{ "ssid": "SJ", "id": "icomera-omboard" },
{ "ssid": "Telekom_FlyNet", "id": "panasonic-inflight-v2" },
diff -Nru kpublictransport-25.04.0/src/onboard/data/data.qrc kpublictransport-25.04.2/src/onboard/data/data.qrc
--- kpublictransport-25.04.0/src/onboard/data/data.qrc 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard/data/data.qrc 2025-06-02 22:01:42.000000000 +0200
@@ -30,6 +30,8 @@
<file>mav.json</file>
<file>oebb.json</file>
<file>oebb.js</file>
+ <file>ouigo-es.json</file>
+ <file>ouigo-es.js</file>
<file>sbb.json</file>
<file>sncf-tgv.json</file>
<file>sncf-ic.json</file>
diff -Nru kpublictransport-25.04.0/src/onboard/data/oebb.js kpublictransport-25.04.2/src/onboard/data/oebb.js
--- kpublictransport-25.04.0/src/onboard/data/oebb.js 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard/data/oebb.js 2025-06-02 22:01:42.000000000 +0200
@@ -32,7 +32,7 @@
stop.expectedDepartureTime = dt + s.departure.forecast;
stop.scheduledArrivalTime = dt + s.arrival.scheduled;
stop.expectedArrivalTime = dt + s.arrival.forecast;
- stop.expectedPlatform = s.track;
+ stop.expectedPlatform = s.track?.de;
section.intermediateStops.push(stop);
}
diff -Nru kpublictransport-25.04.0/src/onboard/data/oebb.json kpublictransport-25.04.2/src/onboard/data/oebb.json
--- kpublictransport-25.04.0/src/onboard/data/oebb.json 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard/data/oebb.json 2025-06-02 22:01:42.000000000 +0200
@@ -4,7 +4,7 @@
"script": "oebb.js",
"positionEndpoint": "https://railnet.oebb.at/api/gps",
"positionFunction": "parseGps",
- "journeyEndpoint": "https://railnet.oebb.at/assets/modules/fis/combined.json",
+ "journeyEndpoint": "https://railnet.oebb.at/assets/media/fis/combined.json",
"journeyFunction": "parseJourney"
}
}
diff -Nru kpublictransport-25.04.0/src/onboard/data/ouigo-es.js kpublictransport-25.04.2/src/onboard/data/ouigo-es.js
--- kpublictransport-25.04.0/src/onboard/data/ouigo-es.js 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/src/onboard/data/ouigo-es.js 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1,66 @@
+/*
+ SPDX-FileCopyrightText: 2025 Volker Krause <vkrause@kde.org>
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+function parsePosition(response)
+{
+ if (!response.success)
+ return;
+ return {
+ latitude: response.latitude,
+ longitude: response.longitude,
+ speed: response.speed * 3.6, // m/s -> km/h
+ heading: response.heading,
+ altitude: response.altitude,
+ timetamp: new Date(response.timestamp).toISOString()
+ };
+}
+
+function parseJourney(response)
+{
+ let section = {
+ mode: 'PublicTransport',
+ route: {
+ line: {
+ name: response.commercialId,
+ mode: 'LongDistanceTrain'
+ }
+ },
+ intermediateStops: []
+ };
+
+ for (const s of response.stations) {
+ const stop = {
+ stopPoint: {
+ type: 'Stop',
+ name: s.name,
+ latitude: s.coords.coordYLat,
+ longitude: s.coords.coordXLng,
+ identifier: { "uic": "71" + s.code }
+ },
+ expectedDepartureTime: s.departAt,
+ expectedArrivalTime: s.arrivalAt,
+ scheduledDepartureTime: s.theoricalDepartTime,
+ scheduledArrivalTime: s.theoricalArrivalTime
+ };
+ section.intermediateStops.push(stop);
+ }
+
+ let coords = [];
+ for (const c of response.path) {
+ coords.push([c.longitude, c.latitude]);
+ }
+ section.path = {
+ sections: [{
+ path: {
+ coordinates: coords,
+ type: "LineString"
+ }
+ }]
+ };
+
+ let jny = {};
+ jny.sections = [section];
+ return jny;
+}
diff -Nru kpublictransport-25.04.0/src/onboard/data/ouigo-es.json kpublictransport-25.04.2/src/onboard/data/ouigo-es.json
--- kpublictransport-25.04.0/src/onboard/data/ouigo-es.json 1970-01-01 01:00:00.000000000 +0100
+++ kpublictransport-25.04.2/src/onboard/data/ouigo-es.json 2025-06-02 22:01:42.000000000 +0200
@@ -0,0 +1,10 @@
+{
+ "backend": "ScriptedRestOnboardBackend",
+ "options": {
+ "script": "ouigo-es.js",
+ "positionEndpoint": "https://ouifun.ouigo.es:8082/v2/OuigoESPlugin/gps-data",
+ "positionFunction": "parsePosition",
+ "journeyEndpoint": "https://ouifun.ouigo.es:8082/v2/OuigoESPlugin/travel-infos",
+ "journeyFunction": "parseJourney"
+ }
+}
diff -Nru kpublictransport-25.04.0/src/onboard-qml/CMakeLists.txt kpublictransport-25.04.2/src/onboard-qml/CMakeLists.txt
--- kpublictransport-25.04.0/src/onboard-qml/CMakeLists.txt 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard-qml/CMakeLists.txt 2025-06-02 22:01:42.000000000 +0200
@@ -5,6 +5,7 @@
URI "org.kde.kpublictransport.onboard"
VERSION 1.0
GENERATE_PLUGIN_SOURCE
+ DEPENDENCIES "org.kde.kpublictransport"
)
target_sources(kpublictransportonboardqmlplugin PRIVATE
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/autotests/efarequesttest.cpp kpublictransport-25.04.2/autotests/efarequesttest.cpp
--- kpublictransport-25.04.0/autotests/efarequesttest.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/efarequesttest.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -111,7 +111,7 @@
QTest::newRow("arrival-with-access-mode") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0"));
req.setLineModes({Line::Bus, Line::Ferry});
- QTest::newRow("line-mode-constraints") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&inclMOT_5=on&inclMOT_6=on&inclMOT_7=on&inclMOT_17=on&inclMOT_19=on&inclMOT_9=on&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0"));
+ QTest::newRow("line-mode-constraints") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&inclMOT_5=on&inclMOT_6=on&inclMOT_7=on&inclMOT_17=on&inclMOT_19=on&inclMOT_9=on&includedMeans=checkbox&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0"));
}
void testJourneyRequest()
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/autotests/motis2parsertest.cpp kpublictransport-25.04.2/autotests/motis2parsertest.cpp
--- kpublictransport-25.04.0/autotests/motis2parsertest.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/motis2parsertest.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -36,6 +36,9 @@
QTest::newRow("geo-lookup")
<< QStringLiteral(SOURCE_DIR "/data/motis2/location-geo-search.in.json")
<< QStringLiteral(SOURCE_DIR "/data/motis2/location-geo-search.out.json");
+ QTest::newRow("address")
+ << QStringLiteral(SOURCE_DIR "/data/motis2/location-addresses.in.json")
+ << QStringLiteral(SOURCE_DIR "/data/motis2/location-addresses.out.json");
}
void testParseLocation()
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/autotests/onboardstatustest.cpp kpublictransport-25.04.2/autotests/onboardstatustest.cpp
--- kpublictransport-25.04.0/autotests/onboardstatustest.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/autotests/onboardstatustest.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -22,6 +22,7 @@
#define s(x) QStringLiteral(x)
+using namespace Qt::Literals;
using namespace KPublicTransport;
class OnboardStatusTest : public QObject
@@ -68,6 +69,7 @@
QTest::newRow("aegean") << s("aegean") << s("aegean.json") << 47.96723323f << 11.781437752f << 1007.0f << 137.0f << 7328.0f;
QTest::newRow("eurowings") << s("lufthansa") << s("../onboard-journey/eurowings.in.json") << 51.58527374267578f << 12.357730865478516f << 637.087f << -137.6375f << 9018.42f;
QTest::newRow("lufthansa") << s("lufthansa") << s("../onboard-journey/lufthansa.in.json") << 51.9423f << 12.4496f << 718.576f << -120.785f << 6491.63f;
+ QTest::newRow("ouigo-es") << u"ouigo-es"_s << u"ouigo-es.json"_s << 40.871605f << -2.768676667f << 277.614f << 245.4f << 1063.76f;
}
void testScriptedPositionParsers()
@@ -117,6 +119,7 @@
QTest::newRow("sncf-inoui") << s("sncf-tgv") << s("sncf-inoui");
QTest::newRow("sbb") << s("sbb") << s("sbb");
QTest::newRow("oebb-railnet") << s("oebb") << s("oebb-railnet");
+ QTest::newRow("oebb-railnet-tracks") << s("oebb") << s("oebb-railnet-tracks");
QTest::newRow("ana") << s("panasonic-inflight-v1") << s("ana");
QTest::newRow("unite-panasonic") << s("panasonic-inflight-v1") << s("united-panasonic");
@@ -125,6 +128,7 @@
QTest::newRow("lufthansa") << s("lufthansa") << s("lufthansa");
QTest::newRow("united") << s("united") << s("united");
QTest::newRow("nstrein") << s("nstrein") << s("nstrein");
+ QTest::newRow("ouigo-es") << u"ouigo-es"_s << u"ouigo-es"_s;
}
void testScriptedJourneyParsers()
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/CMakeLists.txt kpublictransport-25.04.2/CMakeLists.txt
--- kpublictransport-25.04.0/CMakeLists.txt 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/CMakeLists.txt 2025-06-02 22:01:42.000000000 +0200
@@ -6,7 +6,7 @@
# KDE Application Version, managed by release script
set (RELEASE_SERVICE_VERSION_MAJOR "25")
set (RELEASE_SERVICE_VERSION_MINOR "04")
-set (RELEASE_SERVICE_VERSION_MICRO "0")
+set (RELEASE_SERVICE_VERSION_MICRO "2")
set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(KPublicTransport VERSION ${RELEASE_SERVICE_VERSION})
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/debian/changelog kpublictransport-25.04.2/debian/changelog
--- kpublictransport-25.04.0/debian/changelog 2025-04-17 21:45:25.000000000 +0200
+++ kpublictransport-25.04.2/debian/changelog 2025-06-10 00:17:59.000000000 +0200
@@ -1,3 +1,27 @@
+kpublictransport (25.04.2-1) unstable; urgency=medium
+
+ [ Aurélien COUDERC ]
+ * New upstream release (25.04.1).
+ - Treat neither a positive nor a negative cache hit as missing backend.
+ - Adapt test data to different storage format in 25.04.
+ - Fix ÖBB onboard API journey data parsing and extract track information.
+ - Add QML module dependency information.
+ - Fix MOTIS v2 admin area parsing.
+ * New upstream release (25.04.2).
+ - Fix OTP arrival platform parsing.
+ - Fix parsing of EFA operator names.
+ - Continue backend search until we find at least one that covers both
+ sides.
+ - Consider all higher coverage types as well for journey coverage checks.
+ - Make line asset loading also work for stopovers without coordinates.
+ - Retain trip identifiers in DB trip queries.
+ - Add onboard API support for Ouigo ES.
+ - Check type before reading a numeric JSON value.
+ - Include Estonia in DB's coverage area. (kde#504042)
+ - Make mode filters work on the bwegt EFA endpoint.
+
+ -- Aurélien COUDERC <coucouf@debian.org> Tue, 10 Jun 2025 00:17:59 +0200
+
kpublictransport (25.04.0-1) unstable; urgency=medium
[ Aurélien COUDERC ]
Seulement dans kpublictransport-25.04.0/debian: gbp.conf
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/backends/deutschebahnbackend.cpp kpublictransport-25.04.2/src/lib/backends/deutschebahnbackend.cpp
--- kpublictransport-25.04.0/src/lib/backends/deutschebahnbackend.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/deutschebahnbackend.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -301,7 +301,7 @@
logRequest(request, netReq);
auto netReply = nam->get(netReq);
netReply->setParent(reply);
- QObject::connect(netReply, &QNetworkReply::finished, reply, [this, reply, netReply]() {
+ QObject::connect(netReply, &QNetworkReply::finished, reply, [this, reply, netReply, tripId]() {
netReply->deleteLater();
const auto data = netReply->readAll();
logReply(reply, netReply, data);
@@ -313,6 +313,7 @@
const auto responseObj = QJsonDocument::fromJson(data).object();
auto jny = DeutscheBahnParser::parseTrip(responseObj, m_parser);
+ jny.setIdentifier(locationIdentifierType(), tripId); // not contained in the response
addResult(reply, this, std::move(jny));
});
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/backends/efamodeoftransport.cpp kpublictransport-25.04.2/src/lib/backends/efamodeoftransport.cpp
--- kpublictransport-25.04.0/src/lib/backends/efamodeoftransport.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/efamodeoftransport.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -10,6 +10,7 @@
#include <vector>
+using namespace Qt::Literals;
using namespace KPublicTransport;
// comments below are EFA names found in XML responses (usually translated)
@@ -62,4 +63,6 @@
}
}
}
+
+ query.addQueryItem(u"includedMeans"_s, u"checkbox"_s);
}
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/backends/efaxmlparser.cpp kpublictransport-25.04.2/src/lib/backends/efaxmlparser.cpp
--- kpublictransport-25.04.0/src/lib/backends/efaxmlparser.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/efaxmlparser.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -131,7 +131,7 @@
{
QString opName;
while (reader.readNextElement()) {
- if (reader.name() == "name"_L1) {
+ if (opName.isEmpty() && reader.name() == "name"_L1) {
opName = reader.readElementText();
}
}
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/backends/motis2parser.cpp kpublictransport-25.04.2/src/lib/backends/motis2parser.cpp
--- kpublictransport-25.04.0/src/lib/backends/motis2parser.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/motis2parser.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -356,12 +356,14 @@
l.setLatitude(locObj.value("lat"_L1).toDouble());
l.setLongitude(locObj.value("lon"_L1).toDouble());
l.setFloorLevel(locObj.value("level"_L1).toInt(std::numeric_limits<int>::lowest()));
- const auto areas = locObj.value("area"_L1).toArray();
+ const auto areas = locObj.value("areas"_L1).toArray();
+ int cityLevel = std::numeric_limits<int>::max();
for (const auto &areaV : areas) {
const auto area = areaV.toObject();
- if (const auto level = area.value("adminLevel"_L1).toInt(); level <= 8) {
+ if (const auto level = area.value("adminLevel"_L1).toInt(); level >= 8 && level < cityLevel) {
// TODO needs a proper country-specific admin-level mapping, for now taken from Motis v1 parser
// see https://wiki.openstreetmap.org/wiki/Key:admin_level
+ cityLevel = level;
l.setLocality(area.value("name"_L1).toString());
}
}
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/backends/opentripplannerparser.cpp kpublictransport-25.04.2/src/lib/backends/opentripplannerparser.cpp
--- kpublictransport-25.04.0/src/lib/backends/opentripplannerparser.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/backends/opentripplannerparser.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -444,7 +444,7 @@
const auto toStop = toObj.value(QLatin1String("stop")).toObject();
const auto to = parseLocation(toObj);
section.setTo(to);
- section.setScheduledDeparturePlatform(toStop.value(QLatin1String("platformCode")).toString());
+ section.setScheduledArrivalPlatform(toStop.value(QLatin1String("platformCode")).toString());
section.setDistance(obj.value(QLatin1String("distance")).toDouble());
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/datatypes/backend.cpp kpublictransport-25.04.2/src/lib/datatypes/backend.cpp
--- kpublictransport-25.04.0/src/lib/datatypes/backend.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/datatypes/backend.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -42,6 +42,21 @@
return d->coverage[coverageType];
}
+bool Backend::coversLocation(const Location &loc, KPublicTransport::CoverageArea::Type coverageType) const
+{
+ for (const auto c : { CoverageArea::Realtime, CoverageArea::Regular, CoverageArea::Any }) {
+ const auto cov = coverageArea(c);
+ if (!cov.isEmpty() && cov.coversLocation(loc)) {
+ return true;
+ }
+ if (c == coverageType) {
+ break;
+ }
+ }
+
+ return false;
+}
+
const AbstractBackend* BackendPrivate::impl(const Backend &b)
{
return b.d->m_backendImpl.get();
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/datatypes/backend.h kpublictransport-25.04.2/src/lib/datatypes/backend.h
--- kpublictransport-25.04.0/src/lib/datatypes/backend.h 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/datatypes/backend.h 2025-06-02 22:01:42.000000000 +0200
@@ -41,6 +41,12 @@
bool isSecure() const;
Q_INVOKABLE KPublicTransport::CoverageArea coverageArea(KPublicTransport::CoverageArea::Type coverageType) const;
+
+ /** Checks whether the given location is covered by this backend
+ * with at least the given coverage type @p coverageType, ie. this
+ * also checks all better coverage types.
+ */
+ [[nodiscard]] bool coversLocation(const Location &loc, KPublicTransport::CoverageArea::Type coverageType) const;
};
}
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/datatypes/json.cpp kpublictransport-25.04.2/src/lib/datatypes/json.cpp
--- kpublictransport-25.04.0/src/lib/datatypes/json.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/datatypes/json.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -183,7 +183,10 @@
if (v.isString()) {
return v.toString().toDouble();
}
- return v.toDouble();
+ if (v.isDouble()) {
+ return v.toDouble();
+ }
+ return {};
case QMetaType::Int:
if (v.isString()) {
return v.toString().toInt();
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/manager.cpp kpublictransport-25.04.2/src/lib/manager.cpp
--- kpublictransport-25.04.0/src/lib/manager.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/manager.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -558,7 +558,7 @@
// first time/direct query
if (req.contexts().empty()) {
QSet<QString> triedBackends;
- bool foundNonGlobalCoverage = false;
+ bool foundSymmetricNonGlobalCoverage = false;
for (const auto coverageType : { CoverageArea::Realtime, CoverageArea::Regular, CoverageArea::Any }) {
const auto checkBackend = [&](const Backend &backend, bool bothLocationMatch) {
if (triedBackends.contains(backend.identifier()) || d->shouldSkipBackend(backend, req)) {
@@ -570,17 +570,17 @@
}
if (bothLocationMatch) {
- if (!coverage.coversLocation(req.from()) || !coverage.coversLocation(req.to())) {
+ if (!backend.coversLocation(req.from(), coverageType) || !backend.coversLocation(req.to(), coverageType)) {
return;
}
} else {
- if (!coverage.coversLocation(req.from()) && !coverage.coversLocation(req.to())) {
+ if (!backend.coversLocation(req.from(), coverageType) && !backend.coversLocation(req.to(), coverageType)) {
return;
}
}
triedBackends.insert(backend.identifier());
- foundNonGlobalCoverage |= !coverage.isGlobal();
+ foundSymmetricNonGlobalCoverage |= !coverage.isGlobal() && bothLocationMatch;
if (d->queryJourney(BackendPrivate::impl(backend), req, reply)) {
++pendingOps;
@@ -591,7 +591,7 @@
for (const auto &backend: d->m_backends) {
checkBackend(backend, true);
}
- if (pendingOps && foundNonGlobalCoverage) {
+ if (pendingOps && foundSymmetricNonGlobalCoverage) {
break;
}
@@ -599,7 +599,7 @@
for (const auto &backend: d->m_backends) {
checkBackend(backend, false);
}
- if (pendingOps && foundNonGlobalCoverage) {
+ if (pendingOps && foundSymmetricNonGlobalCoverage) {
break;
}
}
@@ -948,7 +948,7 @@
{
auto reply = d->makeReply<VehicleLayoutReply>(req);
int pendingOps = 0;
- int negativeCacheHit = 0;
+ int cacheHit = 0;
// validate input
if (!req.isValid()) {
@@ -973,10 +973,11 @@
auto cache = Cache::lookupVehicleLayout(backend.identifier(), req.cacheKey());
switch (cache.type) {
case CacheHitType::Negative:
- ++negativeCacheHit;
+ ++cacheHit;
qCDebug(Log) << "Negative cache hit for backend" << backend.identifier();
break;
case CacheHitType::Positive:
+ ++cacheHit;
qCDebug(Log) << "Positive cache hit for backend" << backend.identifier();
if (cache.data.size() == 1) {
reply->addAttributions(std::move(cache.attributions));
@@ -997,7 +998,7 @@
}
}
- if (pendingOps == 0 && negativeCacheHit == 0) {
+ if (pendingOps == 0 && cacheHit == 0) {
reply->addError(Reply::NoBackend, u"No viable backend found."_s);
}
reply->setPendingOps(pendingOps);
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/lib/stopoverreply.cpp kpublictransport-25.04.2/src/lib/stopoverreply.cpp
--- kpublictransport-25.04.0/src/lib/stopoverreply.cpp 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/lib/stopoverreply.cpp 2025-06-02 22:01:42.000000000 +0200
@@ -153,7 +153,16 @@
// augment line information
for (auto &dep : res) {
- dep.applyMetaData(request().downloadAssets());
+ if (dep.stopPoint().hasCoordinate()) {
+ dep.applyMetaData(request().downloadAssets());
+ } else {
+ // workaround for backends not delivering coordinates in stopover replies (e.g. DB)
+ auto route = dep.route();
+ auto line = route.line();
+ line.applyMetaData(request().stop(), request().downloadAssets());
+ route.setLine(line);
+ dep.setRoute(route);
+ }
}
// apply static attributions if @p backend contributed to the results
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/onboard/data/data.qrc kpublictransport-25.04.2/src/onboard/data/data.qrc
--- kpublictransport-25.04.0/src/onboard/data/data.qrc 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard/data/data.qrc 2025-06-02 22:01:42.000000000 +0200
@@ -30,6 +30,8 @@
<file>mav.json</file>
<file>oebb.json</file>
<file>oebb.js</file>
+ <file>ouigo-es.json</file>
+ <file>ouigo-es.js</file>
<file>sbb.json</file>
<file>sncf-tgv.json</file>
<file>sncf-ic.json</file>
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/onboard/data/oebb.js kpublictransport-25.04.2/src/onboard/data/oebb.js
--- kpublictransport-25.04.0/src/onboard/data/oebb.js 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard/data/oebb.js 2025-06-02 22:01:42.000000000 +0200
@@ -32,7 +32,7 @@
stop.expectedDepartureTime = dt + s.departure.forecast;
stop.scheduledArrivalTime = dt + s.arrival.scheduled;
stop.expectedArrivalTime = dt + s.arrival.forecast;
- stop.expectedPlatform = s.track;
+ stop.expectedPlatform = s.track?.de;
section.intermediateStops.push(stop);
}
Seulement dans kpublictransport-25.04.2/src/onboard/data: ouigo-es.js
diff -ur '--exclude=po' '--exclude=*.json' '--exclude=*.geojson' kpublictransport-25.04.0/src/onboard-qml/CMakeLists.txt kpublictransport-25.04.2/src/onboard-qml/CMakeLists.txt
--- kpublictransport-25.04.0/src/onboard-qml/CMakeLists.txt 2025-04-10 19:06:51.000000000 +0200
+++ kpublictransport-25.04.2/src/onboard-qml/CMakeLists.txt 2025-06-02 22:01:42.000000000 +0200
@@ -5,6 +5,7 @@
URI "org.kde.kpublictransport.onboard"
VERSION 1.0
GENERATE_PLUGIN_SOURCE
+ DEPENDENCIES "org.kde.kpublictransport"
)
target_sources(kpublictransportonboardqmlplugin PRIVATE
Reply to: