File indexing completed on 2024-04-28 07:45:13
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"