@@ -12,6 +12,7 @@
|
||||
#include <QtGui/QMainWindow>
|
||||
#include <QtGui/QLineEdit>
|
||||
#include <QtGui/QProgressBar>
|
||||
#include <QtGui/QComboBox>
|
||||
#include <QtGui/QSlider>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QPrinter>
|
||||
@@ -22,7 +23,6 @@
|
||||
#include <QtWebKit/QWebFrame>
|
||||
#include <QtWebKit/QWebHistory>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include <QtNetwork/QNetworkAccessManager>
|
||||
#include <QtNetwork/QSslError>
|
||||
#include <QtNetwork/QNetworkProxy>
|
||||
#include <QtCore/QTemporaryFile>
|
||||
@@ -32,6 +32,8 @@
|
||||
|
||||
#include <smartcardauth.hxx>
|
||||
#include <downloadmanager.hxx>
|
||||
#include <settings.hxx>
|
||||
#include <sslclientnetworkmanager.hxx>
|
||||
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
@@ -43,57 +45,19 @@
|
||||
|
||||
extern SmartCardAuth _scAuth;
|
||||
|
||||
class SslClientAuthNetworkAccessManager: public QNetworkAccessManager {
|
||||
Q_OBJECT;
|
||||
public:
|
||||
|
||||
SslClientAuthNetworkAccessManager(QObject* parent = 0):
|
||||
QNetworkAccessManager(parent) {
|
||||
LOG;
|
||||
}
|
||||
|
||||
virtual ~SslClientAuthNetworkAccessManager() {
|
||||
LOG;
|
||||
}
|
||||
|
||||
Q_SIGNALS:
|
||||
|
||||
void created(QNetworkReply*);
|
||||
|
||||
protected:
|
||||
|
||||
virtual QNetworkReply* createRequest(Operation op,
|
||||
const QNetworkRequest& req,
|
||||
QIODevice* outgoingData = 0 ) {
|
||||
LOG<<req.url();
|
||||
QNetworkReply* rep
|
||||
(QNetworkAccessManager::createRequest(op, req, outgoingData));
|
||||
created(rep);
|
||||
LOG<<"Reply to URL: "<<rep->url().toString();
|
||||
return rep;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
|
||||
typedef std::map<QString, std::pair<QString, QString> > MimeTypes;
|
||||
|
||||
public:
|
||||
|
||||
Browser(const QString& url, MimeTypes mimeTypes, bool kiosk = false):
|
||||
_url(0), _find(0), _home(url), _kiosk(kiosk), _mimetypes(mimeTypes) {
|
||||
LOG<<url;
|
||||
Browser(const QStringList& urls, Settings::MimeTypes mimeTypes,
|
||||
QSettings* settings=0, bool kiosk = false):
|
||||
_url(0), _clearUrl(0), _addBookmark(0), _find(0),
|
||||
_home(urls.at(0)), _kiosk(kiosk),
|
||||
_settings(mimeTypes, this, settings, !kiosk) {
|
||||
LOG<<urls;
|
||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||
QWebSettings::globalSettings()->setAttribute
|
||||
(QWebSettings::PluginsEnabled, true);
|
||||
if (!check(url))
|
||||
throw std::runtime_error(tr("access to URL %1 not allowed")
|
||||
.arg(url).toStdString());
|
||||
setupUi(this);
|
||||
statusBar()->addPermanentWidget(_progress = new QProgressBar());
|
||||
statusBar()->addPermanentWidget(_zoom = new QSlider(Qt::Horizontal));
|
||||
@@ -101,10 +65,14 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
_zoom->setMaximum(100);
|
||||
_zoom->setValue(10);
|
||||
assert(connect(_zoom, SIGNAL(valueChanged(int)), SLOT(zoom(int))));
|
||||
_toolbar->addWidget(_url = new QLineEdit(_toolbar));
|
||||
_toolbar->addWidget(_url = new QComboBox(_toolbar));
|
||||
on_actionNewTab_triggered();
|
||||
_url->setText(url);
|
||||
assert(connect(_url, SIGNAL(returnPressed()), SLOT(load())));
|
||||
_url->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
|
||||
QSizePolicy::Fixed));
|
||||
_url->setEditable(!kiosk);
|
||||
_url->addItems(urls);
|
||||
assert(connect(_url, SIGNAL(currentIndexChanged(const QString&)),
|
||||
SLOT(load(const QString&))));
|
||||
assert(connect(&_networkManager,
|
||||
SIGNAL(extendedContextInitialization(ssl_ctx_st*,
|
||||
QSslSocket*)),
|
||||
@@ -123,9 +91,19 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
if (_kiosk) {
|
||||
_menu->hide();
|
||||
_url->setEnabled(false);
|
||||
} else {
|
||||
assert(connect(_url->lineEdit(), SIGNAL(returnPressed()),
|
||||
SLOT(load())));
|
||||
_toolbar->addWidget(_clearUrl = new QPushButton("X", _toolbar));
|
||||
assert(connect(_clearUrl, SIGNAL(clicked(bool)),
|
||||
_url, SLOT(clearEditText())));
|
||||
assert(connect(_clearUrl, SIGNAL(clicked(bool)),
|
||||
_url, SLOT(setFocus())));
|
||||
_toolbar->addWidget(_addBookmark = new QPushButton("+", _toolbar));
|
||||
assert(connect(_addBookmark, SIGNAL(clicked(bool)),
|
||||
SLOT(addBookmark())));
|
||||
}
|
||||
load(url);
|
||||
load();
|
||||
}
|
||||
|
||||
~Browser() {
|
||||
@@ -222,7 +200,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
void load() {
|
||||
LOG;
|
||||
load(_url->text());
|
||||
load(_url->currentText());
|
||||
}
|
||||
|
||||
void load(QString page) {
|
||||
@@ -253,6 +231,10 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
startDownload(page);
|
||||
}
|
||||
|
||||
void addBookmark() {
|
||||
_url->addItem(_url->currentText());
|
||||
}
|
||||
|
||||
void startDownload(QUrl url) {
|
||||
LOG<<url.toString();
|
||||
statusBar()->showMessage(tr("Reading: %1").arg(url.toString()));
|
||||
@@ -546,8 +528,8 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void on__tabs_currentChanged(int index) {
|
||||
_url->setText(dynamic_cast<QWebView*>(_tabs->currentWidget())
|
||||
->url().toString());
|
||||
_url->setEditText(dynamic_cast<QWebView*>(_tabs->currentWidget())
|
||||
->url().toString());
|
||||
activateTab();
|
||||
}
|
||||
|
||||
@@ -652,6 +634,10 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
QMessageBox::aboutQt(this);
|
||||
}
|
||||
|
||||
void on_actionSettings_triggered() {
|
||||
_settings.show();
|
||||
}
|
||||
|
||||
//@name QWebView slots
|
||||
//@{
|
||||
|
||||
@@ -659,7 +645,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
LOG<<url.toString();
|
||||
if (sender()!=_tabs->currentWidget()) return;
|
||||
LOG<<"signal on current tab";
|
||||
if (_url) _url->setText(url.toString());
|
||||
if (_url) _url->setEditText(url.toString());
|
||||
}
|
||||
|
||||
void linkClicked(const QUrl& url) { //!@todo
|
||||
@@ -1044,13 +1030,14 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
LOG<<"URL:"<<reply->url().toString();
|
||||
LOG<<"File:"<<reply->url().toLocalFile();
|
||||
LOG<<"Path:"<<reply->url().path();
|
||||
MimeTypes::iterator it
|
||||
(_mimetypes.find(reply->header(QNetworkRequest::ContentTypeHeader)
|
||||
.toString()));
|
||||
if (it!=_mimetypes.end()) {
|
||||
Settings::MimeTypes::const_iterator it
|
||||
(_settings.mimetypes().find
|
||||
(reply->header(QNetworkRequest::ContentTypeHeader).toString()));
|
||||
if (it!=_settings.mimetypes().end()) {
|
||||
QTemporaryFile *file =
|
||||
new QTemporaryFile(QDir::tempPath()+QDir::separator()
|
||||
+"swisssurferXXXXXX."+it->second.first, this);
|
||||
+"swisssurferXXXXXX."
|
||||
+it.value().toStringList().at(0), this);
|
||||
file->open();
|
||||
file->write(reply->readAll());
|
||||
file->close();
|
||||
@@ -1058,7 +1045,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
_downloadProcesses[process] = file;
|
||||
assert(connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
|
||||
SLOT(processFinished())));
|
||||
QStringList args(it->second.second.split(" ")
|
||||
QStringList args(it.value().toStringList().at(1).split(" ")
|
||||
.replaceInStrings("<FILENAME>", file->fileName()));
|
||||
QString prg(args.takeFirst());
|
||||
LOG<<"Running:"<<prg<<args.join(" ");
|
||||
@@ -1164,7 +1151,9 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
private:
|
||||
|
||||
QLineEdit* _url;
|
||||
QComboBox* _url;
|
||||
QPushButton* _clearUrl;
|
||||
QPushButton* _addBookmark;
|
||||
QLineEdit* _find;
|
||||
QSlider* _zoom;
|
||||
QProgressBar* _progress;
|
||||
@@ -1177,7 +1166,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
DownloadManager _downloadManager;
|
||||
typedef std::map<QProcess*, QTemporaryFile*> DownloadProcesses;
|
||||
DownloadProcesses _downloadProcesses;
|
||||
MimeTypes _mimetypes;
|
||||
Settings _settings;
|
||||
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user