File indexing completed on 2024-04-28 04:41:45

0001 /*
0002     SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <../lib/datatypes/backend_p.h>
0008 #include <../lib/backends/hafasmgatebackend.h>
0009 
0010 #include <KPublicTransport/Backend>
0011 #include <KPublicTransport/Manager>
0012 
0013 #include <QCoreApplication>
0014 #include <QDebug>
0015 #include <QJsonArray>
0016 #include <QJsonDocument>
0017 #include <QJsonObject>
0018 #include <QNetworkAccessManager>
0019 #include <QNetworkReply>
0020 #include <QNetworkRequest>
0021 
0022 using namespace KPublicTransport;
0023 
0024 static void listConGroups(const QByteArray &data)
0025 {
0026     const auto svcResL = QJsonDocument::fromJson(data).object().value(QLatin1String("svcResL")).toArray();
0027     if (svcResL.empty()) {
0028         qDebug() << "empty reponse" << data;
0029         return;
0030     }
0031 
0032     const auto res = svcResL.at(0).toObject().value(QLatin1String("res")).toObject();
0033     const auto conGrpL = res.value(QLatin1String("conGrpL")).toArray();
0034     for (const auto &conGrpV : conGrpL) {
0035         const auto conGrpObj = conGrpV.toObject();
0036         qDebug() << conGrpObj.value(QLatin1String("name")).toString();
0037         const auto requests = conGrpObj.value(QLatin1String("requests")).toArray();
0038         for (const auto requestV : requests) {
0039             const auto requestObj = requestV.toObject();
0040             qDebug() << "    " << requestObj.value(QLatin1String("id")).toString();
0041         }
0042     }
0043 }
0044 
0045 int main(int argc, char **argv)
0046 {
0047     QCoreApplication app(argc, argv);
0048 
0049     QNetworkAccessManager nam;
0050     nam.setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
0051 
0052     Manager ptMgr;
0053     int jobCount = 0;
0054 
0055     for (const auto &backend : ptMgr.backends()) {
0056         const auto impl = dynamic_cast<const HafasMgateBackend*>(BackendPrivate::impl(backend));
0057         if (!impl) {
0058             continue;
0059         }
0060 
0061         QJsonObject req;
0062         req.insert(QLatin1String("getConGroups"), true);
0063         QJsonObject serverInfo;
0064         serverInfo.insert(QLatin1String("meth"), QLatin1String("ServerInfo"));
0065         serverInfo.insert(QLatin1String("req"), req);
0066 
0067         QByteArray postData;
0068         const auto netReq = impl->makePostRequest(serverInfo, postData);
0069         ++jobCount;
0070         auto netReply = nam.post(netReq, postData);
0071         QObject::connect(netReply, &QNetworkReply::finished, &nam, [netReply, &jobCount, backend]() {
0072             --jobCount;
0073             netReply->deleteLater();
0074 
0075             qDebug() << "************************************************" << backend.identifier();
0076             if (netReply->error() != QNetworkReply::NoError) {
0077                 qWarning() << netReply->errorString();
0078             } else {
0079                 listConGroups(netReply->readAll());
0080             }
0081 
0082             if (jobCount == 0) {
0083                 QCoreApplication::quit();
0084             }
0085         });
0086     }
0087 
0088     return app.exec();
0089 }