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
This commit is contained in:
parent
8d7ada2be5
commit
233356bc2a
175
Fix-weather-engine-BBC-provider.patch
Normal file
175
Fix-weather-engine-BBC-provider.patch
Normal file
@ -0,0 +1,175 @@
|
||||
From 558a29efc4c9f055799d23ee6c75464e24489e5a Mon Sep 17 00:00:00 2001
|
||||
From: "Friedrich W. H. Kossebau" <kossebau@kde.org>
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user