File indexing completed on 2024-04-28 15:28:58

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 namespace KNSCore
0010 {
0011 class ProvidersModelPrivate
0012 {
0013 public:
0014     Engine *engine{nullptr};
0015     QStringList knownProviders;
0016 };
0017 
0018 ProvidersModel::ProvidersModel(QObject *parent)
0019     : QAbstractListModel(parent)
0020     , d(new ProvidersModelPrivate)
0021 {
0022 }
0023 
0024 ProvidersModel::~ProvidersModel() = default;
0025 
0026 QHash<int, QByteArray> KNSCore::ProvidersModel::roleNames() const
0027 {
0028     static const QHash<int, QByteArray> roles{
0029         {IdRole, "id"},
0030         {NameRole, "name"},
0031         {VersionRole, "version"},
0032         {WebsiteRole, "website"},
0033         {HostRole, "host"},
0034         {ContactEmailRole, "contactEmail"},
0035         {SupportsSslRole, "supportsSsl"},
0036         {IconRole, "icon"},
0037         {ObjectRole, "object"},
0038     };
0039     return roles;
0040 }
0041 
0042 int KNSCore::ProvidersModel::rowCount(const QModelIndex &parent) const
0043 {
0044     if (parent.isValid()) {
0045         return 0;
0046     }
0047     return d->knownProviders.count();
0048 }
0049 
0050 QVariant KNSCore::ProvidersModel::data(const QModelIndex &index, int role) const
0051 {
0052     QVariant result;
0053     if (checkIndex(index) && d->engine) {
0054         QSharedPointer<Provider> provider = d->engine->provider(d->knownProviders.value(index.row()));
0055         if (provider) {
0056             switch (role) {
0057             case IdRole:
0058                 result.setValue(provider->id());
0059                 break;
0060             case NameRole:
0061                 result.setValue(provider->name());
0062                 break;
0063             case VersionRole:
0064                 result.setValue(provider->version());
0065                 break;
0066             case WebsiteRole:
0067                 result.setValue(provider->website());
0068                 break;
0069             case HostRole:
0070                 result.setValue(provider->host());
0071                 break;
0072             case ContactEmailRole:
0073                 result.setValue(provider->contactEmail());
0074                 break;
0075             case SupportsSslRole:
0076                 result.setValue(provider->supportsSsl());
0077                 break;
0078             case IconRole:
0079                 result.setValue(provider->icon());
0080                 break;
0081             case ObjectRole:
0082                 result.setValue<QObject *>(provider.data());
0083                 break;
0084             default:
0085                 break;
0086             }
0087         }
0088     }
0089     return result;
0090 }
0091 
0092 QObject *KNSCore::ProvidersModel::engine() const
0093 {
0094     return d->engine;
0095 }
0096 
0097 void KNSCore::ProvidersModel::setEngine(QObject *engine)
0098 {
0099     if (d->engine != engine) {
0100         if (d->engine) {
0101             d->engine->disconnect(this);
0102         }
0103         d->engine = qobject_cast<Engine *>(engine);
0104         Q_EMIT engineChanged();
0105         if (d->engine) {
0106             connect(d->engine, &Engine::providersChanged, this, [this]() {
0107                 beginResetModel();
0108                 d->knownProviders = d->engine->providerIDs();
0109                 endResetModel();
0110             });
0111             beginResetModel();
0112             d->knownProviders = d->engine->providerIDs();
0113             endResetModel();
0114         }
0115     }
0116 }
0117 
0118 }
0119 
0120 #include "moc_providersmodel.cpp"