1/*
2 SPDX-FileCopyrightText: 2021 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6
7#include "searchpresetmodel.h"
8
9#include "knewstuffquick_debug.h"
10
11#include <KLocalizedString>
12
13#include "../core/enginebase_p.h"
14
15SearchPresetModel::SearchPresetModel(KNSCore::EngineBase *engine)
16 : QAbstractListModel(engine)
17 , m_engine(engine)
18{
19 connect(sender: m_engine, signal: qOverload<const QList<KNSCore::SearchPreset> &>(&KNSCore::EngineBase::signalSearchPresetsLoaded), context: this, slot: [this]() {
20 beginResetModel();
21 endResetModel();
22 });
23}
24
25SearchPresetModel::~SearchPresetModel() = default;
26
27QHash<int, QByteArray> SearchPresetModel::roleNames() const
28{
29 static const QHash<int, QByteArray> roles{{DisplayNameRole, "displayName"}, {IconRole, "iconName"}};
30 return roles;
31}
32
33QVariant SearchPresetModel::data(const QModelIndex &index, int role) const
34{
35 if (index.isValid() && checkIndex(index)) {
36 const QList<KNSCore::SearchPreset> presets = m_engine->d->searchPresets;
37 const KNSCore::SearchPreset &preset = presets[index.row()];
38
39 if (role == DisplayNameRole) {
40 if (QString name = preset.displayName(); !name.isEmpty()) {
41 return name;
42 }
43
44 switch (preset.type()) {
45 case KNSCore::SearchPreset::Type::GoBack:
46 return i18nc("Knewstuff5", "Back");
47 case KNSCore::SearchPreset::Type::Popular:
48 return i18nc("Knewstuff5", "Popular");
49 case KNSCore::SearchPreset::Type::Featured:
50 return i18nc("Knewstuff5", "Featured");
51 case KNSCore::SearchPreset::Type::Start:
52 return i18nc("Knewstuff5", "Restart");
53 case KNSCore::SearchPreset::Type::New:
54 return i18nc("Knewstuff5", "New");
55 case KNSCore::SearchPreset::Type::Root:
56 return i18nc("Knewstuff5", "Home");
57 case KNSCore::SearchPreset::Type::Shelf:
58 return i18nc("Knewstuff5", "Shelf");
59 case KNSCore::SearchPreset::Type::FolderUp:
60 return i18nc("Knewstuff5", "Up");
61 case KNSCore::SearchPreset::Type::Recommended:
62 return i18nc("Knewstuff5", "Recommended");
63 case KNSCore::SearchPreset::Type::Subscription:
64 return i18nc("Knewstuff5", "Subscriptions");
65 case KNSCore::SearchPreset::Type::AllEntries:
66 return i18nc("Knewstuff5", "All Entries");
67 case KNSCore::SearchPreset::Type::NoPresetType:
68 break;
69 }
70 return i18nc("Knewstuff5", "Search Preset: %1", preset.request().searchTerm());
71 }
72 if (role == IconRole) {
73 if (QString name = preset.iconName(); !name.isEmpty()) {
74 return name;
75 }
76
77 switch (preset.type()) {
78 case KNSCore::SearchPreset::Type::GoBack:
79 return QStringLiteral("arrow-left");
80 case KNSCore::SearchPreset::Type::Popular:
81 case KNSCore::SearchPreset::Type::Featured:
82 case KNSCore::SearchPreset::Type::Recommended:
83 return QStringLiteral("rating");
84 case KNSCore::SearchPreset::Type::New:
85 return QStringLiteral("change-date-symbolic");
86 case KNSCore::SearchPreset::Type::Start:
87 return QStringLiteral("start-over");
88 case KNSCore::SearchPreset::Type::Root:
89 return QStringLiteral("go-home");
90 case KNSCore::SearchPreset::Type::Shelf:
91 case KNSCore::SearchPreset::Type::Subscription:
92 return QStringLiteral("bookmark");
93 case KNSCore::SearchPreset::Type::FolderUp:
94 return QStringLiteral("arrow-up");
95 case KNSCore::SearchPreset::Type::AllEntries:
96 case KNSCore::SearchPreset::Type::NoPresetType:
97 break;
98 }
99 return QStringLiteral("search");
100 }
101 }
102 return QVariant();
103}
104
105int SearchPresetModel::rowCount(const QModelIndex &parent) const
106{
107 if (parent.isValid()) {
108 return 0;
109 }
110 return m_engine->d->searchPresets.count();
111}
112
113void SearchPresetModel::loadSearch(const QModelIndex &index)
114{
115 if (index.row() >= rowCount() || !index.isValid()) {
116 qCWarning(KNEWSTUFFQUICK) << "index SearchPresetModel::loadSearch invalid" << index;
117 return;
118 }
119 const auto preset = m_engine->d->searchPresets.at(i: index.row());
120 m_engine->search(request: preset.request());
121}
122
123#include "moc_searchpresetmodel.cpp"
124

source code of knewstuff/src/qtquick/searchpresetmodel.cpp