KItinerary

ssbv1ticket.cpp
1/*
2 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "ssbv1ticket.h"
8
9#include <QDebug>
10
11#include <cstring>
12
13using namespace KItinerary;
14
15enum {
16 SSB_DATA_SIZE_MIN = 107,
17 SSB_DATA_SIZE_MAX = 111,
18 SSB_VERSION = 1,
19};
20
21SSBv1Ticket::SSBv1Ticket() = default;
22
23SSBv1Ticket::SSBv1Ticket(const QByteArray &data)
24{
25 if (maybeSSB(data)) {
26 m_data = data;
27 } else {
28 qWarning() << "Trying to construct an SSB ticket from invalid data!";
29 }
30}
31
32SSBv1Ticket::~SSBv1Ticket() = default;
33
35{
36 return !m_data.isEmpty();
37}
38
40{
41 if (data.size() < SSB_DATA_SIZE_MIN || data.size() > SSB_DATA_SIZE_MAX) {
42 return false;
43 }
44 return (data.at(0) >> 4) == SSB_VERSION;
45}
46
48{
49 if (!isValid() || firstDayOfValidityDay() == 0 || firstDayOfValidityDay() > 366) {
50 return {};
51 }
52 QDate d(contextDate.date().year(), 1, 1);
53 return d.addDays(firstDayOfValidityDay() - 1);
54}
55
57{
58 if (!isValid() || departureTimeSlot() == 0 || departureTimeSlot() > 48) {
59 return {};
60 }
61
62 QDateTime dt(firstDayOfValidity(contextDate), {0, 0});
63 return dt.addSecs(60 * 30 * (departureTimeSlot() - 1));
64}
65
66QByteArray SSBv1Ticket::rawData() const
67{
68 return m_data;
69}
70
71#include "moc_ssbv1ticket.cpp"
Q_INVOKABLE QDateTime departureTime(const QDateTime &contextDate=QDateTime::currentDateTime()) const
Decoded departure time slot.
int firstDayOfValidityDay
Days since Jan 01.
Definition ssbv1ticket.h:30
bool isValid() const
Returns true if this is a valid SSB ticket.
int departureTimeSlot
departure time encoded as 48 30min time slots
Definition ssbv1ticket.h:41
static bool maybeSSB(const QByteArray &data)
Returns true if data might be an ERA SSB ticket.
Q_INVOKABLE QDate firstDayOfValidity(const QDateTime &contextDate=QDateTime::currentDateTime()) const
First day of validity.
Classes for reservation/travel data models, data extraction and data augmentation.
Definition berelement.h:17
char at(qsizetype i) const const
bool isEmpty() const const
qsizetype size() const const
QDate addDays(qint64 ndays) const const
int year() const const
QDateTime addSecs(qint64 s) const const
QDate date() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:14:49 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.