File indexing completed on 2024-05-12 04:42:42
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "backend.h" 0008 #include "backend_p.h" 0009 #include "backends/abstractbackend.h" 0010 #include "datatypes_p.h" 0011 #include "json_p.h" 0012 0013 #include <QJsonObject> 0014 0015 using namespace Qt::Literals::StringLiterals; 0016 using namespace KPublicTransport; 0017 0018 KPUBLICTRANSPORT_MAKE_GADGET(Backend) 0019 0020 QString Backend::identifier() const 0021 { 0022 return d->m_backendImpl ? d->m_backendImpl->backendId() : QString(); 0023 } 0024 0025 QString Backend::name() const 0026 { 0027 return d->name; 0028 } 0029 0030 QString Backend::description() const 0031 { 0032 return d->description; 0033 } 0034 0035 bool Backend::isSecure() const 0036 { 0037 return d->m_backendImpl && d->m_backendImpl->hasCapability(AbstractBackend::Secure); 0038 } 0039 0040 CoverageArea Backend::coverageArea(CoverageArea::Type coverageType) const 0041 { 0042 return d->coverage[coverageType]; 0043 } 0044 0045 const AbstractBackend* BackendPrivate::impl(const Backend &b) 0046 { 0047 return b.d->m_backendImpl.get(); 0048 } 0049 0050 void BackendPrivate::setImpl(Backend &b, std::unique_ptr<AbstractBackend> &&impl) 0051 { 0052 b.d->m_backendImpl = std::move(impl); 0053 } 0054 0055 struct { 0056 const char *name; 0057 CoverageArea::Type type; 0058 } static constexpr const coverage_area_map[] = { 0059 { "realtimeCoverage", CoverageArea::Realtime }, 0060 { "regularCoverage", CoverageArea::Regular }, 0061 { "anyCoverage", CoverageArea::Any }, 0062 }; 0063 0064 Backend BackendPrivate::fromJson(const QJsonObject &obj) 0065 { 0066 Backend b; 0067 const auto jsonMetaData = obj.value(QLatin1String("KPlugin")).toObject(); 0068 b.d->name = Json::translatedValue(jsonMetaData, QStringLiteral("Name")); 0069 b.d->description = Json::translatedValue(jsonMetaData, QStringLiteral("Description")); 0070 0071 // untranslated files for development purposes only 0072 if (b.d->name.isEmpty() && b.d->description.isEmpty()) [[unlikely]] { 0073 b.d->name = obj.value("name"_L1).toString(); 0074 b.d->description = obj.value("description"_L1).toString(); 0075 } 0076 0077 const auto coverage = obj.value(QLatin1String("coverage")).toObject(); 0078 for (const auto &c : coverage_area_map) { 0079 const auto covObj = coverage.value(QLatin1String(c.name)).toObject(); 0080 if (covObj.empty()) { 0081 continue; 0082 } 0083 b.d->coverage[c.type] = CoverageArea::fromJson(covObj); 0084 b.d->coverage[c.type].setType(c.type); 0085 } 0086 0087 return b; 0088 } 0089 0090 #include "moc_backend.cpp"