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"