File indexing completed on 2024-04-14 03:54:08

0001 /*
0002     SPDX-FileCopyrightText: 2021 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "providersmodel.h"
0008 
0009 #include "enginebase.h"
0010 
0011 namespace KNSCore
0012 {
0013 class ProvidersModelPrivate
0014 {
0015 public:
0016     EngineBase *engine = nullptr;
0017     QStringList knownProviders;
0018 };
0019 
0020 ProvidersModel::ProvidersModel(QObject *parent)
0021     : QAbstractListModel(parent)
0022     , d(new ProvidersModelPrivate)
0023 {
0024 }
0025 
0026 ProvidersModel::~ProvidersModel() = default;
0027 
0028 QHash<int, QByteArray> KNSCore::ProvidersModel::roleNames() const
0029 {
0030     static const QHash<int, QByteArray> roles{
0031         {IdRole, "id"},
0032         {NameRole, "name"},
0033         {VersionRole, "version"},
0034         {WebsiteRole, "website"},
0035         {HostRole, "host"},
0036         {ContactEmailRole, "contactEmail"},
0037         {SupportsSslRole, "supportsSsl"},
0038         {IconRole, "icon"},
0039         {ObjectRole, "object"},
0040     };
0041     return roles;
0042 }
0043 
0044 int KNSCore::ProvidersModel::rowCount(const QModelIndex &parent) const
0045 {
0046     if (parent.isValid()) {
0047         return 0;
0048     }
0049     return d->knownProviders.count();
0050 }
0051 
0052 QVariant KNSCore::ProvidersModel::data(const QModelIndex &index, int role) const
0053 {
0054     if (checkIndex(index) && d->engine) {
0055         QSharedPointer<Provider> provider = d->engine->provider(d->knownProviders.value(index.row()));
0056         if (provider) {
0057             switch (role) {
0058             case IdRole:
0059                 return provider->id();
0060             case NameRole:
0061                 return provider->name();
0062             case VersionRole:
0063                 return provider->version();
0064             case WebsiteRole:
0065                 return provider->website();
0066             case HostRole:
0067                 return provider->host();
0068             case ContactEmailRole:
0069                 return provider->contactEmail();
0070             case SupportsSslRole:
0071                 return provider->supportsSsl();
0072             case IconRole:
0073                 return provider->icon();
0074             case ObjectRole:
0075                 return QVariant::fromValue(provider.data());
0076             }
0077         }
0078     }
0079     return QVariant();
0080 }
0081 
0082 QObject *KNSCore::ProvidersModel::engine() const
0083 {
0084     return d->engine;
0085 }
0086 
0087 void KNSCore::ProvidersModel::setEngine(QObject *engine)
0088 {
0089     if (d->engine != engine) {
0090         if (d->engine) {
0091             d->engine->disconnect(this);
0092         }
0093         d->engine = qobject_cast<EngineBase *>(engine);
0094         Q_EMIT engineChanged();
0095         if (d->engine) {
0096             connect(d->engine, &EngineBase::providersChanged, this, [this]() {
0097                 beginResetModel();
0098                 d->knownProviders = d->engine->providerIDs();
0099                 endResetModel();
0100             });
0101             beginResetModel();
0102             d->knownProviders = d->engine->providerIDs();
0103             endResetModel();
0104         }
0105     }
0106 }
0107 
0108 }
0109 
0110 #include "moc_providersmodel.cpp"