File indexing completed on 2024-05-05 17:34:02
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 <Plasma/DataContainer> 0014 #include <Plasma/DataEngine> 0015 0016 // KF 0017 #include <KConfigGroup> 0018 #include <KLocalizedString> 0019 #include <KUnitConversion/Value> 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 Plasma::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 0037 WeatherApplet::~WeatherApplet() 0038 { 0039 } 0040 0041 void WeatherApplet::init() 0042 { 0043 migrateConfig(); 0044 setDefaultUnits(); 0045 } 0046 0047 // Old configuration was stored via config() and without further config sub group 0048 // [Containments][18][Applets][101][Configuration] 0049 // main.xml based config storage though uses additional subgroups using the name attribute of 0050 // the <group> containers, so e.g. <group name="General"> would use 0051 // [Containments][18][Applets][101][Configuration][General] 0052 void WeatherApplet::migrateConfig() 0053 { 0054 KConfigGroup oldCfg = config(); 0055 0056 const bool isConfigMigrated = oldCfg.readEntry(QStringLiteral("configMigrated"), false); 0057 if (isConfigMigrated) { 0058 return; 0059 } 0060 0061 const QString pluginId = pluginMetaData().pluginId(); 0062 0063 auto migrateKey = [&oldCfg, pluginId](const QString &key, const QString &group) { 0064 if (oldCfg.hasKey(key)) { 0065 qInfo() << pluginId << ": Moving config key" << key << "to group" << group; 0066 KConfigGroup newCfg = KConfigGroup(&oldCfg, group); 0067 const auto value = oldCfg.readEntry(key); 0068 newCfg.writeEntry(key, value); 0069 oldCfg.deleteEntry(key); 0070 } 0071 }; 0072 0073 qInfo() << pluginId << ": Migrate settings to plasma XML config"; 0074 0075 // Appearance 0076 migrateKey(QStringLiteral("showTemperatureInTooltip"), QStringLiteral("Appearance")); 0077 migrateKey(QStringLiteral("showWindInTooltip"), QStringLiteral("Appearance")); 0078 migrateKey(QStringLiteral("showPressureInTooltip"), QStringLiteral("Appearance")); 0079 migrateKey(QStringLiteral("showHumidityInTooltip"), QStringLiteral("Appearance")); 0080 migrateKey(QStringLiteral("showTemperatureInCompactMode"), QStringLiteral("Appearance")); 0081 // Units 0082 migrateKey(QStringLiteral("temperatureUnit"), QStringLiteral("Units")); 0083 migrateKey(QStringLiteral("speedUnit"), QStringLiteral("Units")); 0084 migrateKey(QStringLiteral("pressureUnit"), QStringLiteral("Units")); 0085 migrateKey(QStringLiteral("visibilityUnit"), QStringLiteral("Units")); 0086 // WeatherSource 0087 migrateKey(QStringLiteral("updateInterval"), QStringLiteral("WeatherStation")); 0088 migrateKey(QStringLiteral("source"), QStringLiteral("WeatherStation")); 0089 0090 oldCfg.writeEntry(QStringLiteral("configMigrated"), true); 0091 } 0092 0093 // Plasma XML configuration is loaded at runtime, so it's not possible to set locale aware defaults. 0094 // We set them here if the corresponding key is not already in the configuration 0095 void WeatherApplet::setDefaultUnits() 0096 { 0097 KConfigGroup cfg = config().group(QStringLiteral("Units")); 0098 const bool isMetric = (QLocale().measurementSystem() == QLocale::MetricSystem); 0099 0100 auto setLocaleAwareDefault = [&cfg, isMetric](const QString &key, KUnitConversion::UnitId metricDefault, KUnitConversion::UnitId imperialDefault) { 0101 if (!cfg.hasKey(key)) { 0102 cfg.writeEntry(key, static_cast<int>(isMetric ? metricDefault : imperialDefault)); 0103 } 0104 }; 0105 0106 setLocaleAwareDefault(QStringLiteral("temperatureUnit"), KUnitConversion::Celsius, KUnitConversion::Fahrenheit); 0107 setLocaleAwareDefault(QStringLiteral("speedUnit"), KUnitConversion::MeterPerSecond, KUnitConversion::MilePerHour); 0108 setLocaleAwareDefault(QStringLiteral("pressureUnit"), KUnitConversion::Hectopascal, KUnitConversion::InchesOfMercury); 0109 setLocaleAwareDefault(QStringLiteral("visibilityUnit"), KUnitConversion::Kilometer, KUnitConversion::Mile); 0110 } 0111 0112 K_PLUGIN_CLASS(WeatherApplet) 0113 0114 #include "weatherapplet.moc"