File indexing completed on 2024-04-21 03:56:26
0001 /* 0002 SPDX-FileCopyrightText: 2021 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "searchpresetmodel.h" 0008 0009 #include "knewstuffquick_debug.h" 0010 #include <KLocalizedString> 0011 0012 SearchPresetModel::SearchPresetModel(KNSCore::EngineBase *engine) 0013 : QAbstractListModel(engine) 0014 , m_engine(engine) 0015 { 0016 connect(m_engine, &KNSCore::EngineBase::signalSearchPresetsLoaded, this, [this]() { 0017 beginResetModel(); 0018 endResetModel(); 0019 }); 0020 } 0021 0022 SearchPresetModel::~SearchPresetModel() = default; 0023 0024 QHash<int, QByteArray> SearchPresetModel::roleNames() const 0025 { 0026 static const QHash<int, QByteArray> roles{{DisplayNameRole, "displayName"}, {IconRole, "iconName"}}; 0027 return roles; 0028 } 0029 0030 QVariant SearchPresetModel::data(const QModelIndex &index, int role) const 0031 { 0032 if (index.isValid() && checkIndex(index)) { 0033 const QList<KNSCore::Provider::SearchPreset> presets = m_engine->searchPresets(); 0034 const KNSCore::Provider::SearchPreset preset = presets[index.row()]; 0035 0036 if (role == DisplayNameRole) { 0037 if (QString name = preset.displayName; !name.isEmpty()) { 0038 return name; 0039 } 0040 0041 switch (preset.type) { 0042 case KNSCore::Provider::SearchPresetTypes::GoBack: 0043 return i18nc("Knewstuff5", "Back"); 0044 case KNSCore::Provider::SearchPresetTypes::Popular: 0045 return i18nc("Knewstuff5", "Popular"); 0046 case KNSCore::Provider::SearchPresetTypes::Featured: 0047 return i18nc("Knewstuff5", "Featured"); 0048 case KNSCore::Provider::SearchPresetTypes::Start: 0049 return i18nc("Knewstuff5", "Restart"); 0050 case KNSCore::Provider::SearchPresetTypes::New: 0051 return i18nc("Knewstuff5", "New"); 0052 case KNSCore::Provider::SearchPresetTypes::Root: 0053 return i18nc("Knewstuff5", "Home"); 0054 case KNSCore::Provider::SearchPresetTypes::Shelf: 0055 return i18nc("Knewstuff5", "Shelf"); 0056 case KNSCore::Provider::SearchPresetTypes::FolderUp: 0057 return i18nc("Knewstuff5", "Up"); 0058 case KNSCore::Provider::SearchPresetTypes::Recommended: 0059 return i18nc("Knewstuff5", "Recommended"); 0060 case KNSCore::Provider::SearchPresetTypes::Subscription: 0061 return i18nc("Knewstuff5", "Subscriptions"); 0062 case KNSCore::Provider::SearchPresetTypes::AllEntries: 0063 return i18nc("Knewstuff5", "All Entries"); 0064 default: 0065 return i18nc("Knewstuff5", "Search Preset: %1", preset.request.searchTerm); 0066 } 0067 } else if (role == IconRole) { 0068 if (QString name = preset.iconName; !name.isEmpty()) { 0069 return name; 0070 } 0071 0072 switch (preset.type) { 0073 case KNSCore::Provider::SearchPresetTypes::GoBack: 0074 return QStringLiteral("arrow-left"); 0075 case KNSCore::Provider::SearchPresetTypes::Popular: 0076 case KNSCore::Provider::SearchPresetTypes::Featured: 0077 case KNSCore::Provider::SearchPresetTypes::Recommended: 0078 return QStringLiteral("rating"); 0079 case KNSCore::Provider::SearchPresetTypes::New: 0080 return QStringLiteral("change-date-symbolic"); 0081 case KNSCore::Provider::SearchPresetTypes::Start: 0082 return QStringLiteral("start-over"); 0083 case KNSCore::Provider::SearchPresetTypes::Root: 0084 return QStringLiteral("go-home"); 0085 case KNSCore::Provider::SearchPresetTypes::Shelf: 0086 case KNSCore::Provider::SearchPresetTypes::Subscription: 0087 return QStringLiteral("bookmark"); 0088 case KNSCore::Provider::SearchPresetTypes::FolderUp: 0089 return QStringLiteral("arrow-up"); 0090 default: 0091 return QStringLiteral("search"); 0092 } 0093 } 0094 } 0095 return QVariant(); 0096 } 0097 0098 int SearchPresetModel::rowCount(const QModelIndex &parent) const 0099 { 0100 if (parent.isValid()) { 0101 return 0; 0102 } 0103 return m_engine->searchPresets().count(); 0104 } 0105 0106 void SearchPresetModel::loadSearch(const QModelIndex &index) 0107 { 0108 if (index.row() >= rowCount() || !index.isValid()) { 0109 qCWarning(KNEWSTUFFQUICK) << "index SearchPresetModel::loadSearch invalid" << index; 0110 return; 0111 } 0112 const KNSCore::Provider::SearchPreset preset = m_engine->searchPresets().at(index.row()); 0113 m_engine->search(preset.request); 0114 } 0115 0116 #include "moc_searchpresetmodel.cpp"