From f5663edb4e1a53b6d80de909f2888ffd9ee1e170 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 7 Jul 2017 15:21:28 +0200 Subject: FIRST!!!1 --- src/slxbrowser.cpp | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/slxbrowser.cpp (limited to 'src/slxbrowser.cpp') diff --git a/src/slxbrowser.cpp b/src/slxbrowser.cpp new file mode 100644 index 0000000..aec5201 --- /dev/null +++ b/src/slxbrowser.cpp @@ -0,0 +1,115 @@ +#include "slxbrowser.h" +#include "webview.h" +#include +#include +#include +#include +#include + +SLXbrowser::SLXbrowser(QString url, bool fullscreen, bool ignoreSslErrors) + : QMainWindow(NULL), + _url(url), + _ignoreSslErrors(ignoreSslErrors) +{ + if (fullscreen) { + this->showFullScreen(); + this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); + } + //QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); + QWidget *w = new QWidget; + QLayout *l = new QVBoxLayout; + _browser = new WebView; + _progress = new QProgressBar; + _progress->hide(); + l->addWidget(_browser); + l->addWidget(_progress); + l->setMargin(0); + l->setSpacing(0); + l->setContentsMargins(0,0,0,0); + w->setContentsMargins(0,0,0,0); + w->setLayout(l); + this->setCentralWidget(w); + + _reset.setSingleShot(true); + connect(&_reset, SIGNAL(timeout()), this, SLOT(reloadInitial())); + + connect(_browser, SIGNAL(loadStarted()), this, SLOT(loadStarted())); + connect(_browser, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); + connect(_browser, SIGNAL(loadProgress(int)), this, SLOT(loadProgress(int))); + // + QWebPage *page = _browser->page(); + QNetworkAccessManager *nam = new QNetworkAccessManager(this); + connect(nam, SIGNAL(sslErrors(QNetworkReply*, const QList&)), + this, SLOT(sslErrors(QNetworkReply*, const QList&))); + connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*))); + page->setNetworkAccessManager(nam); + page->mainFrame()->load(url); + // + _browser->show(); +} + +SLXbrowser::~SLXbrowser() +{ +} + +void SLXbrowser::loadStarted() +{ + _reset.stop(); + _normalError.clear(); + _sslErrors.clear(); + _progress->setValue(0); + _progress->show(); +} + +void SLXbrowser::loadFinished(bool ok) +{ + _progress->hide(); + if (!ok) { + _browser->page()->mainFrame()->setHtml("

Network Access Error

");
+		QWebElement el = _browser->page()->mainFrame()->documentElement().findFirst("#content");
+		QString str;
+		if (!_sslErrors.empty()) {
+			str.append("SSL Errors:\n");
+			for (QSslError err : _sslErrors) {
+				str.append(err.errorString());
+				str.append('\n');
+			}
+		} else if (_normalError.length() != 0) {
+			str.append("Load Error:\n");
+			str.append(_normalError);
+		} else {
+			str.append("Unknown Error");
+		}
+		str.append("\n\n\n\n" + QDateTime::currentDateTime().toString());
+		el.setPlainText(str);
+		_sslErrors.clear();
+		_normalError.clear();
+		_reset.start(30000);
+	}
+}
+
+void SLXbrowser::loadProgress(int progress)
+{
+	_progress->setValue(progress);
+}
+
+void SLXbrowser::sslErrors(QNetworkReply* reply, const QList& errors)
+{
+	if (_ignoreSslErrors) {
+		reply->ignoreSslErrors();
+		return;
+	}
+	_sslErrors.append(errors);
+}
+
+void SLXbrowser::requestFinished(QNetworkReply *reply)
+{
+	if (reply->error() != QNetworkReply::NoError) {
+		_normalError = reply->errorString();
+	}
+}
+
+void SLXbrowser::reloadInitial()
+{
+	_browser->page()->mainFrame()->load(_url);
+}
-- 
cgit v1.2.3-55-g7522