KItinerary

vdvdocumentprocessor.cpp
1/*
2 SPDX-FileCopyrightText: 2019-2021 Volker Krause <vkrause@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "vdvdocumentprocessor.h"
8
9#include "asn1/berelement.h"
10
11#include <KItinerary/ExtractorResult>
12#include <KItinerary/Ticket>
13#include <KItinerary/VdvTicket>
14#include <KItinerary/VdvTicketContent>
15#include <KItinerary/VdvTicketParser>
16
17#include <KLocalizedString>
18
19#include <QByteArray>
20
21using namespace KItinerary;
22
23bool VdvDocumentProcessor::canHandleData(const QByteArray &encodedData, [[maybe_unused]] QStringView fileName) const
24{
25 return VdvTicketParser::maybeVdvTicket(encodedData);
26}
27
29{
31 if (!p.parse(encodedData)) {
32 return {};
33 }
34
36 node.setContent(p.ticket());
37 return node;
38}
39
40void VdvDocumentProcessor::preExtract(ExtractorDocumentNode &node, [[maybe_unused]] const ExtractorEngine *engine) const
41{
42 const auto vdv = node.content<VdvTicket>();
43
44 Seat seat;
45 switch (vdv.serviceClass()) {
46 case VdvTicket::UnknownClass:
47 break;
48 case VdvTicket::FirstClass:
49 case VdvTicket::FirstClassUpgrade:
50 seat.setSeatingType(QStringLiteral("1"));
51 break;
52 case VdvTicket::SecondClass:
53 seat.setSeatingType(QStringLiteral("2"));
54 break;
55 default:
56 break;
57 }
58
59 Ticket ticket;
60 ticket.setTicketToken(QLatin1StringView("aztecbin:") +
61 QString::fromLatin1(vdv.rawData().toBase64()));
62 ticket.setTicketedSeat(seat);
63 if (vdv.serviceClass() == VdvTicket::FirstClassUpgrade) {
64 ticket.setName(i18n("Upgrade"));
65 } else if (const auto hdr = vdv.header(); hdr && hdr->productId == 9999) {
66 ticket.setName(QLatin1StringView("Deutschlandticket"));
67 } else {
68 ticket.setName(i18n("Ticket"));
69 }
70 ticket.setTicketNumber(vdv.ticketNumber());
71 ticket.setValidFrom(vdv.beginDateTime());
72 ticket.setValidUntil(vdv.endDateTime());
73 ticket.setUnderName(vdv.person());
74
75 if (const auto basicData = vdv.productData().find(VdvTicketBasicData::Tag).contentAt<VdvTicketBasicData>(); basicData && basicData->price) {
76 ticket.setTotalPrice(basicData->price / 100.0);
77 ticket.setPriceCurrency(QStringLiteral("EUR"));
78 }
79
80 node.addResult(QList<QVariant>({ticket}));
81}
A node in the extracted document object tree.
QJSValue content
The decoded content of this node.
void addResult(ExtractorResult &&result)
Add additional results from an extraction step.
void setContent(const QVariant &content)
Set decoded content.
Semantic data extraction engine.
A reserved seat.
Definition ticket.h:23
A booked ticket.
Definition ticket.h:41
ExtractorDocumentNode createNodeFromData(const QByteArray &encodedData) const override
Create a document node from raw data.
bool canHandleData(const QByteArray &encodedData, QStringView fileName) const override
Fast check whether the given encoded data can possibly be processed by this instance.
void preExtract(ExtractorDocumentNode &node, const ExtractorEngine *engine) const override
Called before extractors are applied to node.
Product specific data - basic information.
Parser for VDV tickets.
VdvTicket ticket() const
Returns the parsed ticket data.
bool parse(const QByteArray &data)
Tries to parse the ticket in data.
static bool maybeVdvTicket(const QByteArray &data)
Fast check if data might contain a VDV ticket.
Ticket information from a VDV barcode.
Definition vdvticket.h:30
QString i18n(const char *text, const TYPE &arg...)
Classes for reservation/travel data models, data extraction and data augmentation.
Definition berelement.h:17
QString fromLatin1(QByteArrayView str)
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.