From c0e458a4375d14dd4a8cbdad3c65be5c5746d6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Mon, 23 Jul 2018 23:53:58 +0200 Subject: [PATCH] Added support for HTTP/2 --- gpxsee.pro | 1 + src/GUI/gui.cpp | 15 +++++++++++++++ src/GUI/optionsdialog.cpp | 10 ++++++++++ src/GUI/optionsdialog.h | 7 +++++++ src/GUI/settings.h | 2 ++ src/map/downloader.cpp | 7 +++++++ src/map/downloader.h | 6 ++++++ 7 files changed, 48 insertions(+) diff --git a/gpxsee.pro b/gpxsee.pro index 55ce5c73..46cb2120 100644 --- a/gpxsee.pro +++ b/gpxsee.pro @@ -284,3 +284,4 @@ win32 { DEFINES += _USE_MATH_DEFINES } DEFINES += APP_VERSION=\\\"$$VERSION\\\" +greaterThan(QT_VERSION, 5.10.0): DEFINES += ENABLE_HTTP2 diff --git a/src/GUI/gui.cpp b/src/GUI/gui.cpp index 9a766e50..dd4072e8 100644 --- a/src/GUI/gui.cpp +++ b/src/GUI/gui.cpp @@ -920,6 +920,10 @@ void GUI::openOptions() QPixmapCache::setCacheLimit(options.pixmapCache * 1024); if (options.connectionTimeout != _options.connectionTimeout) Downloader::setTimeout(options.connectionTimeout); +#ifdef ENABLE_HTTP2 + if (options.enableHTTP2 != _options.enableHTTP2) + Downloader::enableHTTP2(options.enableHTTP2); +#endif // ENABLE_HTTP2 if (reload) reloadFile(); @@ -1755,6 +1759,10 @@ void GUI::writeSettings() settings.setValue(POI_RADIUS_SETTING, _options.poiRadius); if (_options.useOpenGL != USE_OPENGL_DEFAULT) settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL); +#ifdef ENABLE_HTTP2 + if (_options.enableHTTP2 != ENABLE_HTTP2_DEFAULT) + settings.setValue(ENABLE_HTTP2_SETTING, _options.enableHTTP2); +#endif // ENABLE_HTTP2 if (_options.pixmapCache != PIXMAP_CACHE_DEFAULT) settings.setValue(PIXMAP_CACHE_SETTING, _options.pixmapCache); if (_options.connectionTimeout != CONNECTION_TIMEOUT_DEFAULT) @@ -1987,6 +1995,10 @@ void GUI::readSettings() .toInt(); _options.useOpenGL = settings.value(USE_OPENGL_SETTING, USE_OPENGL_DEFAULT) .toBool(); +#ifdef ENABLE_HTTP2 + _options.enableHTTP2 = settings.value(ENABLE_HTTP2_SETTING, + ENABLE_HTTP2_DEFAULT).toBool(); +#endif // ENABLE_HTTP2 _options.pixmapCache = settings.value(PIXMAP_CACHE_SETTING, PIXMAP_CACHE_DEFAULT).toInt(); _options.connectionTimeout = settings.value(CONNECTION_TIMEOUT_SETTING, @@ -2052,6 +2064,9 @@ void GUI::readSettings() QPixmapCache::setCacheLimit(_options.pixmapCache * 1024); Downloader::setTimeout(_options.connectionTimeout); +#ifdef ENABLE_HTTP2 + Downloader::enableHTTP2(_options.enableHTTP2); +#endif // ENABLE_HTTP2 settings.endGroup(); } diff --git a/src/GUI/optionsdialog.cpp b/src/GUI/optionsdialog.cpp index 8f531738..f4a5c2a5 100644 --- a/src/GUI/optionsdialog.cpp +++ b/src/GUI/optionsdialog.cpp @@ -440,6 +440,10 @@ QWidget *OptionsDialog::createSystemPage() { _useOpenGL = new QCheckBox(tr("Use OpenGL")); _useOpenGL->setChecked(_options->useOpenGL); +#ifdef ENABLE_HTTP2 + _enableHTTP2 = new QCheckBox(tr("Enable HTTP/2")); + _enableHTTP2->setChecked(_options->enableHTTP2); +#endif // ENABLE_HTTP2 _pixmapCache = new QSpinBox(); _pixmapCache->setMinimum(16); @@ -458,6 +462,9 @@ QWidget *OptionsDialog::createSystemPage() formLayout->addRow(tr("Connection timeout:"), _connectionTimeout); QFormLayout *checkboxLayout = new QFormLayout(); +#ifdef ENABLE_HTTP2 + checkboxLayout->addWidget(_enableHTTP2); +#endif // ENABLE_HTTP2 checkboxLayout->addWidget(_useOpenGL); QWidget *systemTab = new QWidget(); @@ -568,6 +575,9 @@ void OptionsDialog::accept() _options->poiRadius = poiRadius; _options->useOpenGL = _useOpenGL->isChecked(); +#ifdef ENABLE_HTTP2 + _options->enableHTTP2 = _enableHTTP2->isChecked(); +#endif // ENABLE_HTTP2 _options->pixmapCache = _pixmapCache->value(); _options->connectionTimeout = _connectionTimeout->value(); diff --git a/src/GUI/optionsdialog.h b/src/GUI/optionsdialog.h index ad9b3d3c..c28d562e 100644 --- a/src/GUI/optionsdialog.h +++ b/src/GUI/optionsdialog.h @@ -5,6 +5,7 @@ #include "palette.h" #include "units.h" + class ColorBox; class StyleComboBox; class OddSpinBox; @@ -48,6 +49,9 @@ struct Options { int poiRadius; // System bool useOpenGL; +#ifdef ENABLE_HTTP2 + bool enableHTTP2; +#endif // ENABLE_HTTP2 int pixmapCache; int connectionTimeout; // Print/Export @@ -119,6 +123,9 @@ private: QSpinBox *_pixmapCache; QSpinBox *_connectionTimeout; QCheckBox *_useOpenGL; +#ifdef ENABLE_HTTP2 + QCheckBox *_enableHTTP2; +#endif // ENABLE_HTTP2 // Print/Export QRadioButton *_wysiwyg; QRadioButton *_hires; diff --git a/src/GUI/settings.h b/src/GUI/settings.h index 77462a8e..2796881f 100644 --- a/src/GUI/settings.h +++ b/src/GUI/settings.h @@ -130,6 +130,8 @@ #define POI_RADIUS_DEFAULT (int)(IMPERIAL_UNITS() ? MIINM : KMINM) #define USE_OPENGL_SETTING "useOpenGL" #define USE_OPENGL_DEFAULT false +#define ENABLE_HTTP2_SETTING "enableHTTP2" +#define ENABLE_HTTP2_DEFAULT true #define PIXMAP_CACHE_SETTING "pixmapCache" #define PIXMAP_CACHE_DEFAULT 64 /* MB */ #define CONNECTION_TIMEOUT_SETTING "connectionTimeout" diff --git a/src/map/downloader.cpp b/src/map/downloader.cpp index 45e81c7f..6b17b93c 100644 --- a/src/map/downloader.cpp +++ b/src/map/downloader.cpp @@ -81,6 +81,9 @@ private: QNetworkAccessManager *Downloader::_manager = 0; int Downloader::_timeout = 30; +#ifdef ENABLE_HTTP2 +bool Downloader::_http2 = true; +#endif // ENABLE_HTTP2 bool Downloader::doDownload(const Download &dl, const QByteArray &authorization, const Redirect *redirect) @@ -108,6 +111,10 @@ bool Downloader::doDownload(const Download &dl, request.setRawHeader("User-Agent", USER_AGENT); if (!authorization.isNull()) request.setRawHeader("Authorization", authorization); +#ifdef ENABLE_HTTP2 + request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, + QVariant(_http2)); +#endif // ENABLE_HTTP2 QNetworkReply *reply = _manager->get(request); if (reply && reply->isRunning()) { diff --git a/src/map/downloader.h b/src/map/downloader.h index 6dea1d42..41c964c8 100644 --- a/src/map/downloader.h +++ b/src/map/downloader.h @@ -46,6 +46,9 @@ public: void clearErrors() {_errorDownloads.clear();} static void setTimeout(int timeout) {_timeout = timeout;} +#ifdef ENABLE_HTTP2 + static void enableHTTP2(bool enable) {_http2 = enable;} +#endif // ENABLE_HTTP2 static void setNetworkAccessManager(QNetworkAccessManager *manager) {_manager = manager;} @@ -69,6 +72,9 @@ private: QHash _errorDownloads; static int _timeout; +#ifdef ENABLE_HTTP2 + static bool _http2; +#endif // ENABLE_HTTP2 static QNetworkAccessManager *_manager; };