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