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 | |
15 | SearchPresetModel::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 | |
25 | SearchPresetModel::~SearchPresetModel() = default; |
26 | |
27 | QHash<int, QByteArray> SearchPresetModel::roleNames() const |
28 | { |
29 | static const QHash<int, QByteArray> roles{{DisplayNameRole, "displayName" }, {IconRole, "iconName" }}; |
30 | return roles; |
31 | } |
32 | |
33 | QVariant 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 | |
105 | int SearchPresetModel::rowCount(const QModelIndex &parent) const |
106 | { |
107 | if (parent.isValid()) { |
108 | return 0; |
109 | } |
110 | return m_engine->d->searchPresets.count(); |
111 | } |
112 | |
113 | void 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 | |