From c553d24d0ee987654f0f869122816ac45188027a Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Wed, 25 Oct 2017 16:08:33 +0200 Subject: [PATCH] Move GFS weather data url into global setup Summary: The GFS weather data url so far was hard coded. With this commit, it is moved into the global setup (bootstrap file). Also the url type was changed from QUrl to CUrl, which simplified the generation of the url including its query by using CUrl::appendQuery(). Finally it fixes sampleweatherdata, which did not have a CApplication yet. Reviewers: #swift_pilot_client, msutcliffe Reviewed By: #swift_pilot_client, msutcliffe Subscribers: jenkins Tags: #swift_pilot_client Maniphest Tasks: T151 Differential Revision: https://dev.swift-project.org/D57 --- .../share/shared/bootstrap/bootstrap.json | 5 +++- samples/weatherdata/main.cpp | 5 +++- samples/weatherdata/sampleweatherdata.pro | 2 +- src/blackcore/data/globalsetup.cpp | 1 + src/blackcore/data/globalsetup.h | 5 ++++ .../weatherdata/gfs/weatherdatagfs.cpp | 28 +++++++++---------- src/plugins/weatherdata/gfs/weatherdatagfs.h | 3 +- 7 files changed, 30 insertions(+), 19 deletions(-) diff --git a/resources/share/shared/bootstrap/bootstrap.json b/resources/share/shared/bootstrap/bootstrap.json index 3c24c6299..8975cd461 100644 --- a/resources/share/shared/bootstrap/bootstrap.json +++ b/resources/share/shared/bootstrap/bootstrap.json @@ -58,5 +58,8 @@ "url": "https://status.vatsim.net" }] }, - "wasLoaded": true + "wasLoaded": true, + "ncepGlobalForecastSystemUrl": { + "url": "http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p50.pl" + } } diff --git a/samples/weatherdata/main.cpp b/samples/weatherdata/main.cpp index 7e33845a5..95346ba78 100644 --- a/samples/weatherdata/main.cpp +++ b/samples/weatherdata/main.cpp @@ -10,6 +10,7 @@ //! \file //! \ingroup sampleweatherdata +#include "blackcore/application.h" #include "blackmisc/directoryutils.h" #include "blackmisc/loghandler.h" #include "blackmisc/registermetadata.h" @@ -23,11 +24,13 @@ using namespace BlackMisc; using namespace BlackMisc::PhysicalQuantities; +using namespace BlackCore; //! main int main(int argc, char *argv[]) { - QCoreApplication a(argc, argv); + QCoreApplication qa(argc, argv); + CApplication a(CApplicationInfo::Sample); BlackMisc::registerMetadata(); CLogHandler::instance()->install(true); // CLogHandler::instance()->enableConsoleOutput(false); // default disable diff --git a/samples/weatherdata/sampleweatherdata.pro b/samples/weatherdata/sampleweatherdata.pro index 0bfe4dbb5..104cdf96e 100644 --- a/samples/weatherdata/sampleweatherdata.pro +++ b/samples/weatherdata/sampleweatherdata.pro @@ -1,6 +1,6 @@ load(common_pre) -QT += core dbus +QT += core dbus network TARGET = sampleweatherdata TEMPLATE = app diff --git a/src/blackcore/data/globalsetup.cpp b/src/blackcore/data/globalsetup.cpp index ea8699045..bef29c2c5 100644 --- a/src/blackcore/data/globalsetup.cpp +++ b/src/blackcore/data/globalsetup.cpp @@ -54,6 +54,7 @@ namespace BlackCore m_newsUrls = CUrlList({ "http://swift-project.org/" }); m_onlineHelpUrls = CUrlList({ "help.swift-project.org/" }); m_mapUrls = CUrlList({ "map.swift-project.org/" }); + m_ncepGlobalForecastSystemUrl = CUrl("http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p50.pl"); } CUrl CGlobalSetup::getDbIcaoReaderUrl() const diff --git a/src/blackcore/data/globalsetup.h b/src/blackcore/data/globalsetup.h index 33bf69550..536aef434 100644 --- a/src/blackcore/data/globalsetup.h +++ b/src/blackcore/data/globalsetup.h @@ -186,6 +186,9 @@ namespace BlackCore //! Productive settings? void setDevelopment(bool development) { m_development = development; } + //! NCEP GFS Forecasts (0.50 degree grid) data url + BlackMisc::Network::CUrl getNcepGlobalForecastSystemUrl() const { return m_ncepGlobalForecastSystemUrl; } + //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(bool i18n = false) const; @@ -227,6 +230,7 @@ namespace BlackCore BlackMisc::Network::CUrlList m_onlineHelpUrls; //!< online help URLs BlackMisc::Network::CUrlList m_mapUrls; //!< swift map URLs BlackMisc::Network::CServerList m_fsdTestServers; //!< FSD test servers + BlackMisc::Network::CUrl m_ncepGlobalForecastSystemUrl; //!< NCEP GFS url // transient members, to be switched on/off via GUI or set from reader bool m_dbDebugFlag = false; //!< can trigger DEBUG on the server, so you need to know what you are doing @@ -253,6 +257,7 @@ namespace BlackCore BLACK_METAMEMBER(fsdTestServers), BLACK_METAMEMBER(development), BLACK_METAMEMBER(mappingMinimumVersion), + BLACK_METAMEMBER(ncepGlobalForecastSystemUrl), BLACK_METAMEMBER(dbDebugFlag, BlackMisc::DisabledForJson) ); }; diff --git a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp index d8f889669..1996b7b32 100644 --- a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp +++ b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp @@ -24,6 +24,7 @@ using namespace BlackMisc::Geo; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Weather; using namespace BlackMisc::Math; +using namespace BlackMisc::Network; namespace BlackWxPlugin { @@ -71,7 +72,7 @@ namespace BlackWxPlugin return; } - const QUrl url = getDownloadUrl(); + const QUrl url = getDownloadUrl().toQUrl(); CLogMessage(this).debug() << "Started to download GFS data from" << url.toString(); QNetworkRequest request(url); sApp->getFromNetwork(request, { this, &CWeatherDataGfs::ps_parseGfsFile }); @@ -114,9 +115,9 @@ namespace BlackWxPlugin m_parseGribFileWorker->then(this, &CWeatherDataGfs::ps_fetchingWeatherDataFinished); } - QUrl CWeatherDataGfs::getDownloadUrl() const + CUrl CWeatherDataGfs::getDownloadUrl() const { - QString baseurl = "http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p50.pl?"; + CUrl downloadUrl = sApp->getGlobalSetup().getNcepGlobalForecastSystemUrl(); static const QStringList grib2Levels = { @@ -183,24 +184,21 @@ namespace BlackWxPlugin directory = directory.arg(cnow.toString("yyyyMMdd")); directory = directory.arg(hourLastPublishedCycle, 2, 10, QLatin1Char('0')); - QStringList params; - params.reserve(grib2Levels.size() + grib2Variables.size() + 6); - params.append("file=" + filename); + downloadUrl.appendQuery("file", filename); for (const auto &level : grib2Levels) { - params.append("lev_" + level + "=on"); + downloadUrl.appendQuery("lev_" + level, "on"); } for (const auto &variable : grib2Variables) { - params.append("var_" + variable + "=on"); + downloadUrl.appendQuery("var_" + variable, "on"); } - params.append("leftlon=0"); - params.append("rightlon=360"); - params.append("toplat=90"); - params.append("bottomlat=-90"); - params.append("dir=%2F" + directory); - - return QUrl(baseurl + params.join('&')); + downloadUrl.appendQuery("leftlon", "0"); + downloadUrl.appendQuery("rightlon", "360"); + downloadUrl.appendQuery("toplat", "90"); + downloadUrl.appendQuery("bottomlat", "-90"); + downloadUrl.appendQuery("dir", "%2F" + directory); + return downloadUrl; } void CWeatherDataGfs::parseGfsFileImpl(const QByteArray &gribData) diff --git a/src/plugins/weatherdata/gfs/weatherdatagfs.h b/src/plugins/weatherdata/gfs/weatherdatagfs.h index 3fd8cb5f1..aec7e26f6 100644 --- a/src/plugins/weatherdata/gfs/weatherdatagfs.h +++ b/src/plugins/weatherdata/gfs/weatherdatagfs.h @@ -13,6 +13,7 @@ #define BLACKWXPLUGIN_GFS_H #include "g2clib/grib2.h" +#include "blackmisc/network/url.h" #include "blackmisc/weather/gridpoint.h" #include "blackmisc/worker.h" #include "blackcore/weatherdata.h" @@ -136,7 +137,7 @@ namespace BlackWxPlugin double surfaceTemperature = 0; }; - QUrl getDownloadUrl() const; + BlackMisc::Network::CUrl getDownloadUrl() const; void parseGfsFileImpl(const QByteArray &gribData); void findNextGribMessage(unsigned char *buffer, g2int size, g2int iseek, g2int *lskip, g2int *lgrib);