1// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
2// SPDX-FileCopyrightText: 2024 Harald Sitter <sitter@kde.org>
3
4#pragma once
5
6#include "categorymetadata.h"
7#include "provider.h"
8#include "searchpreset.h"
9#include "searchrequest.h"
10
11namespace KNSCompat
12{
13
14inline KNSCore::Provider::SearchRequest searchRequestToLegacy(const KNSCore::SearchRequest &request)
15{
16 return {
17 [mode = request.sortMode()] {
18 switch (mode) {
19 case KNSCore::SortMode::Alphabetical:
20 return KNSCore::Provider::Alphabetical;
21 case KNSCore::SortMode::Downloads:
22 return KNSCore::Provider::Downloads;
23 case KNSCore::SortMode::Newest:
24 return KNSCore::Provider::Newest;
25 case KNSCore::SortMode::Rating:
26 return KNSCore::Provider::Rating;
27 }
28 return KNSCore::Provider::Rating;
29 }(),
30 [filter = request.filter()] {
31 switch (filter) {
32 case KNSCore::Filter::ExactEntryId:
33 return KNSCore::Provider::ExactEntryId;
34 case KNSCore::Filter::Installed:
35 return KNSCore::Provider::Installed;
36 case KNSCore::Filter::Updates:
37 return KNSCore::Provider::Updates;
38 case KNSCore::Filter::None:
39 return KNSCore::Provider::None;
40 }
41 return KNSCore::Provider::None;
42 }(),
43 request.searchTerm(),
44 request.categories(),
45 request.page(),
46 request.pageSize(),
47 // Note that this loses the id but there's nothing we can do about it. It's why we deprecated it.
48 };
49}
50
51inline KNSCore::SearchRequest searchRequestFromLegacy(const KNSCore::Provider::SearchRequest &request)
52{
53 return {[request] {
54 switch (request.sortMode) {
55 case KNSCore::Provider::SortMode::Alphabetical:
56 return KNSCore::SortMode::Alphabetical;
57 case KNSCore::Provider::SortMode::Downloads:
58 return KNSCore::SortMode::Downloads;
59 case KNSCore::Provider::SortMode::Newest:
60 return KNSCore::SortMode::Newest;
61 case KNSCore::Provider::SortMode::Rating:
62 return KNSCore::SortMode::Rating;
63 }
64 Q_ASSERT(false);
65 return KNSCore::SortMode::Rating;
66 }(),
67 [request] {
68 switch (request.filter) {
69 case KNSCore::Provider::Filter::None:
70 return KNSCore::Filter::None;
71 case KNSCore::Provider::Filter::Installed:
72 return KNSCore::Filter::Installed;
73 case KNSCore::Provider::Filter::Updates:
74 return KNSCore::Filter::Updates;
75 case KNSCore::Provider::Filter::ExactEntryId:
76 return KNSCore::Filter::ExactEntryId;
77 }
78 Q_ASSERT(false);
79 return KNSCore::Filter::None;
80 }(),
81 request.searchTerm,
82 request.categories,
83 request.page,
84 request.pageSize};
85}
86
87inline KNSCore::Provider::SearchPreset searchPresetToLegacy(const KNSCore::SearchPreset &preset)
88{
89 return {
90 .request = searchRequestToLegacy(request: preset.request()),
91 .displayName = preset.displayName(),
92 .iconName = preset.iconName(),
93 .type =
94 [type = preset.type()] {
95 switch (type) {
96 case KNSCore::SearchPreset::Type::GoBack:
97 return KNSCore::Provider::SearchPresetTypes::GoBack;
98 case KNSCore::SearchPreset::Type::Popular:
99 return KNSCore::Provider::SearchPresetTypes::Popular;
100 case KNSCore::SearchPreset::Type::Featured:
101 return KNSCore::Provider::SearchPresetTypes::Featured;
102 case KNSCore::SearchPreset::Type::Start:
103 return KNSCore::Provider::SearchPresetTypes::Start;
104 case KNSCore::SearchPreset::Type::New:
105 return KNSCore::Provider::SearchPresetTypes::New;
106 case KNSCore::SearchPreset::Type::Root:
107 return KNSCore::Provider::SearchPresetTypes::Root;
108 case KNSCore::SearchPreset::Type::Shelf:
109 return KNSCore::Provider::SearchPresetTypes::Shelf;
110 case KNSCore::SearchPreset::Type::FolderUp:
111 return KNSCore::Provider::SearchPresetTypes::FolderUp;
112 case KNSCore::SearchPreset::Type::Recommended:
113 return KNSCore::Provider::SearchPresetTypes::Recommended;
114 case KNSCore::SearchPreset::Type::Subscription:
115 return KNSCore::Provider::SearchPresetTypes::Subscription;
116 case KNSCore::SearchPreset::Type::AllEntries:
117 return KNSCore::Provider::SearchPresetTypes::AllEntries;
118 case KNSCore::SearchPreset::Type::NoPresetType:
119 return KNSCore::Provider::SearchPresetTypes::NoPresetType;
120 }
121 return KNSCore::Provider::SearchPresetTypes::NoPresetType;
122 }(),
123 .providerId = preset.providerId(),
124 };
125}
126
127inline KNSCore::Provider::CategoryMetadata categoryMetadataToLegacy(const KNSCore::CategoryMetadata &metadata)
128{
129 return {
130 .id = metadata.id(),
131 .name = metadata.name(),
132 .displayName = metadata.displayName(),
133 };
134}
135
136} // namespace KNSCompat
137

source code of knewstuff/src/core/compat_p.h