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"