|
|
b5cc75 |
diff -ur kde-workspace-4.11.7-weather-fix-bbcukmet-clear-sky/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp kde-workspace-4.11.7-weather-fix-bbcukmet-crash-kde#332392/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp
|
|
|
b5cc75 |
--- kde-workspace-4.11.7-weather-fix-bbcukmet-clear-sky/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp 2014-03-24 02:27:37.000000000 +0100
|
|
|
b5cc75 |
+++ kde-workspace-4.11.7-weather-fix-bbcukmet-crash-kde#332392/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp 2014-03-25 16:00:40.000000000 +0100
|
|
|
b5cc75 |
@@ -23,6 +23,13 @@
|
|
|
b5cc75 |
|
|
|
b5cc75 |
#include <KIO/Job>
|
|
|
b5cc75 |
#include <KUnitConversion/Converter>
|
|
|
b5cc75 |
+#include <KDateTime>
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
+WeatherData::WeatherData()
|
|
|
b5cc75 |
+ : obsTime("N/A"), iconPeriodHour(12), iconPeriodMinute(0),
|
|
|
b5cc75 |
+ longitude(0.), latitude(0.), condition("N/A")
|
|
|
b5cc75 |
+{
|
|
|
b5cc75 |
+}
|
|
|
b5cc75 |
|
|
|
b5cc75 |
// ctor, dtor
|
|
|
b5cc75 |
UKMETIon::UKMETIon(QObject *parent, const QVariantList &args)
|
|
|
b5cc75 |
@@ -553,16 +560,31 @@
|
|
|
b5cc75 |
|
|
|
b5cc75 |
// Get the observation time and condition
|
|
|
b5cc75 |
int splitIndex = conditionString.lastIndexOf(':');
|
|
|
b5cc75 |
- QStringRef conditionData = conditionString.midRef(splitIndex + 1); // Include ':'
|
|
|
b5cc75 |
- data.obsTime = conditionString.midRef(0, splitIndex).toString();
|
|
|
b5cc75 |
+ if (splitIndex >= 0) {
|
|
|
b5cc75 |
+ QString conditionData = conditionString.mid(splitIndex + 1); // Skip ':'
|
|
|
b5cc75 |
+ data.obsTime = conditionString.left(splitIndex);
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
+ if (data.obsTime.contains('-')) {
|
|
|
b5cc75 |
+ // Saturday - 13:00 CET
|
|
|
b5cc75 |
+ // Saturday - 12:00 GMT
|
|
|
b5cc75 |
+ m_dateFormat = KDateTime::fromString(data.obsTime.section('-', 1, 1).trimmed(),
|
|
|
b5cc75 |
+ "%H:%M %Z").toLocalZone().dateTime();
|
|
|
b5cc75 |
+ if (m_dateFormat.isValid()) {
|
|
|
b5cc75 |
+ data.iconPeriodHour = m_dateFormat.toString("hh").toInt();
|
|
|
b5cc75 |
+ data.iconPeriodMinute = m_dateFormat.toString("mm").toInt();
|
|
|
b5cc75 |
+ }
|
|
|
b5cc75 |
+ } else {
|
|
|
b5cc75 |
+ m_dateFormat = QDateTime();
|
|
|
b5cc75 |
+ }
|
|
|
b5cc75 |
|
|
|
b5cc75 |
- // Saturday - 13:00 CET
|
|
|
b5cc75 |
- // Saturday - 12:00 GMT
|
|
|
b5cc75 |
- m_dateFormat = QDateTime::fromString(data.obsTime.split("-")[1].trimmed(), "hh:mm 'GMT'");
|
|
|
b5cc75 |
- data.iconPeriodHour = m_dateFormat.toString("hh").toInt();
|
|
|
b5cc75 |
- data.iconPeriodMinute = m_dateFormat.toString("mm").toInt();
|
|
|
b5cc75 |
+ if (conditionData.contains(',')) {
|
|
|
b5cc75 |
+ data.condition = conditionData.section(',', 0, 0).trimmed();
|
|
|
b5cc75 |
|
|
|
b5cc75 |
- data.condition = conditionData.toString().split(',')[0].trimmed();
|
|
|
b5cc75 |
+ if (data.condition == "null") {
|
|
|
b5cc75 |
+ data.condition = "N/A";
|
|
|
b5cc75 |
+ }
|
|
|
b5cc75 |
+ }
|
|
|
b5cc75 |
+ }
|
|
|
b5cc75 |
|
|
|
b5cc75 |
} else if (xml.name() == "link") {
|
|
|
b5cc75 |
m_place[source].forecastHTMLUrl = xml.readElementText();
|
|
|
b5cc75 |
@@ -705,12 +727,12 @@
|
|
|
b5cc75 |
|
|
|
b5cc75 |
// Sometimes only one of min or max are reported
|
|
|
b5cc75 |
if (high.indexIn(line.split(',')[1]) == -1)
|
|
|
b5cc75 |
- forecast->tempHigh = 0;
|
|
|
b5cc75 |
+ forecast->tempHigh = UNKNOWN_TEMPERATURE;
|
|
|
b5cc75 |
else
|
|
|
b5cc75 |
forecast->tempHigh = high.cap(1).toInt();
|
|
|
b5cc75 |
|
|
|
b5cc75 |
if (low.indexIn(line.split(',')[1]) == -1)
|
|
|
b5cc75 |
- forecast->tempLow = 0;
|
|
|
b5cc75 |
+ forecast->tempLow = UNKNOWN_TEMPERATURE;
|
|
|
b5cc75 |
else
|
|
|
b5cc75 |
forecast->tempLow = low.cap(1).toInt();
|
|
|
b5cc75 |
|
|
|
b5cc75 |
@@ -777,16 +799,21 @@
|
|
|
b5cc75 |
|
|
|
b5cc75 |
const double lati = periodLatitude(source);
|
|
|
b5cc75 |
const double longi = periodLongitude(source);
|
|
|
b5cc75 |
- const Plasma::DataEngine::Data timeData = m_timeEngine->query(
|
|
|
b5cc75 |
- QString("Local|Solar|Latitude=%1|Longitude=%2|DateTime=%3")
|
|
|
b5cc75 |
- .arg(lati).arg(longi).arg(m_dateFormat.toString(Qt::ISODate)));
|
|
|
b5cc75 |
-
|
|
|
b5cc75 |
- // Tell applet which icon to use for conditions and provide mapping for condition type to the icons to display
|
|
|
b5cc75 |
- if (timeData["Corrected Elevation"].toDouble() >= 0.0) {
|
|
|
b5cc75 |
- //kDebug() << "Using daytime icons\n";
|
|
|
b5cc75 |
- data.insert("Condition Icon", getWeatherIcon(dayIcons(), condition(source)));
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
+ if (m_dateFormat.isValid()) {
|
|
|
b5cc75 |
+ const Plasma::DataEngine::Data timeData = m_timeEngine->query(
|
|
|
b5cc75 |
+ QString("Local|Solar|Latitude=%1|Longitude=%2|DateTime=%3")
|
|
|
b5cc75 |
+ .arg(lati).arg(longi).arg(m_dateFormat.toString(Qt::ISODate)));
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
+ // Tell applet which icon to use for conditions and provide mapping for condition type to the icons to display
|
|
|
b5cc75 |
+ if (timeData["Corrected Elevation"].toDouble() >= 0.0) {
|
|
|
b5cc75 |
+ //kDebug() << "Using daytime icons\n";
|
|
|
b5cc75 |
+ data.insert("Condition Icon", getWeatherIcon(dayIcons(), condition(source)));
|
|
|
b5cc75 |
+ } else {
|
|
|
b5cc75 |
+ data.insert("Condition Icon", getWeatherIcon(nightIcons(), condition(source)));
|
|
|
b5cc75 |
+ }
|
|
|
b5cc75 |
} else {
|
|
|
b5cc75 |
- data.insert("Condition Icon", getWeatherIcon(nightIcons(), condition(source)));
|
|
|
b5cc75 |
+ data.insert("Condition Icon", getWeatherIcon(dayIcons(), condition(source)));
|
|
|
b5cc75 |
}
|
|
|
b5cc75 |
|
|
|
b5cc75 |
data.insert("Latitude", lati);
|
|
|
b5cc75 |
@@ -969,12 +996,22 @@
|
|
|
b5cc75 |
m_weatherData[source].forecasts[i]->period.replace("Friday", i18nc("Short for Friday", "Fri"));
|
|
|
b5cc75 |
}
|
|
|
b5cc75 |
|
|
|
b5cc75 |
+ int tempHigh = m_weatherData[source].forecasts[i]->tempHigh;
|
|
|
b5cc75 |
+ QString tempHighStr = (tempHigh == UNKNOWN_TEMPERATURE)
|
|
|
b5cc75 |
+ ? QString::fromLatin1("N/A")
|
|
|
b5cc75 |
+ : QString::number(tempHigh);
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
+ int tempLow = m_weatherData[source].forecasts[i]->tempLow;
|
|
|
b5cc75 |
+ QString tempLowStr = (tempLow == UNKNOWN_TEMPERATURE)
|
|
|
b5cc75 |
+ ? QString::fromLatin1("N/A")
|
|
|
b5cc75 |
+ : QString::number(tempLow);
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
forecastData.append(QString("%1|%2|%3|%4|%5|%6") \
|
|
|
b5cc75 |
.arg(m_weatherData[source].forecasts[i]->period) \
|
|
|
b5cc75 |
.arg(m_weatherData[source].forecasts[i]->iconName) \
|
|
|
b5cc75 |
.arg(m_weatherData[source].forecasts[i]->summary) \
|
|
|
b5cc75 |
- .arg(m_weatherData[source].forecasts[i]->tempHigh) \
|
|
|
b5cc75 |
- .arg(m_weatherData[source].forecasts[i]->tempLow) \
|
|
|
b5cc75 |
+ .arg(tempHighStr) \
|
|
|
b5cc75 |
+ .arg(tempLowStr) \
|
|
|
b5cc75 |
.arg("N/U"));
|
|
|
b5cc75 |
//.arg(m_weatherData[source].forecasts[i]->windSpeed)
|
|
|
b5cc75 |
//arg(m_weatherData[source].forecasts[i]->windDirection));
|
|
|
b5cc75 |
diff -ur kde-workspace-4.11.7-weather-fix-bbcukmet-clear-sky/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h kde-workspace-4.11.7-weather-fix-bbcukmet-crash-kde#332392/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h
|
|
|
b5cc75 |
--- kde-workspace-4.11.7-weather-fix-bbcukmet-clear-sky/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h 2014-02-28 00:09:20.000000000 +0100
|
|
|
b5cc75 |
+++ kde-workspace-4.11.7-weather-fix-bbcukmet-crash-kde#332392/plasma/generic/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h 2014-03-24 22:34:59.000000000 +0100
|
|
|
b5cc75 |
@@ -24,6 +24,7 @@
|
|
|
b5cc75 |
|
|
|
b5cc75 |
#include <QtXml/QXmlStreamReader>
|
|
|
b5cc75 |
#include <QDateTime>
|
|
|
b5cc75 |
+#include <climits>
|
|
|
b5cc75 |
|
|
|
b5cc75 |
#include "../ion.h"
|
|
|
b5cc75 |
#include "../dataengineconsumer.h"
|
|
|
b5cc75 |
@@ -39,6 +40,8 @@
|
|
|
b5cc75 |
{
|
|
|
b5cc75 |
|
|
|
b5cc75 |
public:
|
|
|
b5cc75 |
+ WeatherData();
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
QString place;
|
|
|
b5cc75 |
QString stationName;
|
|
|
b5cc75 |
// Current observation information.
|
|
|
b5cc75 |
@@ -171,6 +174,8 @@
|
|
|
b5cc75 |
|
|
|
b5cc75 |
QDateTime m_dateFormat;
|
|
|
b5cc75 |
QStringList m_sourcesToReset;
|
|
|
b5cc75 |
+
|
|
|
b5cc75 |
+ static const int UNKNOWN_TEMPERATURE = INT_MIN;
|
|
|
b5cc75 |
};
|
|
|
b5cc75 |
|
|
|
b5cc75 |
K_EXPORT_PLASMA_DATAENGINE(bbcukmet, UKMETIon)
|