Skip to content

June/July in KDE Itinerary

Saturday, 30 July 2022 | Volker Krause


Since the last update on KDE Itinerary we have been working further towards the upcoming 22.08 feature release. Here are some of the highlights.

New Features

Calendar integration

After the necessary foundational work has been finished, Itinerary now has a completely new integration with the corresponding system calendar on Android and Linux.

So far it was only possible to import events created by KMail’s itinerary plugin from the Android calendar. This is now not only also possible on Linux, but is also no longer restricted to those specific events.

Instead, events that the travel document extractor recognizes as e.g. train trip due to being provided by an iCal file from the corresponding train operator or booking agent can now also be imported. You can also import arbitrary events as such.

Events are also no longer imported automatically and from all calendars, but you can now select which calendar to import from, and which events exactly to import. This also avoids ending up with trips in your timeline from other people’s shared calendars.

Screenshot of KDE Itinerary's calendar import page.
Calendar import page recognizing transport elements and allowing individual selection.

On top of that, Itinerary now also allows to export individual elements to a calendar.

Passes & Programs

The “Passes & Programs” view introduced last time for managing flatrate tickets or discount program membership cards that aren’t limited to a specific element in the timeline received significant extensions:

  • Generic UIC 918.3 tickets and VDV e-tickets are now supported as well (this includes the German 9-Euro-Ticket for example).
  • Tickets/passes now have information about their validity time span, expired ones are grouped at the bottom of the view.
  • Tickets/passes imported multiple times are automatically merged together, and importing documents that contain both generic and time-bound tickets is now supported as well.
  • More variants of the SNCF discount program cards are recognized.
Screenshot of KDE Itinerary's passes and programs page, grouping entries by validity.
Passes, tickets and discount program cards grouped by validity.

Manually added train/bus trips

The ability to manually add train or bus trips from online journey queries is now finally available by default on all platforms. This was presented here some time ago already, but was blocked on a proper release of the Kirigami Addons module to far.

This is still not really solved, but we now ship a bundled copy of the relevant components as part of Itinerary. That isn’t elegant nor the desired long-term state, but it at least unblocks this feature for now.

Screenshot of KDE Itinerary's train trip search page.
Train trip search page.

Akademy 2022

KDE Akademy 2022 is coming up, for the first time since 2019 not as a purely online event. That of course provides ample opportunity for field-testing KDE Itinerary :)

If you are looking for starting Akademy early, eco-friendly travel options and/or contributing complex Itinerary test cases, the #akademy-by-train Matrix channel might be of interest to you.

A number of fixes for the travel document extractor and travel data processing have already come out of this.

Infrastructure Work

KI18n catalog loading on Android

The translation catalog handling on Android had a long-standing issue in KI18n, with the catalog files being stored in the asset section of the APK package, and libintl-lite expecting them in the local file system.

This required KI18n to copy catalogs on demand out of the APK asset store into the file system, which is slow, costs precious disk space and caused problems with catalogs not being properly updated.

With KDE Frameworks 5.95 this has finally been fixed, for the majority of Android devices at least. If the Android system is sufficiently new (API level >= 23), catalog files are now consumed directly from the asset store (MR).

Polar day/night support for KWeatherCore and KHolidays

The KHolidays framework provides among other things the math to calculate the sun position for any given time and location. This is used for example to determine whether to use the day or night icons for weather forecasts, or for computing opening hours.

This works fine, as long as there actually is a sunrise and a sunset on the day in question, and for most people that assumption always holds. Not so however once you get very far north or south, towards the polar regions.

For KDE Frameworks 5.96 KHolidays has been fixed to no longer report misleading values during polar day/night conditions, and with 5.97 it will get new API to check for those cases specifically. KWeatherCore makes use of this already to ensure showing correct weather icons.

Beyond Itinerary, this might also be of interest for the Plasma night color feature for example.

Qt 6

If you are following Planet KDE you are probably aware of the ongoing efforts to prepare for the transition to Qt 6 all over KDE’s software stack, and Itinerary isn’t exempt from that.

All of Itinerary’s dependencies are meanwhile fully functional with Qt 6, and there’s mainly two larger remaining issues affecting Itinerary itself:

  • Android APKs don’t build with Qt 6 and ECM yet, due to a PIE vs PIC mix-up.
  • The map view components provided by Qt Location are not yet available again in Qt 6.

Fixes & Improvements

Travel document extractor

  • We now attempt to merge “triangular” trip data, ie. data with and without intermediate stops included, as far as that is detected with sufficient certainty. This is necessary as some operators provide information with different levels of detail depending on the medium (e.g. PDF vs. iCal).
  • Direct barcode extraction support for Renfe and Trenitalia tickets.
  • Data extraction from iCal events for Trainline, DB, GWR, Trenitalia and Swiss.
  • New data extractors for ZSSK and local transport tickets produced by eos.uptrade.
  • Improved data extractors for BVG, DB, MÁV, ÖBB, SNCF, booking.com and standardized European RCT2 tickets.

Public transport data

  • Improved support for GBFS v2.1, including docked vehicle details, vehicle type names and more address properties.
  • Handle some common deviations from the GBFS standard, and fixed/reported some standard violations in the corresponding upstream projects.
  • Display more GBFS vehicle details in the station map.
  • Avoid monorail systems being mis-detected as regular railways and thus confusing the platform detection logic. Particularly useful in cities with exotic means of transportation.

Itinerary app

  • Correctly ignore unavailable documents when showing the amount of documents attached to a reservation (bug 456510).
  • Select the ticket of the current user by default in case of multi-traveller reservations.
  • Only add transfers automatically if there is sufficient certainty that the there is a location change. This fixes spurious transfers being added between direct connections in some cases with location name variations.
  • Consider non-location change elements when determining location as well (bug 455083). This provides more correct results for e.g. weather and public holiday information when the only element in the timeline is a hotel reservation for a different location.
  • When adding train trips manually, consider previous elements when determining the default departure time.
  • Apply the data extraction post-processing to manually added train trips as well. This fills in possibly missing data such as the country or timezone of a location, which various other features rely on.
  • Improved confirmation dialogs.
  • Fixed date input issues on desktop and mobile.

How you can help

Feedback and travel document samples are very much welcome, and there are plenty of other things that can be done without traveling as well. The KDE Itinerary workboard or the more specialized indoor map workboard show what’s on the todo list, and are a good place for collecting new ideas. For questions and suggestions, please feel free to join us on the KDE PIM mailing list or in the #kontact channel on Matrix.