summaryrefslogtreecommitdiffstats
path: root/src/slxbrowser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/slxbrowser.cpp')
-rw-r--r--src/slxbrowser.cpp115
1 files changed, 115 insertions, 0 deletions
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 <QtWebKitWidgets>
+#include <QWebPage>
+#include <QNetworkReply>
+#include <QSslConfiguration>
+#include <QProgressBar>
+
+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<QSslError>&)),
+ this, SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&)));
+ 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("<html><body style='background:blue;color:white'><br><br><center><h1>Network Access Error</h1><pre id='content'></pre></body></html>");
+ 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<QSslError>& 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);
+}