File indexing completed on 2024-05-12 04:42:34
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "hafasbackend.h" 0008 #include "logging.h" 0009 0010 #include <KPublicTransport/Location> 0011 0012 #include <QJsonObject> 0013 #include <QMetaEnum> 0014 0015 using namespace KPublicTransport; 0016 0017 void HafasBackend::setProductsMap(const QJsonArray& array) 0018 { 0019 m_lineModeMap.reserve(array.size()); 0020 const auto me = QMetaEnum::fromType<Line::Mode>(); 0021 for (const auto &prodV : array) { 0022 const auto prodObj = prodV.toObject(); 0023 const auto bitmasks = prodObj.value(QLatin1String("bitmasks")).toArray(); 0024 auto mode = static_cast<Line::Mode>(me.keyToValue(prodObj.value(QLatin1String("mode")).toString().toUtf8().constData())); 0025 if (mode == Line::Unknown || mode < 0) { 0026 qCWarning(Log) << "Invalid product mode:" << prodObj; 0027 mode = Line::Unknown; 0028 } 0029 for (const auto &bit : bitmasks) { 0030 m_lineModeMap.push_back({bit.toInt(), mode}); 0031 } 0032 } 0033 0034 std::sort(m_lineModeMap.begin(), m_lineModeMap.end(), [](const auto &lhs, const auto &rhs) { 0035 return lhs.productClass < rhs.productClass; 0036 }); 0037 } 0038 0039 QString HafasBackend::locationIdentifierType() const 0040 { 0041 return m_locationIdentifierType.isEmpty() ? backendId() : m_locationIdentifierType; 0042 } 0043 0044 QString HafasBackend::standardLocationIdentifierType() const 0045 { 0046 return m_standardLocationIdentifierType; 0047 } 0048 0049 QString HafasBackend::locationIdentifier(const Location &loc) const 0050 { 0051 const auto id = loc.identifier(locationIdentifierType()); 0052 if (!id.isEmpty()) { 0053 return id; 0054 } 0055 return loc.identifier(standardLocationIdentifierType()); 0056 } 0057 0058 void HafasBackend::setStandardLocationIdentifierCountries(const QJsonArray &a) 0059 { 0060 m_uicCountryCodes.reserve(a.size()); 0061 std::transform(a.begin(), a.end(), std::back_inserter(m_uicCountryCodes), [](const auto &v) { return v.toInt(); }); 0062 std::sort(m_uicCountryCodes.begin(), m_uicCountryCodes.end()); 0063 }