From 233356bc2aa05c0a82e959c8349cbe9cd363b501aa0e55e5ffebb6ddb06ce9c4 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Sat, 31 Mar 2018 14:27:53 +0000 Subject: [PATCH] Accepting request 592763 from home:wolfi323:test - Add Fix-weather-engine-BBC-provider.patch to adapt the BBC weather engine provider to changes in the RSS feed that broke it (kde#392510) OBS-URL: https://build.opensuse.org/request/show/592763 OBS-URL: https://build.opensuse.org/package/show/KDE:Frameworks5/plasma5-workspace?expand=0&rev=392 --- Fix-weather-engine-BBC-provider.patch | 175 ++++++++++++++++++++++++++ plasma5-workspace.changes | 7 ++ plasma5-workspace.spec | 1 + 3 files changed, 183 insertions(+) create mode 100644 Fix-weather-engine-BBC-provider.patch diff --git a/Fix-weather-engine-BBC-provider.patch b/Fix-weather-engine-BBC-provider.patch new file mode 100644 index 0000000..81a91c0 --- /dev/null +++ b/Fix-weather-engine-BBC-provider.patch @@ -0,0 +1,175 @@ +From 558a29efc4c9f055799d23ee6c75464e24489e5a Mon Sep 17 00:00:00 2001 +From: "Friedrich W. H. Kossebau" +Date: Fri, 30 Mar 2018 17:10:32 +0200 +Subject: [weather dataengine] Fix BBC provider to adapt to change RSS feed + +Summary: +The urls of the BBC weather feeds seem to have changed, resulting in the +dataengine to use no longer existing urls. + +I could not find the change documented somewhere and also do not know about +a contact person with BBC, so done based on examples on website, trial & +error. +There are some data issues visible in the new data feeds, so chance is the +feeds might see more rework and might break things again. But without any +contract or formal agreement we can just play catch-up. + +BUG: 392510 + +Test Plan: +Existing configured weather applets using a location from a BBC weather +service work again. +Newly configured weather applets using a BBC weather service also work. + +Reviewers: #plasma, jriddell, cfeck + +Reviewed By: cfeck + +Subscribers: cfeck, plasma-devel + +Tags: #plasma + +Differential Revision: https://phabricator.kde.org/D11808 +--- + dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp | 47 +++++++++++++--------- + dataengines/weather/ions/bbcukmet/ion_bbcukmet.h | 4 +- + 2 files changed, 31 insertions(+), 20 deletions(-) + +diff --git a/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp b/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp +index 6acaa9b..fcf0bae 100644 +--- a/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp ++++ b/dataengines/weather/ions/bbcukmet/ion_bbcukmet.cpp +@@ -266,7 +266,19 @@ bool UKMETIon::updateIonSource(const QString& source) + setData(source, QStringLiteral("validate"), QStringLiteral("bbcukmet|malformed")); + return true; + } +- m_place[QStringLiteral("bbcukmet|") +sourceAction[2]].XMLurl = sourceAction[3]; ++ ++ XMLMapInfo& place = m_place[QStringLiteral("bbcukmet|") + sourceAction[2]]; ++ ++ // backward compatibility after rss feed url change in 2018/03 ++ place.sourceExtraArg = sourceAction[3]; ++ if (place.sourceExtraArg.startsWith(QLatin1String("http://open.live.bbc.co.uk/"))) { ++ // Old data source id stored the full (now outdated) observation feed url ++ // http://open.live.bbc.co.uk/weather/feeds/en/STATIOID/observations.rss ++ // as extra argument, so extract the id from that ++ place.stationId = place.sourceExtraArg.section(QLatin1Char('/'), -2, -2); ++ } else { ++ place.stationId = place.sourceExtraArg; ++ } + getXMLData(sourceAction[0] + QLatin1Char('|') + sourceAction[2]); + return true; + } +@@ -288,7 +300,7 @@ void UKMETIon::getXMLData(const QString& source) + } + } + +- const QUrl url(m_place[source].XMLurl); ++ const QUrl url(QStringLiteral("https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/") + m_place[source].stationId); + + KIO::TransferJob* getJob = KIO::get(url, KIO::Reload, KIO::HideProgressInfo); + getJob->addMetaData(QStringLiteral("cookies"), QStringLiteral("none")); // Disable displaying cookies +@@ -328,13 +340,8 @@ void UKMETIon::findPlace(const QString& place, const QString& source) + void UKMETIon::getFiveDayForecast(const QString& source) + { + XMLMapInfo& place = m_place[source]; +- QUrl xmlMap(place.forecastHTMLUrl); +- +- const QString stationID = xmlMap.path().section(QLatin1Char('/'), -1); +- +- place.XMLforecastURL = QStringLiteral("http://open.live.bbc.co.uk/weather/feeds/en/") + stationID + QStringLiteral("/3dayforecast.rss") + xmlMap.query(); + +- const QUrl url(place.XMLforecastURL); ++ const QUrl url(QStringLiteral("https://weather-broker-cdn.api.bbci.co.uk/en/forecast/rss/3day/") + place.stationId); + + KIO::TransferJob* getJob = KIO::get(url, KIO::Reload, KIO::HideProgressInfo); + getJob->addMetaData(QStringLiteral("cookies"), QStringLiteral("none")); // Disable displaying cookies +@@ -362,8 +369,6 @@ void UKMETIon::readSearchHTMLData(const QString& source, const QByteArray& html) + const QString fullName = result.value(QStringLiteral("fullName")).toString(); + + if (!id.isEmpty() && !fullName.isEmpty()) { +- const QString url = QStringLiteral("http://open.live.bbc.co.uk/weather/feeds/en/") + id + QStringLiteral("/observations.rss"); +- + QString tmp = QStringLiteral("bbcukmet|") + fullName; + + // Duplicate places can exist +@@ -372,7 +377,7 @@ void UKMETIon::readSearchHTMLData(const QString& source, const QByteArray& html) + counter++; + } + XMLMapInfo& place = m_place[tmp]; +- place.XMLurl = url; ++ place.stationId = id; + place.place = fullName; + m_locations.append(tmp); + } +@@ -561,6 +566,9 @@ void UKMETIon::parseWeatherForecast(const QString& source, QXmlStreamReader& xml + if (xml.isStartElement()) { + if (elementName == QLatin1String("item")) { + parseFiveDayForecast(source, xml); ++ } else if (elementName == QLatin1String("link") && ++ xml.namespaceUri().isEmpty()) { ++ m_place[source].forecastHTMLUrl = xml.readElementText(); + } else { + parseUnknownElement(xml); + } +@@ -644,9 +652,6 @@ void UKMETIon::parseWeatherObservation(const QString& source, WeatherData& data, + } + } + +- } else if (elementName == QLatin1String("link")) { +- m_place[source].forecastHTMLUrl = xml.readElementText(); +- + } else if (elementName == QLatin1String("description")) { + QString observeString = xml.readElementText(); + const QStringList observeData = observeString.split(QLatin1Char(':')); +@@ -871,7 +876,7 @@ void UKMETIon::validate(const QString& source) + QString placeList; + for (const QString& place : qAsConst(m_locations)) { + const QString p = place.section(QLatin1Char('|'), 1, 1); +- placeList.append(QStringLiteral("|place|") + p + QStringLiteral("|extra|") + m_place[place].XMLurl); ++ placeList.append(QStringLiteral("|place|") + p + QStringLiteral("|extra|") + m_place[place].stationId); + } + if (m_locations.count() > 1) { + setData(source, QStringLiteral("validate"), +@@ -897,12 +902,18 @@ void UKMETIon::updateWeather(const QString& source) + QString weatherSource = source; + // TODO: why the replacement here instead of just a new string? + weatherSource.replace(QStringLiteral("bbcukmet|"), QStringLiteral("bbcukmet|weather|")); +- weatherSource.append(QLatin1Char('|') + place.XMLurl); ++ weatherSource.append(QLatin1Char('|') + place.sourceExtraArg); + + Plasma::DataEngine::Data data; + +- data.insert(QStringLiteral("Place"), weatherData.stationName); +- data.insert(QStringLiteral("Station"), weatherData.stationName); ++ // work-around for buggy observation RSS feed missing the station name ++ QString stationName = weatherData.stationName; ++ if (stationName.isEmpty() || stationName == QLatin1String(",")) { ++ stationName = source.section(QLatin1Char('|'), 1, 1); ++ } ++ ++ data.insert(QStringLiteral("Place"), stationName); ++ data.insert(QStringLiteral("Station"), stationName); + if (weatherData.observationDateTime.isValid()) { + data.insert(QStringLiteral("Observation Timestamp"), weatherData.observationDateTime); + } +diff --git a/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h b/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h +index a1026f4..d9d3ad3 100644 +--- a/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h ++++ b/dataengines/weather/ions/bbcukmet/ion_bbcukmet.h +@@ -155,10 +155,10 @@ private: + + private: + struct XMLMapInfo { ++ QString stationId; + QString place; +- QString XMLurl; + QString forecastHTMLUrl; +- QString XMLforecastURL; ++ QString sourceExtraArg; + }; + + // Key dicts +-- +cgit v0.11.2 + diff --git a/plasma5-workspace.changes b/plasma5-workspace.changes index f441828..2acc2e7 100644 --- a/plasma5-workspace.changes +++ b/plasma5-workspace.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Sat Mar 31 12:34:04 UTC 2018 - wbauer@tmo.at + +- Add Fix-weather-engine-BBC-provider.patch to adapt the BBC + weather engine provider to changes in the RSS feed that broke it + (kde#392510) + ------------------------------------------------------------------- Wed Mar 28 11:46:36 UTC 2018 - fabian@ritter-vogt.de diff --git a/plasma5-workspace.spec b/plasma5-workspace.spec index f3d0914..37a7b8b 100644 --- a/plasma5-workspace.spec +++ b/plasma5-workspace.spec @@ -36,6 +36,7 @@ Url: http://www.kde.org/ Source: http://download.kde.org/stable/plasma/%{version}/plasma-workspace-%{version}.tar.xz Source1: baselibs.conf # PATCHES 000-100 and above are from upstream 5.12 branch +Patch0: Fix-weather-engine-BBC-provider.patch # PATCHES 101-500 are from upstream master/5.13 branch Patch201: 0001-Call-KLocalizedString-setApplicationDomain-after-Q-A.patch Patch202: 0002-Add-platform-detection-to-KWorkspace-library-to-adju.patch