8#include "kweathercore_p.h"
10#include <KLazyLocalizedString>
12#include <QStandardPaths>
20CAPPolygon KWeatherCorePrivate::stringToPolygon(
const QString &str)
23#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
30 for (
auto &pair : pairList) {
32 if (coordinate.size() != 2) {
35 bool latOk =
false, lonOk =
false;
36 res.push_back({coordinate.front().toFloat(&latOk), coordinate.back().toFloat(&lonOk)});
37 if (!latOk || !lonOk) {
44QString KWeatherCorePrivate::toFixedString(
double num)
46 std::ostringstream oss;
47 oss << std::fixed << std::setprecision(2) << num;
51QDir KWeatherCorePrivate::getCacheDirectory(
double latitude,
double longitude)
55 + toFixedString(longitude));
57 dir.mkpath(QStringLiteral(
"."));
61 + QStringLiteral(
"/") + toFixedString(longitude));
63 dir.mkpath(QStringLiteral(
"."));
69CAPAlertInfo::Urgency KWeatherCorePrivate::urgencyStringToEnum(
const QString &str)
72 return CAPAlertInfo::Urgency::Immediate;
74 return CAPAlertInfo::Urgency::Expected;
76 return CAPAlertInfo::Urgency::Future;
78 return CAPAlertInfo::Urgency::Past;
80 return CAPAlertInfo::Urgency::UnknownUrgency;
84CAPAlertInfo::Severity KWeatherCorePrivate::severityStringToEnum(
const QString &str)
87 return CAPAlertInfo::Severity::Extreme;
89 return CAPAlertInfo::Severity::Severe;
91 return CAPAlertInfo::Severity::Moderate;
93 return CAPAlertInfo::Severity::Minor;
95 return CAPAlertInfo::Severity::UnknownSeverity;
99CAPAlertInfo::Certainty KWeatherCorePrivate::certaintyStringToEnum(
const QString &str)
102 return CAPAlertInfo::Certainty::Observed;
104 return CAPAlertInfo::Certainty::Likely;
106 return CAPAlertInfo::Certainty::Possible;
108 return CAPAlertInfo::Certainty::Unlikely;
110 return CAPAlertInfo::Certainty::UnknownCertainty;
118 const char *iconName;
120}
static constexpr const WEATHER_ICON_PRIORITY_RANK[] = {
121 {
"weather-clear", 0},
122 {
"weather-clouds", 2},
123 {
"weather-few-clouds", 1},
125 {
"weather-freezing-rain", 6},
126 {
"weather-freezing-scattered-rain", 6},
127 {
"weather-freezing-scattered-rain-storm", 7},
128 {
"weather-freezing-storm", 6},
131 {
"weather-none-available", -1},
132 {
"weather-showers", 5},
133 {
"weather-showers-scattered", 4},
134 {
"weather-showers-scattered-storm", 7},
136 {
"weather-snow-rain", 6},
137 {
"weather-snow-scattered", 4},
138 {
"weather-snow-scattered-storm", 7},
139 {
"weather-snow-storm", 7},
140 {
"weather-storm", 7},
143int KWeatherCorePrivate::weatherIconPriorityRank(
const QString &icon)
145 const auto it = std::lower_bound(std::begin(WEATHER_ICON_PRIORITY_RANK), std::end(WEATHER_ICON_PRIORITY_RANK), icon, [](
const auto &lhs,
const auto &rhs) {
148 if (it != std::end(WEATHER_ICON_PRIORITY_RANK) &&
QLatin1String((*it).iconName) == icon) {
161}
static constexpr const WEATHER_API_DESC_MAP[] = {
162 {
"clearsky_day",
"weather-clear", kli18n(
"Clear")},
163 {
"clearsky_neutral",
"weather-clear", kli18n(
"Clear")},
164 {
"clearsky_night",
"weather-clear-night", kli18n(
"Clear")},
165 {
"cloudy_day",
"weather-clouds", kli18n(
"Cloudy")},
166 {
"cloudy_neutral",
"weather-clouds", kli18n(
"Cloudy")},
167 {
"cloudy_night",
"weather-clouds-night", kli18n(
"Cloudy")},
168 {
"fair_day",
"weather-few-clouds", kli18n(
"Partly Sunny")},
169 {
"fair_neutral",
"weather-few-clouds", kli18n(
"Light Clouds")},
170 {
"fair_night",
"weather-few-clouds-night", kli18n(
"Light Clouds")},
171 {
"fog_day",
"weather-fog", kli18n(
"Fog")},
172 {
"fog_neutral",
"weather-fog", kli18n(
"Fog")},
173 {
"fog_night",
"weather-fog", kli18n(
"Fog")},
175 {
"heavyrain_day",
"weather-showers-day", kli18n(
"Heavy Rain")},
176 {
"heavyrain_neutral",
"weather-showers", kli18n(
"Heavy Rain")},
177 {
"heavyrain_night",
"weather-showers-night", kli18n(
"Heavy Rain")},
178 {
"heavyrainandthunder_day",
"weather-storm-day", kli18n(
"Thunderstorm with Heavy Rain")},
179 {
"heavyrainandthunder_neutral",
"weather-storm", kli18n(
"Thunderstorm with Heavy Rain")},
180 {
"heavyrainandthunder_night",
"weather-storm-night", kli18n(
"Thunderstorm with Heavy Rain")},
181 {
"heavyrainshowers_day",
"weather-showers-day", kli18n(
"Heavy Rain Shower")},
182 {
"heavyrainshowers_neutral",
"weather-showers", kli18n(
"Heavy Rain Shower")},
183 {
"heavyrainshowers_night",
"weather-showers-night", kli18n(
"Heavy Rain Shower")},
184 {
"heavyrainshowersandthunder_day",
"weather-storm-day", kli18n(
"Thunderstorm with Heavy Rain Shower")},
185 {
"heavyrainshowersandthunder_neutral",
"weather-storm", kli18n(
"Thunderstorm with Heavy Rain Shower")},
186 {
"heavyrainshowersandthunder_night",
"weather-storm-night", kli18n(
"Thunderstorm with Heavy Rain Shower")},
188 {
"heavysleet_day",
"weather-freezing-rain", kli18n(
"Heavy Sleet")},
189 {
"heavysleet_neutral",
"weather-freezing-rain", kli18n(
"Heavy Sleet")},
190 {
"heavysleet_night",
"weather-freezing-rain", kli18n(
"Heavy Sleet")},
191 {
"heavysleetandthunder_day",
"weather-freezing-storm", kli18n(
"Thunderstorm with Heavy Sleet")},
192 {
"heavysleetandthunder_neutral",
"weather-freezing-storm", kli18n(
"Thunderstorm with Heavy Sleet")},
193 {
"heavysleetandthunder_night",
"weather-freezing-storm", kli18n(
"Thunderstorm with Heavy Sleet")},
194 {
"heavysleetshowers_day",
"weather-freezing-rain-day", kli18n(
"Heavy Sleet Shower")},
195 {
"heavysleetshowers_neutral",
"weather-freezing-rain", kli18n(
"Heavy Sleet Shower")},
196 {
"heavysleetshowers_night",
"weather-freezing-rain-night", kli18n(
"Heavy Sleet Shower")},
197 {
"heavysleetshowersandthunder_day",
"weather-freezing-storm-day", kli18n(
"Thunderstorm with Heavy Sleet Shower")},
198 {
"heavysleetshowersandthunder_neutral",
"weather-freezing-storm", kli18n(
"Thunderstorm with Heavy Sleet Shower")},
199 {
"heavysleetshowersandthunder_night",
"weather-freezing-storm-night", kli18n(
"Thunderstorm with Heavy Sleet Shower")},
201 {
"heavysnow_day",
"weather-snow", kli18n(
"Heavy Snow")},
202 {
"heavysnow_neutral",
"weather-snow", kli18n(
"Heavy Snow")},
203 {
"heavysnow_night",
"weather-snow", kli18n(
"Heavy Snow")},
204 {
"heavysnowshowers_day",
"weather-snow-day", kli18n(
"Heavy Snow Shower")},
205 {
"heavysnowshowers_neutral",
"weather-snow", kli18n(
"Heavy Snow Shower")},
206 {
"heavysnowshowers_night",
"weather-snow-night", kli18n(
"Heavy Snow Shower")},
207 {
"heavysnowshowersandthunder_day",
"weather-snow-storm-day", kli18n(
"Thunderstorm with Heavy Snow Shower")},
208 {
"heavysnowshowersandthunder_neutral",
"weather-snow-storm", kli18n(
"Thunderstorm with Heavy Snow Shower")},
209 {
"heavysnowshowersandthunder_night",
"weather-snow-storm-night", kli18n(
"Thunderstorm with Heavy Snow Shower")},
211 {
"lightrain_day",
"weather-showers-scattered", kli18n(
"Light Rain")},
212 {
"lightrain_neutral",
"weather-showers-scattered", kli18n(
"Light Rain")},
213 {
"lightrain_night",
"weather-showers-scattered", kli18n(
"Light Rain")},
214 {
"lightrainandthunder_day",
"weather-showers-scattered-storm", kli18n(
"Thunderstorm with Light Rain")},
215 {
"lightrainandthunder_neutral",
"weather-showers-scattered-storm", kli18n(
"Thunderstorm with Light Rain")},
216 {
"lightrainandthunder_night",
"weather-showers-scattered-storm", kli18n(
"Thunderstorm with Light Rain")},
217 {
"lightrainshowers_day",
"weather-showers-scattered-day", kli18n(
"Light Rain Shower")},
218 {
"lightrainshowers_neutral",
"weather-showers-scattered", kli18n(
"Light Rain Shower")},
219 {
"lightrainshowers_night",
"weather-showers-scattered-night", kli18n(
"Light Rain Shower")},
220 {
"lightrainshowersandthunder_day",
"weather-showers-scattered-storm-day", kli18n(
"Thunderstorm with Light Rain Shower")},
221 {
"lightrainshowersandthunder_neutral",
"weather-showers-scattered-storm", kli18n(
"Thunderstorm with Light Rain Shower")},
222 {
"lightrainshowersandthunder_night",
"weather-showers-scattered-storm-night", kli18n(
"Thunderstorm with Light Rain Shower")},
224 {
"lightsleet_day",
"weather-showers-scattered", kli18n(
"Light Sleet")},
225 {
"lightsleet_neutral",
"weather-showers-scattered", kli18n(
"Light Sleet")},
226 {
"lightsleet_night",
"weather-showers-scattered", kli18n(
"Light Sleet")},
227 {
"lightsleetandthunder_day",
"weather-freezing-scattered-rain-storm", kli18n(
"Thunderstorm with Light Sleet")},
228 {
"lightsleetandthunder_neutral",
"weather-freezing-scattered-rain-storm", kli18n(
"Thunderstorm with Light Sleet")},
229 {
"lightsleetandthunder_night",
"weather-freezing-scattered-rain-storm", kli18n(
"Thunderstorm with Light Sleet")},
230 {
"lightsleetshowers_day",
"weather-freezing-scattered-rain-day", kli18n(
"Light Sleet Shower")},
231 {
"lightsleetshowers_neutral",
"weather-freezing-scattered-rain", kli18n(
"Light Sleet Shower")},
232 {
"lightsleetshowers_night",
"weather-freezing-scattered-rain-night", kli18n(
"Light Sleet Shower")},
234 {
"lightsnow_day",
"weather-snow-scattered", kli18n(
"Light Snow")},
235 {
"lightsnow_neutral",
"weather-snow-scattered", kli18n(
"Light Snow")},
236 {
"lightsnow_night",
"weather-snow-scattered", kli18n(
"Light Snow")},
237 {
"lightsnowandthunder_day",
"weather-snow-scattered-storm", kli18n(
"Thunderstorm with Light Snow")},
238 {
"lightsnowandthunder_neutral",
"weather-snow-scattered-storm", kli18n(
"Thunderstorm with Light Snow")},
239 {
"lightsnowandthunder_night",
"weather-snow-scattered-storm", kli18n(
"Thunderstorm with Light Snow")},
240 {
"lightsnowshowers_day",
"weather-snow-scattered-day", kli18n(
"Light Snow Shower")},
241 {
"lightsnowshowers_neutral",
"weather-snow-scattered", kli18n(
"Light Snow Shower")},
242 {
"lightsnowshowers_night",
"weather-snow-scattered-night", kli18n(
"Light Snow Shower")},
244 {
"lightssleetshowersandthunder_day",
"weather-freezing-scattered-rain-storm-day", kli18n(
"Thunderstorm with Light Sleet Shower")},
245 {
"lightssleetshowersandthunder_neutral",
"weather-freezing-scattered-rain-storm", kli18n(
"Thunderstorm with Light Sleet Shower")},
246 {
"lightssleetshowersandthunder_night",
"weather-freezing-scattered-rain-storm-night", kli18n(
"Thunderstorm with Light Sleet Shower")},
247 {
"lightssnowshowersandthunder_day",
"weather-snow-scattered-storm-day", kli18n(
"Thunderstorm with Light Snow Shower")},
248 {
"lightssnowshowersandthunder_neutral",
"weather-snow-scattered-storm", kli18n(
"Thunderstorm with Light Snow Shower")},
249 {
"lightssnowshowersandthunder_night",
"weather-snow-scattered-storm-night", kli18n(
"Thunderstorm with Light Snow Shower")},
251 {
"partlycloudy_day",
"weather-clouds", kli18n(
"Partly Cloudy")},
252 {
"partlycloudy_neutral",
"weather-clouds", kli18n(
"Partly Cloudy")},
253 {
"partlycloudy_night",
"weather-clouds-night", kli18n(
"Partly Cloudy")},
255 {
"rain_day",
"weather-showers", kli18n(
"Rain")},
256 {
"rain_neutral",
"weather-showers", kli18n(
"Rain")},
257 {
"rain_night",
"weather-showers", kli18n(
"Rain")},
258 {
"rainandthunder_day",
"weather-storm", kli18n(
"Thunderstorm with Rain")},
259 {
"rainandthunder_neutral",
"weather-storm", kli18n(
"Thunderstorm with Rain")},
260 {
"rainandthunder_night",
"weather-storm", kli18n(
"Thunderstorm with Rain")},
261 {
"rainshowers_day",
"weather-showers-day", kli18n(
"Rain Shower")},
262 {
"rainshowers_neutral",
"weather-showers", kli18n(
"Rain Shower")},
263 {
"rainshowers_night",
"weather-showers-night", kli18n(
"Rain Shower")},
264 {
"rainshowersandthunder_day",
"weather-storm-day", kli18n(
"Thunderstorm with Rain Shower")},
265 {
"rainshowersandthunder_neutral",
"weather-storm", kli18n(
"Thunderstorm with Rain Shower")},
266 {
"rainshowersandthunder_night",
"weather-storm-night", kli18n(
"Thunderstorm with Rain Shower")},
268 {
"sleet_day",
"weather-freezing-rain", kli18n(
"Sleet")},
269 {
"sleet_neutral",
"weather-freezing-rain", kli18n(
"Sleet")},
270 {
"sleet_night",
"weather-freezing-rain", kli18n(
"Sleet")},
271 {
"sleetandthunder_day",
"weather-storm", kli18n(
"Thunderstorm with Sleet")},
272 {
"sleetandthunder_neutral",
"weather-storm", kli18n(
"Thunderstorm with Sleet")},
273 {
"sleetandthunder_night",
"weather-storm", kli18n(
"Thunderstorm with Sleet")},
274 {
"sleetshowers_day",
"weather-freezing-rain-day", kli18n(
"Sleet Shower")},
275 {
"sleetshowers_neutral",
"weather-freezing-rain", kli18n(
"Sleet Shower")},
276 {
"sleetshowers_night",
"weather-freezing-rain-night", kli18n(
"Sleet Shower")},
277 {
"sleetshowersandthunder_day",
"weather-freezing-storm-day", kli18n(
"Thunderstorm with Sleet Shower")},
278 {
"sleetshowersandthunder_neutral",
"weather-freezing-storm", kli18n(
"Thunderstorm with Sleet Shower")},
279 {
"sleetshowersandthunder_night",
"weather-freezing-storm-night", kli18n(
"Thunderstorm with Sleet Shower")},
281 {
"snow_day",
"weather-snow", kli18n(
"Snow")},
282 {
"snow_neutral",
"weather-snow", kli18n(
"Snow")},
283 {
"snow_night",
"weather-snow", kli18n(
"Snow")},
284 {
"snowandthunder_day",
"weather-snow-storm", kli18n(
"Thunderstorm with Snow")},
285 {
"snowandthunder_neutral",
"weather-snow-storm", kli18n(
"Thunderstorm with Snow")},
286 {
"snowandthunder_night",
"weather-snow-storm", kli18n(
"Thunderstorm with Snow")},
287 {
"snowshowers_day",
"weather-snow-day", kli18n(
"Snow Shower")},
288 {
"snowshowers_neutral",
"weather-snow", kli18n(
"Snow Shower")},
289 {
"snowshowers_night",
"weather-snow-night", kli18n(
"Snow Shower")},
290 {
"snowshowersandthunder_day",
"weather-snow-storm-day", kli18n(
"Thunderstorm with Snow Shower")},
291 {
"snowshowersandthunder_neutral",
"weather-snow-storm", kli18n(
"Thunderstorm with Snow Shower")},
292 {
"snowshowersandthunder_night",
"weather-snow-storm-night", kli18n(
"Thunderstorm with Snow Shower")},
296ResolvedWeatherDesc KWeatherCorePrivate::resolveAPIWeatherDesc(
const QString &desc)
298 const auto key = desc.toUtf8();
299 const auto it = std::lower_bound(std::begin(WEATHER_API_DESC_MAP), std::end(WEATHER_API_DESC_MAP), key, [](
const auto &lhs,
const auto &rhs) {
300 return std::strcmp(lhs.key, rhs.constData()) < 0;
302 if (it != std::end(WEATHER_API_DESC_MAP) && std::strcmp((*it).key, key.constData()) == 0) {
303 return ResolvedWeatherDesc(
QLatin1String((*it).icon), (*it).desc.toString());
KIOCORE_EXPORT QString dir(const QString &fileClass)
QString writableLocation(StandardLocation type)
QString fromStdString(const std::string &str)
void reserve(qsizetype size)
QList< QStringView > split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const