From d6d10c69ba454a6e555733815680acdfc0ee5402 Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Sat, 25 Aug 2012 20:18:38 +0200 Subject: fix meecast non-automatic C -> F conversion --- libsowatch/weathernotification.cpp | 21 +++++++++++++++++++++ libsowatch/weathernotification.h | 6 ++++++ meecastweather/meecastweather.cpp | 26 +++++++++++++++++++++++++- meecastweather/meecastweather.h | 3 +++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/libsowatch/weathernotification.cpp b/libsowatch/weathernotification.cpp index fa82f3d..ddfd60b 100644 --- a/libsowatch/weathernotification.cpp +++ b/libsowatch/weathernotification.cpp @@ -6,3 +6,24 @@ WeatherNotification::WeatherNotification(QObject *parent) : Notification(parent) { } + +qreal WeatherNotification::convertTemperature(qreal temp, Unit from, Unit to) +{ + if (from == to) { + return temp; + } else if (from == Celsius && to == Fahrenheit) { + return temp * (9.0f/5.0f) + 32.0f; + } else if (from == Fahrenheit && to == Celsius) { + return (temp - 32.0f) * (5.0f/9.0f); + } +} + + +int WeatherNotification::convertTemperature(int temp, Unit from, Unit to) +{ + if (from == to) { + return temp; + } else { + return qRound(convertTemperature(static_cast(temp), from, to)); + } +} diff --git a/libsowatch/weathernotification.h b/libsowatch/weathernotification.h index de3152a..843a844 100644 --- a/libsowatch/weathernotification.h +++ b/libsowatch/weathernotification.h @@ -32,8 +32,14 @@ public: virtual WeatherType forecast() = 0; virtual int temperature() = 0; virtual Unit temperatureUnits() = 0; + + /** Quite useful helper function. */ + static qreal convertTemperature(qreal temp, Unit from, Unit to); + static int convertTemperature(int temp, Unit from, Unit to); }; + + } #endif // WEATHERNOTIFICATION_H diff --git a/meecastweather/meecastweather.cpp b/meecastweather/meecastweather.cpp index 0263a82..fa62ab7 100644 --- a/meecastweather/meecastweather.cpp +++ b/meecastweather/meecastweather.cpp @@ -145,6 +145,11 @@ void MeeCastWeather::dismiss() // Do nothing } +int MeeCastWeather::convertTemperatureToUserUnit(int temp, Unit unit) +{ + return convertTemperature(temp, unit, _tempUnit); +} + void MeeCastWeather::fileChanged(const QString &path) { qDebug() << "meecast config file changed: " << path; @@ -207,7 +212,24 @@ void MeeCastWeather::parseStationFile() qDebug() << "meecast reading weather info"; QDomElement root = doc.documentElement(); - QDomNodeList list = root.elementsByTagName("period"); + QDomNodeList list; + Unit tempUnit = _tempUnit; + + list = root.elementsByTagName("units"); + if (!list.isEmpty()) { + QDomElement units = list.at(0).toElement(); + list = units.elementsByTagName("t"); + if (!list.isEmpty()) { + QDomElement e = list.at(0).toElement(); + if (e.text() == "C") { + tempUnit = Celsius; + } else if (e.text() == "F") { + tempUnit = Fahrenheit; + } + } + } + + list = root.elementsByTagName("period"); for (int index = 0; index < list.size(); index++) { QDomElement e = list.item(index).toElement(); if (e.attribute("current") == "true") { @@ -223,6 +245,8 @@ void MeeCastWeather::parseStationFile() int temp = e.firstChildElement("temperature").text().toInt(); qDebug() << "temp" << temp; + temp = convertTemperatureToUserUnit(temp, tempUnit); + qDebug() << " -> " << temp; if (temp != _lastTemp) { anythingChanged = true; _lastTemp = temp; diff --git a/meecastweather/meecastweather.h b/meecastweather/meecastweather.h index 9526726..a1ac393 100644 --- a/meecastweather/meecastweather.h +++ b/meecastweather/meecastweather.h @@ -31,6 +31,9 @@ public: void activate(); void dismiss(); +private: + int convertTemperatureToUserUnit(int temp, Unit unit); + private slots: void fileChanged(const QString& path); void parseConfigFile(); -- cgit v1.2.3