File indexing completed on 2025-02-02 05:02:32

0001 /*
0002     SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #ifndef ONLINETICKETRETRIEVALJOB_H
0007 #define ONLINETICKETRETRIEVALJOB_H
0008 
0009 #include <QObject>
0010 
0011 class QIODevice;
0012 class QNetworkAccessManager;
0013 class QNetworkReply;
0014 
0015 /** Online ticket retrieval job. */
0016 class OnlineTicketRetrievalJob : public QObject
0017 {
0018     Q_OBJECT
0019 public:
0020     /*
0021      * @param sourceId Identifier of the service the ticket is retrieved from.
0022      * @param arguments Service-specific arguments needed for retrieving a ticket.
0023      */
0024     explicit OnlineTicketRetrievalJob(const QString &sourceId, const QVariantMap &arguments, QNetworkAccessManager *nam, QObject *parent = nullptr);
0025     ~OnlineTicketRetrievalJob();
0026 
0027     /** Retrieved ticket(s), e.g. as KItinerary::TrainReservation instances. */
0028     [[nodiscard]] QVector<QVariant> result() const;
0029     [[nodiscard]] QString errorMessage() const;
0030 
0031 Q_SIGNALS:
0032     /** Emitted when the job finished, regardless of success.
0033      *  Deletion of the job afterwards is consumer responsibility.
0034      */
0035     void finished();
0036 
0037 private:
0038     void dbRequestFindOrder(const QVariantMap &arguments);
0039     static QString dbParseKwid(QIODevice *io);
0040     void dbRequestOrderDetails(const QVariantMap &arguments);
0041 
0042     void handleReply(QNetworkReply *reply);
0043 
0044     QVector<QVariant> m_result;
0045     QString m_errorMsg;
0046     QNetworkAccessManager *m_nam;
0047 };
0048 
0049 #endif // ONLINETICKETRETRIEVALJOB_H