KItinerary

fcbutil.cpp
1/*
2 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include "fcbutil.h"
7
8using namespace KItinerary;
9
10QString FcbUtil::stringifyUicStationIdentifier(int num, const QByteArray &ia5)
11{
12 if (num >= 10'00000 && num <= 99'99999) {
13 return QLatin1StringView("uic:") + QString::number(num);
14 }
15 if (ia5.size() == 7) {
16 return QLatin1StringView("uic:") + QString::fromLatin1(ia5);
17 }
18
19 return {};
20}
21
22QString FcbUtil::stringifyStationIdentifier(bool numIsSet, int num, const QByteArray &ia5)
23{
24 if (numIsSet) {
25 return QString::number(num);
26 }
27 return QString::fromLatin1(ia5);
28}
29
30QString FcbUtil::classCodeToString(Fcb::v13::TravelClassType classCode)
31{
32 switch (classCode) {
33 case Fcb::v13::notApplicable: return {};
34 case Fcb::v13::first: return QString::number(1);
35 case Fcb::v13::second: return QString::number(2);
36 default:
37 qCWarning(Log) << "Unhandled FCB class code" << classCode;
38 }
39 return {};
40}
41
42QString FcbUtil::classCodeToString(Fcb::v3::TravelClassType classCode)
43{
44 switch (classCode) {
45 case Fcb::v3::notApplicable: return {};
46 case Fcb::v3::first:
47 case Fcb::v3::standardFirst:
48 return QString::number(1);
49 case Fcb::v3::second:
50 case Fcb::v3::standardSecond:
51 return QString::number(2);
52 default:
53 qCWarning(Log) << "Unhandled FCB class code" << classCode;
54 }
55 return {};
56}
57
58QDate FcbUtil::decodeDate(int year, std::optional<int> day)
59{
60 QDate d(year, 1, 1);
61 if (day) {
62 d = d.addDays((*day) - 1);
63 }
64 return d;
65}
66
67QDate FcbUtil::decodeDifferentialDate(const QDate &base, int year, std::optional<int> day)
68{
69 QDate d(base.year(), 1, 1);
70 d = d.addYears(year);
71 if (day) {
72 d = d.addDays(*day);
73 }
74 return d;
75}
76
77QDateTime FcbUtil::issuingDateTime(int year, int day, std::optional<int> time)
78{
79 QDate date = decodeDate(year, day);
80 if (time) {
81 return QDateTime(date, QTime(0,0).addSecs(*time * 60), QTimeZone::UTC);
82 }
83 return QDateTime(date, {});
84}
85
86QDateTime FcbUtil::decodeDifferentialTime(const QDateTime &baseDt, int day, std::optional<int> time, std::optional<int> utcOffset)
87{
88 if (!time) {
89 return {};
90 }
91
92 QDate d = baseDt.date().addDays(day);
93 QTime t = QTime(0, 0).addSecs((*time) * 60);
94 if (utcOffset) {
95 return QDateTime(d, t, QTimeZone::fromSecondsAheadOfUtc(- (*utcOffset) * 15 * 60));
96 }
97 return QDateTime(d, t);
98}
99
100QDateTime FcbUtil::decodeDifferentialStartTime(const QDateTime &baseDt, int day, std::optional<int> time, std::optional<int> utcOffset)
101{
102 QDate d = baseDt.date().addDays(day);
103 QTime t = time ? QTime(0, 0).addSecs((*time) * 60) : QTime();
104 if (utcOffset) {
105 return QDateTime(d, t, QTimeZone::fromSecondsAheadOfUtc(- (*utcOffset) * 15 * 60));
106 }
107 return QDateTime(d, t);
108}
109
110QDateTime FcbUtil::decodeDifferentialEndTime(const QDateTime &baseDt, int day, std::optional<int> time, std::optional<int> utcOffset)
111{
112 QDate d = baseDt.date().addDays(day);
113 QTime t = time ? QTime(0, 0).addSecs((*time) * 60) : QTime(23, 59, 59);
114 if (utcOffset) {
115 return QDateTime(d, t, QTimeZone::fromSecondsAheadOfUtc(- (*utcOffset) * 15 * 60));
116 }
117 return QDateTime(d, t);
118}
static QString classCodeToString(Fcb::v13::TravelClassType classCode)
Convert a class code enum value to a string for human representation.
Definition fcbutil.cpp:30
static QDateTime decodeDifferentialTime(const QDateTime &baseDt, int day, std::optional< int > time, std::optional< int > utcOffset)
Decode differential time, relative to baseDt.
Definition fcbutil.cpp:86
static QDateTime issuingDateTime(int year, int day, std::optional< int > time)
Decode FCB issuing time.
Definition fcbutil.cpp:77
static QDate decodeDate(int year, std::optional< int > day)
Decode FCB date.
Definition fcbutil.cpp:58
Classes for reservation/travel data models, data extraction and data augmentation.
Definition berelement.h:17
qsizetype size() const const
QDate addDays(qint64 ndays) const const
int year() const const
QDate date() const const
QString fromLatin1(QByteArrayView str)
QString number(double n, char format, int precision)
QTime addSecs(int s) const const
QTimeZone fromSecondsAheadOfUtc(int offset)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 21 2025 11:56:45 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.