Blame SOURCES/kde-workspace-4.11.7-weather-fix-bbcukmet-crash-kde#332392.patch

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)