File indexing completed on 2024-05-12 05:29:38

0001 /*
0002  *   SPDX-FileCopyrightText: 2007-2009 Shawn Starr <shawn.starr@rogers.com>
0003  *   SPDX-FileCopyrightText: 2008 Marco Martin <notmart@gmail.com>
0004  *   SPDX-FileCopyrightText: 2012 Luís Gabriel Lima <lampih@gmail.com>
0005  *   SPDX-FileCopyrightText: 2017-2018 Friedrich W. H. Kossebau <kossebau@kde.org>
0006  *   SPDX-FileCopyrightText: 2022 Ismael Asensio <isma.af@gmail.com>
0007  *
0008  *   SPDX-License-Identifier: GPL-2.0-or-later
0009  */
0010 
0011 #include "weatherapplet.h"
0012 
0013 #include <Plasma5Support/DataContainer>
0014 #include <Plasma5Support/DataEngine>
0015 
0016 // KF
0017 #include <KConfigGroup>
0018 #include <KLocalizedString>
0019 #include <KUnitConversion/Unit>
0020 
0021 using namespace KUnitConversion;
0022 
0023 WeatherApplet::WeatherApplet(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
0024     : Plasma::Applet(parent, data, args)
0025 {
0026     Plasma5Support::DataEngine *dataengine = dataEngine(QStringLiteral("weather"));
0027     const QVariantList plugins = dataengine->containerForSource(QLatin1String("ions"))->data().values();
0028     for (const QVariant &plugin : plugins) {
0029         const QStringList pluginInfo = plugin.toString().split(QLatin1Char('|'));
0030         if (pluginInfo.count() > 1) {
0031             m_providers[pluginInfo[1]] = pluginInfo[0];
0032         }
0033     }
0034     Q_EMIT providersChanged();
0035 
0036     setDefaultUnits();
0037 }
0038 
0039 WeatherApplet::~WeatherApplet()
0040 {
0041 }
0042 
0043 // Plasma XML configuration is loaded at runtime, so it's not possible to set locale aware defaults.
0044 // We set them here if the corresponding key is not already in the configuration
0045 void WeatherApplet::setDefaultUnits()
0046 {
0047     KConfigGroup cfg = config().group(QStringLiteral("Units"));
0048     const bool isMetric = (QLocale().measurementSystem() == QLocale::MetricSystem);
0049 
0050     auto setLocaleAwareDefault = [&cfg, isMetric](const QString &key, KUnitConversion::UnitId metricDefault, KUnitConversion::UnitId imperialDefault) {
0051         if (!cfg.hasKey(key)) {
0052             cfg.writeEntry(key, static_cast<int>(isMetric ? metricDefault : imperialDefault));
0053         }
0054     };
0055 
0056     setLocaleAwareDefault(QStringLiteral("temperatureUnit"), KUnitConversion::Celsius, KUnitConversion::Fahrenheit);
0057     setLocaleAwareDefault(QStringLiteral("speedUnit"), KUnitConversion::MeterPerSecond, KUnitConversion::MilePerHour);
0058     setLocaleAwareDefault(QStringLiteral("pressureUnit"), KUnitConversion::Hectopascal, KUnitConversion::InchesOfMercury);
0059     setLocaleAwareDefault(QStringLiteral("visibilityUnit"), KUnitConversion::Kilometer, KUnitConversion::Mile);
0060 }
0061 
0062 K_PLUGIN_CLASS(WeatherApplet)
0063 
0064 #include "weatherapplet.moc"