File indexing completed on 2024-05-12 16:59:42
0001 /* 0002 SPDX-FileCopyrightText: 2007 Tobias Koenig <tokoe@kde.org> 0003 SPDX-FileCopyrightText: 2022 Fushan Wen <qydwhotmail@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "potdprovidermodel.h" 0009 0010 PotdProviderModel::PotdProviderModel(QObject *parent) 0011 : QAbstractListModel(parent) 0012 { 0013 loadPluginMetaData(); 0014 } 0015 0016 int PotdProviderModel::rowCount(const QModelIndex &parent) const 0017 { 0018 if (parent.isValid()) { 0019 return 0; 0020 } 0021 0022 return m_providers.size(); 0023 } 0024 0025 QVariant PotdProviderModel::data(const QModelIndex &index, int role) const 0026 { 0027 if (!index.isValid() || index.row() >= static_cast<int>(m_providers.size())) { 0028 return QVariant(); 0029 } 0030 0031 const KPluginMetaData &item = m_providers.at(index.row()); 0032 0033 switch (role) { 0034 case Qt::DisplayRole: 0035 return item.name(); 0036 case Qt::DecorationRole: 0037 return item.iconName(); 0038 case Roles::Id: 0039 return item.value(QStringLiteral("X-KDE-PlasmaPoTDProvider-Identifier")); 0040 case Roles::NotSafeForWork: { 0041 return item.value(QStringLiteral("X-KDE-PlasmaPoTDProvider-NotSafeForWork"), false); 0042 } 0043 default: 0044 return QVariant(); 0045 } 0046 } 0047 0048 QHash<int, QByteArray> PotdProviderModel::roleNames() const 0049 { 0050 return { 0051 {Qt::DisplayRole, "display"}, 0052 {Qt::DecorationRole, "decoration"}, 0053 {Roles::Id, "id"}, 0054 {Roles::NotSafeForWork, "notSafeForWork"}, 0055 }; 0056 } 0057 0058 int PotdProviderModel::indexOf(const QString &identifier) 0059 { 0060 auto it = std::find_if(m_providers.cbegin(), m_providers.cend(), [&identifier](const KPluginMetaData &metadata) { 0061 return identifier == metadata.value(QStringLiteral("X-KDE-PlasmaPoTDProvider-Identifier")); 0062 }); 0063 0064 if (it == m_providers.cend()) { 0065 return 0; 0066 } 0067 0068 return std::distance(m_providers.cbegin(), it); 0069 } 0070 0071 bool PotdProviderModel::isNSFW(int row) 0072 { 0073 return index(row, 0).data(Roles::NotSafeForWork).toBool(); 0074 } 0075 0076 void PotdProviderModel::loadPluginMetaData() 0077 { 0078 const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("potd")); 0079 0080 beginResetModel(); 0081 0082 m_providers.clear(); 0083 m_providers.reserve(plugins.size()); 0084 0085 std::copy_if(plugins.cbegin(), plugins.cend(), std::back_inserter(m_providers), [](const KPluginMetaData &metadata) { 0086 return !metadata.value(QStringLiteral("X-KDE-PlasmaPoTDProvider-Identifier")).isEmpty(); 0087 }); 0088 0089 endResetModel(); 0090 }