#include "slxbrowser.h" #include "webview.h" #include #include #include #include #include SLXbrowser::SLXbrowser(QString url, bool fullscreen, bool ignoreSslErrors, int reloadIntervalSeconds) : QMainWindow(nullptr), _url(url), _ignoreSslErrors(ignoreSslErrors), _unsupportedUri(false), _reloadIntervalMs(reloadIntervalSeconds * 1000) { 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(); if (_reloadIntervalMs > 0) { _reset.start(_reloadIntervalMs + 10000); } _normalError.clear(); _sslErrors.clear(); _progress->setValue(0); _progress->show(); } void SLXbrowser::loadFinished(bool ok) { _progress->hide(); if (!_browser->wasAbortedDownload() && !_unsupportedUri && !ok) { _browser->page()->mainFrame()->setHtml("

Page Load 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);
	} else if (_reloadIntervalMs > 0) {
        _reset.start(_reloadIntervalMs);
	}
    if (_unsupportedUri && !ok) {
        QMessageBox::warning(this, QString::fromUtf8("Denied"),
                QString::fromUtf8("This URL type is not supported.\n\n"
                        "Diese Art Link wird nicht unterstützt.\n\n"
                        "(z.B. Mail)"));
    }
    _unsupportedUri = false;
}

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) {
        _unsupportedUri = false;
    } else if (reply->error() == QNetworkReply::ProtocolUnknownError) {
        _unsupportedUri = true;
    } else {
        qDebug() << reply->error();
		_normalError = reply->errorString();
	}
}

void SLXbrowser::reloadInitial()
{
	_browser->page()->mainFrame()->load(_url);
}