closes #9; closes #10; closes #13

This commit is contained in:
Marc Wäckerlin
2011-01-18 14:40:19 +00:00
parent 412bbea12b
commit fbf345e75c
10 changed files with 1337 additions and 1016 deletions

View File

@@ -4,3 +4,8 @@ Zum Konfigurieren muss der Pfad zur Installation des gepatchten Qts angegeben we
QMAKE=/usr/local/Trolltech/Qt-4.6.3/bin/qmake ./configure && \
make
Start e.g. with:
SWISSSIGNER='java -Xmx256M -Dorg.jpedal.jai=true -Dswing.aatext=true -Dch.abacus.swisssigner.incamail.certlogin=false -splash:swisssigner-splash.png -Dch.abacus.pkcs11.configuration=swisssigner-pkcs11.cfg -Duser.language=de -cp /home/marc/downloads/swisssigner/swisssigner.jar:/home/marc/downloads/swisssigner/bc.jar:bcmail.jar:/home/marc/downloads/swisssigner/bcpg.jar:/home/marc/downloads/swisssigner/bctsp.jar:/home/marc/downloads/swisssigner/exml.jar:/home/marc/downloads/swisssigner/itext.jar:/home/marc/downloads/swisssigner/jai_codec.jar:/home/marc/downloads/swisssigner/jai_core.jar:/home/marc/downloads/swisssigner/jai_imageio.jar:/home/marc/downloads/swisssigner/jdic.jar:/home/marc/downloads/swisssigner/jdic_native.jar:/home/marc/downloads/swisssigner/jdic_stub_unix.jar:/home/marc/downloads/swisssigner/jpedal.jar: ch.abacus.hotdog.SwissSigner locale=de document=<FILENAME> browser_bin=firefox keystores=pkcs11'
src/swisssurfer --mime application/pdf pdf "$SWISSSIGNER" --mime application/x-java-jnlp-file jnlp "javaws <FILENAME>" http://swisssign.com/de/swisssign-support/ss-faq/7-server-certificates/34-how-to-apache-konfiguration-mit-ssl-zertifikaten

View File

@@ -25,16 +25,21 @@
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QSslError>
#include <QtNetwork/QNetworkProxy>
#include <proxyface/proxy.hxx>
#include <QtCore/QTemporaryFile>
#include <QtCore/QProcess>
#include <QtCore/QDir>
#include <QtGui/QFileDialog>
#include <smartcardauth.hxx>
#include <downloadmanager.hxx>
#include <stdexcept>
#include <cassert>
#include <QtCore/QDebug>
#include <QtCore/QDebug>
#ifndef LOG
#define LOG qDebug()<<__PRETTY_FUNCTION__
#endif
extern SmartCardAuth _scAuth;
@@ -51,6 +56,10 @@ class SslClientAuthNetworkAccessManager: public QNetworkAccessManager {
LOG;
}
Q_SIGNALS:
void created(QNetworkReply*);
protected:
virtual QNetworkReply* createRequest(Operation op,
@@ -59,8 +68,8 @@ class SslClientAuthNetworkAccessManager: public QNetworkAccessManager {
LOG<<req.url();
QNetworkReply* rep
(QNetworkAccessManager::createRequest(op, req, outgoingData));
//qDebug()<<"Reply created: "<<(int)rep;
qDebug()<<"Reply to URL: "<<rep->url().toString();
created(rep);
LOG<<"Reply to URL: "<<rep->url().toString();
return rep;
}
@@ -72,31 +81,28 @@ class Browser: public QMainWindow, protected Ui::Browser {
public:
Browser(const QString& url, bool kiosk = false,
bool proxydetection = false):
_url(0), _home(url), _proxy(0),
_kiosk(kiosk) {
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;
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);
on_actionNewTab_triggered();
actionProxySettings->setEnabled(proxydetection);
if (proxydetection) {
_proxy = new gui::Proxy(url, this);
assert(connect(_proxy, SIGNAL(proxyFound(const QUrl&,
const QNetworkProxy&)),
SLOT(startDownload(QUrl, const QNetworkProxy&))));
assert(connect(_proxy, SIGNAL(temporaryError
(QNetworkReply::NetworkError,
QString, QString)),
SLOT(proxy_error(QNetworkReply::NetworkError,
QString, QString))));
assert(connect(_proxy, SIGNAL(proxyError(QNetworkReply::NetworkError)),
SLOT(proxy_error(QNetworkReply::NetworkError))));
}
statusBar()->addPermanentWidget(_progress = new QProgressBar());
statusBar()->addPermanentWidget(_zoom = new QSlider(Qt::Horizontal));
_zoom->setMinimum(1);
_zoom->setMaximum(100);
_zoom->setValue(10);
assert(connect(_zoom, SIGNAL(valueChanged(int)), SLOT(zoom(int))));
_toolbar->addWidget(_url = new QLineEdit(_toolbar));
on_actionNewTab_triggered();
_url->setText(url);
assert(connect(_url, SIGNAL(returnPressed()), SLOT(load())));
assert(connect(&_networkManager,
@@ -105,19 +111,35 @@ class Browser: public QMainWindow, protected Ui::Browser {
&_scAuth,
SLOT(extendedContextInitialization(ssl_ctx_st*,
QSslSocket*))));
assert(connect(&_networkManager, SIGNAL(created(QNetworkReply*)),
&_downloadManager, SLOT(add(QNetworkReply*))));
assert(connect(&_downloadManager, SIGNAL(progress(qint64, qint64)),
SLOT(progress(qint64, qint64))));
assert(connect(&_downloadManager, SIGNAL(started()),
SLOT(started())));
assert(connect(&_downloadManager, SIGNAL(finished()),
SLOT(finished())));
if (_kiosk) {
_menu->hide();
_url->setEnabled(false);
}
statusBar()->addPermanentWidget(_progress = new QProgressBar());
statusBar()->addPermanentWidget(_zoom = new QSlider(Qt::Horizontal));
_zoom->setMinimum(1);
_zoom->setMaximum(100);
_zoom->setValue(10);
assert(connect(_zoom, SIGNAL(valueChanged(int)), SLOT(zoom(int))));
load(url);
}
~Browser() {
LOG;
for (DownloadProcesses::iterator it(_downloadProcesses.begin());
it!=_downloadProcesses.end(); ++it) {
LOG<<"delete:"<<it->second->fileName();
delete it->second;
it->second = 0;
it->first->terminate();
delete it->first;
}
}
QString networkError(QNetworkReply::NetworkError err) {
LOG<<err;
switch (err) {
@@ -191,6 +213,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
}
}
//! Whitelisting
bool check(QUrl page) {
return true;
}
@@ -203,16 +226,22 @@ class Browser: public QMainWindow, protected Ui::Browser {
}
void load(QString page) {
if (QUrl(page).scheme()=="") page = "http://"+page;
if (QUrl(page).scheme()=="")
page = "http://"+page;
if (page.contains(QRegExp("^gg[: ]")))
page = QString("http://google.com/search?q=%1")
.arg(page.mid(3));
if (page.contains(QRegExp("^wp[: ]")))
page = QString("http://%1.wikipedia.com/wiki/%2")
.arg(QLocale::system().name().left(2)).arg(page.mid(3));
load(QUrl(page));
}
void load(QUrl page) {
LOG<<page.toString();
statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
try {
if (!check(page)) {
qDebug()<<"########## BLACK LISTED IGNORED ##########";
LOG<<"########## BLACK LISTED IGNORED ##########";
statusBar()->showMessage(tr("Forbidden: %1").arg(page.toString()));
QMessageBox::warning(this, tr("Access Denied"),
tr("<p>Access denied due to security"
@@ -221,20 +250,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
.arg(page.toString()));
return;
}
if (_proxy) _proxy->checkUrl(page.toString());
_progress->setValue(0);
_progress->setMaximum(0);
_progress->show();
if (!_proxy) startDownload(page);
} catch (...) {
reply_error(QNetworkReply::ProxyNotFoundError);
} // no network
}
void startDownload(QUrl url, const QNetworkProxy& proxy) {
LOG;
QNetworkProxy::setApplicationProxy(proxy);
startDownload(url);
startDownload(page);
}
void startDownload(QUrl url) {
@@ -242,43 +258,12 @@ class Browser: public QMainWindow, protected Ui::Browser {
statusBar()->showMessage(tr("Reading: %1").arg(url.toString()));
if (!url.isValid()) {
statusBar()->showMessage(tr("Illegal URL: %1").arg(url.errorString()));
_progress->hide();
return;
}
//if (url.scheme()=="") url.setScheme("http");
dynamic_cast<QWebView*>(_tabs->currentWidget())->load(url);
}
void reply_error(QNetworkReply::NetworkError err) {
LOG<<err;
statusBar()->showMessage(tr("network error"));
_error += tr("<h2>%1</h2><p>%2</p>")
.arg(tr("Reply Error"))
.arg(networkError(err));
}
//! intermediate proxy error
void proxy_error(QNetworkReply::NetworkError err,
QString errStr, QString proxy) {
LOG<<err<<errStr;
statusBar()->showMessage(tr("proxy error"));
_error += tr("<h2>%1</h2><p>Proxy: %3</p><p>%2</p><p>%4</p>")
.arg(tr("Possible Proxy Failed"))
.arg(networkError(err))
.arg(proxy)
.arg(errStr);
}
//! final proxy error
void proxy_error(QNetworkReply::NetworkError err) {
LOG<<err;
statusBar()->showMessage(tr("proxy error"));
_error = tr("<h2>%1</h2><p>%2</p>")
.arg(tr("Connection Cannot Be Established"))
.arg(networkError(err)) + _error;
// on__browser_loadFinished(false); //! @todo
}
void zoom(int i) {
LOG<<100.0*i/10.0;
statusBar()->showMessage(tr("Zoom: %1%").arg(100.0*i/10.0));
@@ -290,73 +275,6 @@ class Browser: public QMainWindow, protected Ui::Browser {
load(_home);
}
// void on__browser_urlChanged(const QUrl& url) { //!@todo
// LOG<<url.toString();
// if (_url) _url->setText(url.toString());
// }
// void on__browser_linkClicked(const QUrl& url) { //!@todo
// LOG<<url.toString();
// load(url);
// }
// void on__browser_iconChanged() { //!@todo
// LOG;
// setWindowIcon(_browser->icon());
// }
// void on__browser_titleChanged(const QString& text) { //!@todo
// LOG<<text;
// setWindowTitle(trUtf8("%1 - SwissSurfer").arg(text));
// }
// void on__browser_statusBarMessage(const QString& text) { //!@todo
// LOG<<text;
// qDebug()<<"Message: "<<text;
// if (text.size()) statusBar()->showMessage(tr("Info: %1").arg(text));
// }
// void on__browser_loadProgress(int i) {
// LOG<<i;
// _progress->setValue(i);
// }
// void on__browser_loadStarted() {
// LOG;
// _progress->setValue(0);
// _progress->setMaximum(100);
// _progress->show();
// actionStop->setEnabled(true);
// actionForward->setEnabled(false);
// actionBack->setEnabled(false);
// actionReload->setEnabled(false);
// actionHome->setEnabled(false);
// }
// void on__browser_loadFinished(bool ok) {
// LOG<<(ok?"success":"error");
// if (!ok) {
// _browser->setHtml(tr("<html><title>Page Load Error</title>"
// "<body><h1>Page Load Error</h1>%1"
// "</body></html>")
// .arg(_error),
// _errorUrl);
// statusBar()->showMessage(tr("download error"));
// } else {
// statusBar()->showMessage(tr("done."));
// }
// _error.clear();
// _progress->hide();
// on__browser_iconChanged();
// actionStop->setEnabled(false);
// actionForward->setEnabled(_browser->history()->canGoForward());
// actionBack->setEnabled(_browser->history()->canGoBack());
// actionReload->setEnabled(true);
// actionHome->setEnabled(true);
// }
// //!@todo ^^^
// void on_actionNew_triggered() { //@!todo exec new process
// LOG;
// (new Browser(dynamic_cast<QWebView*>(_tabs->currentWidget())->url().toString(), _kiosk, false))->show();
@@ -366,166 +284,187 @@ class Browser: public QMainWindow, protected Ui::Browser {
QWebView* browser(new QWebView);
browser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
browser->page()->setNetworkAccessManager(&_networkManager);
browser->page()->setForwardUnsupportedContent(true);
_url->setFocus();
// QWebView
assert(connect(browser, SIGNAL(urlChanged(const QUrl&)),
SLOT(urlChanged(const QUrl&))));
assert(connect(browser, SIGNAL(linkClicked(const QUrl&)),
SLOT(linkClicked(const QUrl&))));
assert(connect(browser, SIGNAL(iconChanged()),
SLOT(iconChanged())));
assert(connect(browser, SIGNAL(titleChanged(const QString&)),
SLOT(titleChanged(const QString&))));
assert(connect(browser, SIGNAL(statusBarMessage(const QString&)),
SLOT(statusBarMessage(const QString&))));
assert(connect(browser, SIGNAL(loadProgress(int)),
SLOT(loadProgress(int))));
assert(connect(browser, SIGNAL(loadStarted()),
SLOT(loadStarted())));
assert(connect(browser, SIGNAL(loadFinished(bool)),
SLOT(loadFinished(bool))));
assert(connect(browser, SIGNAL(iconChanged()),
SLOT(iconChanged())));
// QWebPage WebAction
connect(browser->pageAction(QWebPage::OpenLink),
assert(connect(browser->pageAction(QWebPage::OpenLink),
SIGNAL(triggered(bool)),
SLOT(triggeredOpenLink(bool)));
connect(browser->pageAction(QWebPage::OpenLinkInNewWindow),
SLOT(triggeredOpenLink(bool))));
assert(connect(browser->pageAction(QWebPage::OpenLinkInNewWindow),
SIGNAL(triggered(bool)),
SLOT(triggeredOpenLinkInNewWindow(bool)));
connect(browser->pageAction(QWebPage::OpenFrameInNewWindow),
SLOT(triggeredOpenLinkInNewWindow(bool))));
assert(connect(browser->pageAction(QWebPage::OpenFrameInNewWindow),
SIGNAL(triggered(bool)),
SLOT(triggeredOpenFrameInNewWindow(bool)));
connect(browser->pageAction(QWebPage::DownloadLinkToDisk),
SLOT(triggeredOpenFrameInNewWindow(bool))));
assert(connect(browser->pageAction(QWebPage::DownloadLinkToDisk),
SIGNAL(triggered(bool)),
SLOT(triggeredDownloadLinkToDisk(bool)));
connect(browser->pageAction(QWebPage::CopyLinkToClipboard),
SLOT(triggeredDownloadLinkToDisk(bool))));
assert(connect(browser->pageAction(QWebPage::CopyLinkToClipboard),
SIGNAL(triggered(bool)),
SLOT(triggeredCopyLinkToClipboard(bool)));
connect(browser->pageAction(QWebPage::OpenImageInNewWindow),
SLOT(triggeredCopyLinkToClipboard(bool))));
assert(connect(browser->pageAction(QWebPage::OpenImageInNewWindow),
SIGNAL(triggered(bool)),
SLOT(triggeredOpenImageInNewWindow(bool)));
connect(browser->pageAction(QWebPage::DownloadImageToDisk),
SLOT(triggeredOpenImageInNewWindow(bool))));
assert(connect(browser->pageAction(QWebPage::DownloadImageToDisk),
SIGNAL(triggered(bool)),
SLOT(triggeredDownloadImageToDisk(bool)));
connect(browser->pageAction(QWebPage::CopyImageToClipboard),
SLOT(triggeredDownloadImageToDisk(bool))));
assert(connect(browser->pageAction(QWebPage::CopyImageToClipboard),
SIGNAL(triggered(bool)),
SLOT(triggeredCopyImageToClipboard(bool)));
connect(browser->pageAction(QWebPage::Back),
SLOT(triggeredCopyImageToClipboard(bool))));
assert(connect(browser->pageAction(QWebPage::Back),
SIGNAL(triggered(bool)),
SLOT(triggeredBack(bool)));
connect(browser->pageAction(QWebPage::Forward),
SLOT(triggeredBack(bool))));
assert(connect(browser->pageAction(QWebPage::Forward),
SIGNAL(triggered(bool)),
SLOT(triggeredForward(bool)));
connect(browser->pageAction(QWebPage::Stop),
SLOT(triggeredForward(bool))));
assert(connect(browser->pageAction(QWebPage::Stop),
SIGNAL(triggered(bool)),
SLOT(triggeredStop(bool)));
connect(browser->pageAction(QWebPage::Reload),
SLOT(triggeredStop(bool))));
assert(connect(browser->pageAction(QWebPage::Reload),
SIGNAL(triggered(bool)),
SLOT(triggeredReload(bool)));
connect(browser->pageAction(QWebPage::Cut),
SLOT(triggeredReload(bool))));
assert(connect(browser->pageAction(QWebPage::Cut),
SIGNAL(triggered(bool)),
SLOT(triggeredCut(bool)));
connect(browser->pageAction(QWebPage::Copy),
SLOT(triggeredCut(bool))));
assert(connect(browser->pageAction(QWebPage::Copy),
SIGNAL(triggered(bool)),
SLOT(triggeredCopy(bool)));
connect(browser->pageAction(QWebPage::Paste),
SLOT(triggeredCopy(bool))));
assert(connect(browser->pageAction(QWebPage::Paste),
SIGNAL(triggered(bool)),
SLOT(triggeredPaste(bool)));
connect(browser->pageAction(QWebPage::Undo),
SLOT(triggeredPaste(bool))));
assert(connect(browser->pageAction(QWebPage::Undo),
SIGNAL(triggered(bool)),
SLOT(triggeredUndo(bool)));
connect(browser->pageAction(QWebPage::Redo),
SLOT(triggeredUndo(bool))));
assert(connect(browser->pageAction(QWebPage::Redo),
SIGNAL(triggered(bool)),
SLOT(triggeredRedo(bool)));
connect(browser->pageAction(QWebPage::MoveToNextChar),
SLOT(triggeredRedo(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToNextChar),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToNextChar(bool)));
connect(browser->pageAction(QWebPage::MoveToPreviousChar),
SLOT(triggeredMoveToNextChar(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToPreviousChar),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToPreviousChar(bool)));
connect(browser->pageAction(QWebPage::MoveToNextWord),
SLOT(triggeredMoveToPreviousChar(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToNextWord),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToNextWord(bool)));
connect(browser->pageAction(QWebPage::MoveToPreviousWord),
SLOT(triggeredMoveToNextWord(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToPreviousWord),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToPreviousWord(bool)));
connect(browser->pageAction(QWebPage::MoveToNextLine),
SLOT(triggeredMoveToPreviousWord(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToNextLine),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToNextLine(bool)));
connect(browser->pageAction(QWebPage::MoveToPreviousLine),
SLOT(triggeredMoveToNextLine(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToPreviousLine),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToPreviousLine(bool)));
connect(browser->pageAction(QWebPage::MoveToStartOfLine),
SLOT(triggeredMoveToPreviousLine(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToStartOfLine),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToStartOfLine(bool)));
connect(browser->pageAction(QWebPage::MoveToEndOfLine),
SLOT(triggeredMoveToStartOfLine(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToEndOfLine),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToEndOfLine(bool)));
connect(browser->pageAction(QWebPage::MoveToStartOfBlock),
SLOT(triggeredMoveToEndOfLine(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToStartOfBlock),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToStartOfBlock(bool)));
connect(browser->pageAction(QWebPage::MoveToEndOfBlock),
SLOT(triggeredMoveToStartOfBlock(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToEndOfBlock),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToEndOfBlock(bool)));
connect(browser->pageAction(QWebPage::MoveToStartOfDocument),
SLOT(triggeredMoveToEndOfBlock(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToStartOfDocument),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToStartOfDocument(bool)));
connect(browser->pageAction(QWebPage::MoveToEndOfDocument),
SLOT(triggeredMoveToStartOfDocument(bool))));
assert(connect(browser->pageAction(QWebPage::MoveToEndOfDocument),
SIGNAL(triggered(bool)),
SLOT(triggeredMoveToEndOfDocument(bool)));
connect(browser->pageAction(QWebPage::SelectNextChar),
SLOT(triggeredMoveToEndOfDocument(bool))));
assert(connect(browser->pageAction(QWebPage::SelectNextChar),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectNextChar(bool)));
connect(browser->pageAction(QWebPage::SelectPreviousChar),
SLOT(triggeredSelectNextChar(bool))));
assert(connect(browser->pageAction(QWebPage::SelectPreviousChar),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectPreviousChar(bool)));
connect(browser->pageAction(QWebPage::SelectNextWord),
SLOT(triggeredSelectPreviousChar(bool))));
assert(connect(browser->pageAction(QWebPage::SelectNextWord),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectNextWord(bool)));
connect(browser->pageAction(QWebPage::SelectPreviousWord),
SLOT(triggeredSelectNextWord(bool))));
assert(connect(browser->pageAction(QWebPage::SelectPreviousWord),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectPreviousWord(bool)));
connect(browser->pageAction(QWebPage::SelectNextLine),
SLOT(triggeredSelectPreviousWord(bool))));
assert(connect(browser->pageAction(QWebPage::SelectNextLine),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectNextLine(bool)));
connect(browser->pageAction(QWebPage::SelectPreviousLine),
SLOT(triggeredSelectNextLine(bool))));
assert(connect(browser->pageAction(QWebPage::SelectPreviousLine),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectPreviousLine(bool)));
connect(browser->pageAction(QWebPage::SelectStartOfLine),
SLOT(triggeredSelectPreviousLine(bool))));
assert(connect(browser->pageAction(QWebPage::SelectStartOfLine),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectStartOfLine(bool)));
connect(browser->pageAction(QWebPage::SelectEndOfLine),
SLOT(triggeredSelectStartOfLine(bool))));
assert(connect(browser->pageAction(QWebPage::SelectEndOfLine),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectEndOfLine(bool)));
connect(browser->pageAction(QWebPage::SelectStartOfBlock),
SLOT(triggeredSelectEndOfLine(bool))));
assert(connect(browser->pageAction(QWebPage::SelectStartOfBlock),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectStartOfBlock(bool)));
connect(browser->pageAction(QWebPage::SelectEndOfBlock),
SLOT(triggeredSelectStartOfBlock(bool))));
assert(connect(browser->pageAction(QWebPage::SelectEndOfBlock),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectEndOfBlock(bool)));
connect(browser->pageAction(QWebPage::SelectStartOfDocument),
SLOT(triggeredSelectEndOfBlock(bool))));
assert(connect(browser->pageAction(QWebPage::SelectStartOfDocument),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectStartOfDocument(bool)));
connect(browser->pageAction(QWebPage::SelectEndOfDocument),
SLOT(triggeredSelectStartOfDocument(bool))));
assert(connect(browser->pageAction(QWebPage::SelectEndOfDocument),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectEndOfDocument(bool)));
connect(browser->pageAction(QWebPage::DeleteStartOfWord),
SLOT(triggeredSelectEndOfDocument(bool))));
assert(connect(browser->pageAction(QWebPage::DeleteStartOfWord),
SIGNAL(triggered(bool)),
SLOT(triggeredDeleteStartOfWord(bool)));
connect(browser->pageAction(QWebPage::DeleteEndOfWord),
SLOT(triggeredDeleteStartOfWord(bool))));
assert(connect(browser->pageAction(QWebPage::DeleteEndOfWord),
SIGNAL(triggered(bool)),
SLOT(triggeredDeleteEndOfWord(bool)));
connect(browser->pageAction(QWebPage::SetTextDirectionDefault),
SLOT(triggeredDeleteEndOfWord(bool))));
assert(connect(browser->pageAction(QWebPage::SetTextDirectionDefault),
SIGNAL(triggered(bool)),
SLOT(triggeredSetTextDirectionDefault(bool)));
connect(browser->pageAction(QWebPage::SetTextDirectionLeftToRight),
SLOT(triggeredSetTextDirectionDefault(bool))));
assert(connect(browser->pageAction(QWebPage::SetTextDirectionLeftToRight),
SIGNAL(triggered(bool)),
SLOT(triggeredSetTextDirectionLeftToRight(bool)));
connect(browser->pageAction(QWebPage::SetTextDirectionRightToLeft),
SLOT(triggeredSetTextDirectionLeftToRight(bool))));
assert(connect(browser->pageAction(QWebPage::SetTextDirectionRightToLeft),
SIGNAL(triggered(bool)),
SLOT(triggeredSetTextDirectionRightToLeft(bool)));
connect(browser->pageAction(QWebPage::ToggleBold),
SLOT(triggeredSetTextDirectionRightToLeft(bool))));
assert(connect(browser->pageAction(QWebPage::ToggleBold),
SIGNAL(triggered(bool)),
SLOT(triggeredToggleBold(bool)));
connect(browser->pageAction(QWebPage::ToggleItalic),
SLOT(triggeredToggleBold(bool))));
assert(connect(browser->pageAction(QWebPage::ToggleItalic),
SIGNAL(triggered(bool)),
SLOT(triggeredToggleItalic(bool)));
connect(browser->pageAction(QWebPage::ToggleUnderline),
SLOT(triggeredToggleItalic(bool))));
assert(connect(browser->pageAction(QWebPage::ToggleUnderline),
SIGNAL(triggered(bool)),
SLOT(triggeredToggleUnderline(bool)));
connect(browser->pageAction(QWebPage::InspectElement),
SLOT(triggeredToggleUnderline(bool))));
assert(connect(browser->pageAction(QWebPage::InspectElement),
SIGNAL(triggered(bool)),
SLOT(triggeredInspectElement(bool)));
connect(browser->pageAction(QWebPage::InsertParagraphSeparator),
SLOT(triggeredInspectElement(bool))));
assert(connect(browser->pageAction(QWebPage::InsertParagraphSeparator),
SIGNAL(triggered(bool)),
SLOT(triggeredInsertParagraphSeparator(bool)));
connect(browser->pageAction(QWebPage::InsertLineSeparator),
SLOT(triggeredInsertParagraphSeparator(bool))));
assert(connect(browser->pageAction(QWebPage::InsertLineSeparator),
SIGNAL(triggered(bool)),
SLOT(triggeredInsertLineSeparator(bool)));
connect(browser->pageAction(QWebPage::SelectAll),
SLOT(triggeredInsertLineSeparator(bool))));
assert(connect(browser->pageAction(QWebPage::SelectAll),
SIGNAL(triggered(bool)),
SLOT(triggeredSelectAll(bool)));
SLOT(triggeredSelectAll(bool))));
// QWebPage
assert(connect(browser->page(), SIGNAL(contentsChanged()),
SLOT(contentsChanged())));
@@ -540,19 +479,19 @@ class Browser: public QMainWindow, protected Ui::Browser {
assert(connect(browser->page(),
SIGNAL(geometryChangeRequested(const QRect&)),
SLOT(geometryChangeRequested(const QRect&))));
assert(connect(browser->page(), SIGNAL(linkClicked(const QUrl&)),
SLOT(linkClicked(const QUrl&))));
// assert(connect(browser->page(), SIGNAL(linkClicked(const QUrl&)),
// SLOT(linkClicked(const QUrl&))));
assert(connect(browser->page(),
SIGNAL(linkHovered(const QString&, const QString&,
const QString&)),
SLOT(linkHovered(const QString&, const QString&,
const QString&))));
assert(connect(browser->page(), SIGNAL(loadFinished(bool)),
SLOT(loadFinished(bool))));
assert(connect(browser->page(), SIGNAL(loadProgress(int)),
SLOT(loadProgress(int))));
assert(connect(browser->page(), SIGNAL(loadStarted()),
SLOT(loadStarted())));
// assert(connect(browser->page(), SIGNAL(loadFinished(bool)),
// SLOT(loadFinished(bool))));
// assert(connect(browser->page(), SIGNAL(loadProgress(int)),
// SLOT(loadProgress(int))));
// assert(connect(browser->page(), SIGNAL(loadStarted()),
// SLOT(loadStarted())));
assert(connect(browser->page(),
SIGNAL(menuBarVisibilityChangeRequested(bool)),
SLOT(menuBarVisibilityChangeRequested(bool))));
@@ -575,8 +514,8 @@ class Browser: public QMainWindow, protected Ui::Browser {
SLOT(scrollRequested(int, int, const QRect&))));
assert(connect(browser->page(), SIGNAL(selectionChanged()),
SLOT(selectionChanged())));
assert(connect(browser->page(), SIGNAL(statusBarMessage(const QString&)),
SLOT(statusBarMessage(const QString&))));
// assert(connect(browser->page(), SIGNAL(statusBarMessage(const QString&)),
// SLOT(statusBarMessage(const QString&))));
assert(connect(browser->page(),
SIGNAL(statusBarVisibilityChangeRequested(bool)),
SLOT(statusBarVisibilityChangeRequested(bool))));
@@ -594,9 +533,6 @@ class Browser: public QMainWindow, protected Ui::Browser {
QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,
QAuthenticator*))));
assert(connect(browser->page()->networkAccessManager(),
SIGNAL(finished(QNetworkReply*)),
SLOT(finished(QNetworkReply*))));
assert(connect(browser->page()->networkAccessManager(),
SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&,
QAuthenticator*)),
@@ -610,9 +546,14 @@ class Browser: public QMainWindow, protected Ui::Browser {
}
void on__tabs_currentChanged(int index) {
_url->setText(dynamic_cast<QWebView*>(_tabs->currentWidget())
->url().toString());
activateTab();
}
void on__tabs_tabCloseRequested(int index) {
_error.erase(_tabs->widget(index));
_errorUrl.erase(_tabs->widget(index));
_tabs->removeTab(index);
_tabs->setTabsClosable(_tabs->count()>1);
}
@@ -641,12 +582,143 @@ class Browser: public QMainWindow, protected Ui::Browser {
close();
}
void on_actionProxySettings_triggered() {
void on_actionBack_triggered() {
LOG;
if (_proxy) _proxy->show();
dynamic_cast<QWebView*>(_tabs->currentWidget())->history()->back();
}
//@name QWebPage slots
void on_actionBack_hovered() {
LOG;
if (!dynamic_cast<QWebView*>(_tabs->currentWidget())->history()
->backItem().isValid())
return;
actionBack->setStatusTip
(tr("%1 - %2", "statusbar actionBack_hovered %1=url %2=title")
.arg(dynamic_cast<QWebView*>(_tabs->currentWidget())->history()
->backItem().url().toString())
.arg(dynamic_cast<QWebView*>(_tabs->currentWidget())->history()
->backItem().title()));
actionBack->showStatusText(this);
}
void on_actionForward_triggered() {
LOG;
dynamic_cast<QWebView*>(_tabs->currentWidget())->history()->forward();
}
void on_actionForward_hovered() {
LOG;
if (!dynamic_cast<QWebView*>(_tabs->currentWidget())->history()
->forwardItem().isValid())
return;
actionForward->setStatusTip
(tr("%1 - %2", "statusbar actionForward_hovered %1=url %2=title")
.arg(dynamic_cast<QWebView*>(_tabs->currentWidget())->history()
->forwardItem().url().toString())
.arg(dynamic_cast<QWebView*>(_tabs->currentWidget())->history()
->forwardItem().title()));
actionForward->showStatusText(this);
}
void on_actionReload_triggered() {
LOG;
dynamic_cast<QWebView*>(_tabs->currentWidget())->reload();
}
void on_actionStop_triggered() {
LOG;
_downloadManager.abort();
}
void on_actionFind_triggered() {
if (!_find) {
statusBar()->addPermanentWidget(_find = new QLineEdit);
_find->setText(dynamic_cast<QWebView*>(_tabs->currentWidget())
->selectedText());
assert(connect(_find, SIGNAL(returnPressed()), SLOT(find())));
}
_find->setFocus();
}
void find() {
dynamic_cast<QWebView*>(_tabs->currentWidget())->findText(_find->text());
}
void on_actionUnFind_triggered() {
delete _find; _find=0;
}
void on_actionAbout_triggered() {
QMessageBox::aboutQt(this);
}
//@name QWebView slots
//@{
void urlChanged(const QUrl& url) { //!@todo
LOG<<url.toString();
if (sender()!=_tabs->currentWidget()) return;
LOG<<"signal on current tab";
if (_url) _url->setText(url.toString());
}
void linkClicked(const QUrl& url) { //!@todo
LOG<<url.toString();
if (sender()!=_tabs->currentWidget()) return;
LOG<<"signal on current tab";
load(url);
}
void iconChanged() { //!@todo
LOG;
if (sender()!=_tabs->currentWidget()) return;
LOG<<"signal on current tab";
setWindowIcon(dynamic_cast<QWebView*>(_tabs->currentWidget())->icon());
}
void titleChanged(const QString& text) { //!@todo
LOG<<text;
if (sender()!=_tabs->currentWidget()) return;
LOG<<"signal on current tab";
_tabs->setTabText(_tabs->indexOf(qobject_cast<QWidget*>(sender())),
trUtf8("%1").arg(text));
}
void statusBarMessage(const QString& text) { //!@todo
LOG<<text;
if (sender()!=_tabs->currentWidget()) return;
LOG<<"signal on current tab";
if (text.size()) statusBar()->showMessage(tr("Info: %1").arg(text));
}
void loadProgress(int i) {
LOG<<i;
}
void loadStarted() {
LOG;
}
void loadFinished(bool ok) {
LOG<<(ok?"success":"error");
// if (!ok) {
// dynamic_cast<QWebView*>(sender())
// ->setHtml(tr("<html><title>Page Load Error</title>"
// "<body><h1>Page Load Error</h1>%1"
// "</body></html>")
// .arg(_error[sender()]),
// _errorUrl[sender()]);
// }
if (sender()!=_tabs->currentWidget()) return;
LOG<<"signal on current tab";
_error[sender()].clear();
if (ok) statusBar()->showMessage(tr("done."));
activateTab();
}
//@}
//@name QWebPage WebAction slots
//@{
void triggeredOpenLink(bool) {
@@ -886,9 +958,9 @@ class Browser: public QMainWindow, protected Ui::Browser {
LOG;
}
void linkClicked(const QUrl& url) {
LOG<<url.toString();
}
// void linkClicked(const QUrl& url) {
// LOG<<url.toString();
// }
void linkHovered(const QString& link, const QString& title,
const QString& textContent) {
@@ -897,17 +969,17 @@ class Browser: public QMainWindow, protected Ui::Browser {
.arg(link));
}
void loadFinished(bool ok) {
LOG<<(ok?"succeess":"error");
}
// void loadFinished(bool ok) {
// LOG<<(ok?"succeess":"error");
// }
void loadProgress(int progress) {
LOG<<progress;
}
// void loadProgress(int progress) {
// LOG<<progress;
// }
void loadStarted() {
LOG;
}
// void loadStarted() {
// LOG;
// }
void menuBarVisibilityChangeRequested(bool visible) {
LOG;
@@ -941,9 +1013,9 @@ class Browser: public QMainWindow, protected Ui::Browser {
LOG;
}
void statusBarMessage(const QString& text) {
LOG;
}
// void statusBarMessage(const QString& text) {
// LOG;
// }
void statusBarVisibilityChangeRequested(bool visible) {
LOG;
@@ -953,22 +1025,95 @@ class Browser: public QMainWindow, protected Ui::Browser {
LOG;
}
//@name handle downloads
//@{
void unsupportedContent(QNetworkReply* reply) {
LOG;
statusBar()->showMessage(tr("unsupported content"));
_error += tr("<h2>%1</h2><p>URL: %3</p><p>%2</p>")
.arg(tr("Unsuported Content"))
.arg(networkError(reply->error()))
.arg(reply->url().toString());
_errorUrl = reply->url();
LOG<<reply->header(QNetworkRequest::ContentTypeHeader).toString();
LOG<<"Status:"<<networkError(reply->error());
assert(connect(reply, SIGNAL(finished()), SLOT(downloadFinished())));
}
void downloadFinished() {
QNetworkReply *reply(qobject_cast<QNetworkReply*>(sender()));
LOG<<"Location:"<<reply->header(QNetworkRequest::LocationHeader)
.toString();
LOG<<"Content-Type:"<<reply->header(QNetworkRequest::ContentTypeHeader)
.toString();
LOG<<"Status:"<<networkError(reply->error());
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()) {
QTemporaryFile *file =
new QTemporaryFile(QDir::tempPath()+QDir::separator()
+"swisssurferXXXXXX."+it->second.first, this);
file->open();
file->write(reply->readAll());
file->close();
QProcess* process(new QProcess);
_downloadProcesses[process] = file;
assert(connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
SLOT(processFinished())));
QStringList args(it->second.second.split(" ")
.replaceInStrings("<FILENAME>", file->fileName()));
QString prg(args.takeFirst());
LOG<<"Running:"<<prg<<args.join(" ");
process->start(prg, args);
} else {
QString saveFile
(QFileDialog::getSaveFileName(this, tr("Save File As ..."),
!reply->url().toLocalFile().isEmpty()
?reply->url().toLocalFile()
:reply->url().path()));
if (!saveFile.isEmpty()) {
QFile file(saveFile);
file.open(QIODevice::WriteOnly);
file.write(reply->readAll());
file.close();
}
}
}
void processFinished() {
delete _downloadProcesses[qobject_cast<QProcess*>(sender())];
_downloadProcesses.erase(qobject_cast<QProcess*>(sender()));
}
//@}
void windowCloseRequested() {
LOG;
}
//@}
//@name DownloadManager signals
//@{
void progress(qint64 done, qint64 total) {
_progress->setMaximum(total);
_progress->setValue(done);
}
void started() {
actionStop->setEnabled(true);
_progress->setRange(0, 0);
_progress->setValue(0);
_progress->show();
}
void finished() {
LOG;
actionStop->setEnabled(false);
_progress->hide();
}
//@}
//@name QNetworkAccessManager signals
//@{
@@ -976,22 +1121,11 @@ class Browser: public QMainWindow, protected Ui::Browser {
QAuthenticator* authenticator) {
LOG;
statusBar()->showMessage(tr("authentication required"));
_error += tr("<h2>%1</h2><p>URL: %3</p><p>%2</p>")
.arg(tr("Authentication Required"))
.arg(networkError(reply->error()))
.arg(reply->url().toString());
_errorUrl = reply->url();
}
void finished(QNetworkReply* reply) {
LOG<<(reply->error()==QNetworkReply::NoError?"success":"error");
if (reply->error()!=QNetworkReply::NoError) {
_error += tr("<h2>%1</h2><p>URL: %3</p><p>%2</p>")
.arg(tr("Network Error"))
.arg(networkError(reply->error()))
.arg(reply->url().toString());
_errorUrl = reply->url();
}
// _error[sender()] += tr("<h2>%1</h2><p>URL: %3</p><p>%2</p>")
// .arg(tr("Authentication Required"))
// .arg(networkError(reply->error()))
// .arg(reply->url().toString());
// _errorUrl[sender()] = reply->url();
}
void proxyAuthenticationRequired(const QNetworkProxy& proxy,
@@ -1002,35 +1136,48 @@ class Browser: public QMainWindow, protected Ui::Browser {
void sslErrors(QNetworkReply* reply, const QList<QSslError>& errors) {
LOG;
statusBar()->showMessage(tr("ssl error"));
QString e;
for (QList<QSslError>::const_iterator err(errors.begin());
err!=errors.end(); ++err)
e+=tr("<li>%1</li>", "single ssl error").arg(err->errorString());
_error += tr("<h2>%1</h2><p>URL: %4</p><p>%2</p>"
"<h3>SSL Errors</h3>"
"<p><ul>%3</ul></p>")
.arg(tr("SSL Error"))
.arg(networkError(reply->error()))
.arg(e)
.arg(reply->url().toString());
_errorUrl = reply->url();
// QString e;
// for (QList<QSslError>::const_iterator err(errors.begin());
// err!=errors.end(); ++err)
// e+=tr("<li>%1</li>", "single ssl error").arg(err->errorString());
// _error[sender()] += tr("<h2>%1</h2><p>URL: %4</p><p>%2</p>"
// "<h3>SSL Errors</h3>"
// "<p><ul>%3</ul></p>")
// .arg(tr("SSL Error"))
// .arg(networkError(reply->error()))
// .arg(e)
// .arg(reply->url().toString());
// _errorUrl[sender()] = reply->url();
}
//@}
private:
void activateTab() {
iconChanged();
actionForward->setEnabled(dynamic_cast<QWebView*>(_tabs->currentWidget())
->history()->canGoForward());
actionBack->setEnabled(dynamic_cast<QWebView*>(_tabs->currentWidget())
->history()->canGoBack());
}
private:
QLineEdit* _url;
QLineEdit* _find;
QSlider* _zoom;
QProgressBar* _progress;
QString _home;
gui::Proxy* _proxy;
bool _kiosk;
bool _proxydetection;
QString _error;
QUrl _errorUrl;
std::map<QObject*, QString> _error;
std::map<QObject*, QUrl> _errorUrl;
QPrinter _printer;
SslClientAuthNetworkAccessManager _networkManager;
DownloadManager _downloadManager;
typedef std::map<QProcess*, QTemporaryFile*> DownloadProcesses;
DownloadProcesses _downloadProcesses;
MimeTypes _mimetypes;
};

View File

@@ -38,6 +38,9 @@
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="_toolbar">
<property name="enabled">
<bool>true</bool>
</property>
<property name="windowTitle">
<string>toolBar</string>
</property>
@@ -85,14 +88,28 @@
<property name="title">
<string>&amp;Settings</string>
</property>
<addaction name="actionProxySettings"/>
</widget>
<widget class="QMenu" name="menuEdit">
<property name="title">
<string>Edit</string>
</property>
<addaction name="actionFind"/>
<addaction name="actionUnFind"/>
</widget>
<widget class="QMenu" name="menuInfo">
<property name="title">
<string>Info</string>
</property>
<addaction name="actionAbout"/>
</widget>
<addaction name="menuDatei"/>
<addaction name="menuEinstellungen"/>
<addaction name="menuEdit"/>
<addaction name="menuInfo"/>
</widget>
<action name="actionReload">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="resources.qrc">
@@ -101,6 +118,9 @@
<property name="text">
<string>neu laden</string>
</property>
<property name="shortcut">
<string>F5</string>
</property>
</action>
<action name="actionStop">
<property name="enabled">
@@ -114,7 +134,7 @@
<string>stoppen</string>
</property>
<property name="shortcut">
<string notr="true">Esc</string>
<string>Esc</string>
</property>
</action>
<action name="actionBack">
@@ -162,7 +182,7 @@
<string>Startseite</string>
</property>
<property name="shortcut">
<string notr="true">Home</string>
<string>Ctrl+Home</string>
</property>
<property name="shortcutContext">
<enum>Qt::WindowShortcut</enum>
@@ -183,9 +203,6 @@
<property name="text">
<string>&amp;Close</string>
</property>
<property name="shortcut">
<string>Ctrl+W</string>
</property>
</action>
<action name="actionProxySettings">
<property name="text">
@@ -237,6 +254,33 @@
<string>Ctrl+T</string>
</property>
</action>
<action name="actionFind">
<property name="text">
<string>Find</string>
</property>
<property name="toolTip">
<string>find in page</string>
</property>
<property name="shortcut">
<string>Ctrl+F</string>
</property>
</action>
<action name="actionUnFind">
<property name="text">
<string>Close Find</string>
</property>
<property name="shortcut">
<string>Esc</string>
</property>
</action>
<action name="actionAbout">
<property name="text">
<string>&amp;About</string>
</property>
<property name="menuRole">
<enum>QAction::AboutQtRole</enum>
</property>
</action>
</widget>
<resources>
<include location="resources.qrc"/>

View File

@@ -0,0 +1,106 @@
/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <QtNetwork/QNetworkReply>
#include <map>
#include <cassert>
#include <QtCore/QDebug>
#ifndef LOG
#define LOG qDebug()<<__PRETTY_FUNCTION__
#endif
class DownloadManager: public QObject {
Q_OBJECT;
public:
DownloadManager& operator+=(QNetworkReply* reply) {
LOG;
add(reply);
return *this;
}
Q_SIGNALS:
void progress(qint64 done, qint64 total);
void started();
void finished();
public Q_SLOTS:
void add(QNetworkReply* reply) {
LOG<<reply->url().toString();
_downloads[reply] = Progress(0, 0);
assert(connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
SLOT(downloadProgress(qint64, qint64))));
assert(connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
SLOT(error(QNetworkReply::NetworkError))));
assert(connect(reply, SIGNAL(finished()),
SLOT(slotFinished())));
assert(connect(reply, SIGNAL(metaDataChanged()),
SLOT(metaDataChanged())));
assert(connect(reply, SIGNAL(sslErrors(const QList<QSslError>&)),
SLOT(sslErrors(const QList<QSslError>&))));
assert(connect(reply, SIGNAL(uploadProgress(qint64, qint64)),
SLOT(uploadProgress(qint64, qint64))));
if (_downloads.size()==1) started();
}
void abort() {
while (_downloads.size()) _downloads.begin()->first->abort();
}
private:
void calcProgress() {
//LOG;
qint64 done(0);
qint64 total(0);
for (Downloads::iterator it(_downloads.begin());
it!=_downloads.end(); ++it) {
done += it->second.first;
total += it->second.second;
}
progress(done, total);
}
private Q_SLOTS:
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
//LOG<<bytesReceived<<bytesTotal;
_downloads[qobject_cast<QNetworkReply*>(sender())].first = bytesReceived;
_downloads[qobject_cast<QNetworkReply*>(sender())].second = bytesTotal;
calcProgress();
}
void error(QNetworkReply::NetworkError code) {
LOG;
}
void slotFinished() {
LOG;
_downloads.erase(qobject_cast<QNetworkReply*>(sender()));
if (_downloads.size()==0) finished();
}
void metaDataChanged() {
LOG;
}
void sslErrors(const QList<QSslError> & errors) {
LOG;
}
void uploadProgress(qint64 bytesSent, qint64 bytesTotal) {
//LOG<<bytesSent<<bytesTotal;
_downloads[qobject_cast<QNetworkReply*>(sender())].first = bytesSent;
_downloads[qobject_cast<QNetworkReply*>(sender())].second = bytesTotal;
calcProgress();
}
private:
typedef std::pair<qint64, qint64> Progress;
typedef std::map<QNetworkReply*, Progress> Downloads;
Downloads _downloads;
};

View File

@@ -24,6 +24,8 @@
#include <iostream>
#include <sstream>
#include <memory>
SmartCardAuth _scAuth;
const QByteArray SWISSSIGN_GOLD_CA_G2
@@ -195,7 +197,7 @@ int main(int argv, char** argc) try {
//----------------------------------------------------------------------------
QStringList urls;
bool silent(false);
bool proxydetection(true);
Browser::MimeTypes mimetypes;
QStringList args(app.arguments());
for (QStringList::iterator it(args.begin()); ++it!=args.end();)
if (*it=="-h" || *it=="--help" || *it=="-help" || *it=="/?") {
@@ -204,9 +206,10 @@ int main(int argv, char** argc) try {
"Options:\n"
" -h, --help show this help text\n"
" -k, --kiosk no url bar\n"
" -p, --no-proxy no proxy detection\n"
" -c, --cert <file> load local client certificate from <file>\n"
" -y, --key <file> load local certificate key from <file>\n"
" -m, --mime <mime> <ext> <tool>\n"
" start <tool> for mimetype <mime>\n"
" <url> optional full URL\n"
"Environment:\n"
" LANGUAGE \"de\", \"en\", ... (actual: %5)\n"
@@ -221,8 +224,6 @@ int main(int argv, char** argc) try {
return 0;
} else if ((*it=="-k" || *it=="--kiosk")) {
silent=true;
} else if ((*it=="-p" || *it=="--no-proxy")) {
proxydetection = false;
} else if ((*it=="-c" || *it=="--cert") && ++it!=args.end()) {
QFile file(*it);
file.open(QIODevice::ReadOnly);
@@ -248,6 +249,12 @@ int main(int argv, char** argc) try {
sslConfig.setPrivateKey(k);
std::cout<<QObject::trUtf8("Read private key from file: %1")
.arg(*it).toStdString()<<std::endl;
} else if ((*it=="-m" || *it=="--mime")
&& ++it!=args.end() && ++it!=args.end() && ++it!=args.end()) {
QString mt(*----it);
QString ext(*++it);
QString app(*++it);
mimetypes[mt] = Browser::MimeTypes::mapped_type(ext, app);
} else if (it!=args.end()) {
urls<<*it;
} else {
@@ -259,9 +266,17 @@ int main(int argv, char** argc) try {
QSslConfiguration::setDefaultConfiguration(sslConfig);
//............................................................................
if (urls.size()==0) urls<<QObject::trUtf8("http://swisssign.com");
for (QStringList::iterator it(urls.begin()); it!=urls.end(); ++it)
(new Browser(*it, silent, proxydetection))->show();
return app.exec();
std::list<Browser*> browsers;
for (QStringList::iterator it(urls.begin()); it!=urls.end(); ++it) {
Browser *ptr(new Browser(*it, mimetypes, silent));
ptr->show();
browsers.push_back(ptr);
}
int res(app.exec());
for (std::list<Browser*>::iterator it(browsers.begin());
it!=browsers.end(); ++it)
delete *it;
return res;
} catch (std::exception& x) {
std::cerr<<"**** Error: "<<x.what()<<std::endl;
return 1;

View File

@@ -22,7 +22,7 @@ TRANSLATIONS = @PACKAGENAME@_en.ts \
@PACKAGENAME@_fr.ts \
@PACKAGENAME@_it.ts
SOURCES = main.cxx smartcardauth.cxx pindialog.cxx
HEADERS = browser.hxx smartcardauth.hxx pindialog.hxx
HEADERS = browser.hxx smartcardauth.hxx pindialog.hxx downloadmanager.hxx
FORMS = browser.ui
RESOURCES = languages.qrc resources.qrc
TARGET = @PACKAGENAME@

View File

@@ -11,392 +11,390 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="42"/>
<location filename="browser.ui" line="45"/>
<source>toolBar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="73"/>
<location filename="browser.ui" line="76"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="86"/>
<location filename="browser.ui" line="89"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="102"/>
<location filename="browser.ui" line="94"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="101"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="119"/>
<source>neu laden</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="114"/>
<location filename="browser.ui" line="122"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="134"/>
<source>stoppen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="129"/>
<location filename="browser.ui" line="149"/>
<source>zurückkehren</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="147"/>
<location filename="browser.ui" line="167"/>
<source>weitergehen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="162"/>
<location filename="browser.ui" line="182"/>
<source>Startseite</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="173"/>
<location filename="browser.ui" line="185"/>
<source>Ctrl+Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="193"/>
<source>&amp;New Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="176"/>
<location filename="browser.ui" line="196"/>
<source>New Browser Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="179"/>
<location filename="browser.ui" line="199"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="184"/>
<location filename="browser.ui" line="204"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="187"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="192"/>
<location filename="browser.ui" line="209"/>
<source>&amp;Proxy...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="210"/>
<location filename="browser.ui" line="227"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="215"/>
<location filename="browser.ui" line="232"/>
<source>Next Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="218"/>
<location filename="browser.ui" line="235"/>
<source>Shift+Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="223"/>
<location filename="browser.ui" line="240"/>
<source>Previous Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="226"/>
<location filename="browser.ui" line="243"/>
<source>Shift+Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="231"/>
<location filename="browser.ui" line="248"/>
<source>New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="234"/>
<location filename="browser.ui" line="251"/>
<source>Add New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="237"/>
<location filename="browser.ui" line="254"/>
<source>Ctrl+T</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="197"/>
<location filename="browser.ui" line="259"/>
<source>Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="270"/>
<source>Close Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="278"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="137"/>
<location filename="browser.ui" line="273"/>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="262"/>
<source>find in page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="265"/>
<source>Ctrl+F</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="214"/>
<source>Print ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="207"/>
<location filename="browser.ui" line="224"/>
<source>Quick &amp;Print</source>
<oldsource>&amp;Print</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="202"/>
<location filename="browser.ui" line="219"/>
<source>Print Pre&amp;view ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="145"/>
<location filename="browser.hxx" line="167"/>
<source>The connection to the proxy server was refused (the proxy server is not accepting requests).</source>
<oldsource>the connection to the proxy timed out or the proxy did not reply in time to the request sent</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="157"/>
<location filename="browser.hxx" line="179"/>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).</source>
<oldsource>the Network Access API cannot honor the request because the protocol is not known</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="212"/>
<location filename="browser.hxx" line="242"/>
<source>Checking: %1</source>
<oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="242"/>
<location filename="browser.hxx" line="258"/>
<source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="255"/>
<location filename="browser.hxx" line="276"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="256"/>
<source>Reply Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="990"/>
<source>Network Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="284"/>
<location filename="browser.hxx" line="269"/>
<source>Zoom: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="959"/>
<location filename="browser.hxx" line="979"/>
<location filename="browser.hxx" line="989"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1009"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %4&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</source>
<oldsource>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="960"/>
<source>Unsuported Content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="81"/>
<location filename="browser.hxx" line="95"/>
<source>access to URL %1 not allowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="125"/>
<location filename="browser.hxx" line="147"/>
<source>Network connection successful, remote host can be reached.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="128"/>
<location filename="browser.hxx" line="150"/>
<source>The remote server refused the connection (the server is not accepting requests).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="131"/>
<location filename="browser.hxx" line="153"/>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="134"/>
<location filename="browser.hxx" line="156"/>
<source>The remote host name was not found (invalid hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="136"/>
<location filename="browser.hxx" line="158"/>
<source>The connection to the remote server timed out.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="138"/>
<location filename="browser.hxx" line="160"/>
<source>The operation was canceled via calls to abort() or close() before it was finished.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="141"/>
<location filename="browser.hxx" line="163"/>
<source>The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="148"/>
<location filename="browser.hxx" line="170"/>
<source>The proxy server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="151"/>
<location filename="browser.hxx" line="173"/>
<source>The proxy host name was not found (invalid proxy hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="154"/>
<location filename="browser.hxx" line="176"/>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="161"/>
<location filename="browser.hxx" line="183"/>
<source>The access to the remote content was denied (similar to HTTP error 401).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="164"/>
<location filename="browser.hxx" line="186"/>
<source>The operation requested on the remote content is not permitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="167"/>
<location filename="browser.hxx" line="189"/>
<source>The remote content was not found at the server (similar to HTTP error 404).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="170"/>
<location filename="browser.hxx" line="192"/>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="174"/>
<location filename="browser.hxx" line="196"/>
<source>The Network Access API cannot honor the request because the protocol is not known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="177"/>
<location filename="browser.hxx" line="199"/>
<source>The requested operation is invalid for this protocol.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="179"/>
<location filename="browser.hxx" line="201"/>
<source>An unknown network-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="181"/>
<location filename="browser.hxx" line="203"/>
<source>An unknown proxy-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="183"/>
<location filename="browser.hxx" line="205"/>
<source>An unknonwn error related to the remote content was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="186"/>
<location filename="browser.hxx" line="208"/>
<source>A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="189"/>
<location filename="browser.hxx" line="211"/>
<source>&lt;strong&gt;Unknown network error (code: %1).&lt;/string&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="244"/>
<location filename="browser.hxx" line="260"/>
<source>Illegal URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="254"/>
<source>network error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="264"/>
<location filename="browser.hxx" line="275"/>
<source>proxy error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="265"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;Proxy: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;%4&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="266"/>
<source>Possible Proxy Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="277"/>
<source>Connection Cannot Be Established</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="634"/>
<location filename="browser.hxx" line="575"/>
<source>Print Document</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="896"/>
<location filename="browser.hxx" line="596"/>
<source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="691"/>
<source>Info: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="715"/>
<source>done.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="968"/>
<source>%1</source>
<comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="958"/>
<source>unsupported content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="216"/>
<location filename="browser.hxx" line="245"/>
<source>Forbidden: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="217"/>
<location filename="browser.hxx" line="246"/>
<source>Access Denied</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="218"/>
<location filename="browser.hxx" line="247"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="978"/>
<location filename="browser.hxx" line="615"/>
<source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="684"/>
<source>%1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1068"/>
<source>Save File As ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1123"/>
<source>authentication required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="980"/>
<source>Authentication Required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1004"/>
<location filename="browser.hxx" line="1138"/>
<source>ssl error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1008"/>
<source>&lt;li&gt;%1&lt;/li&gt;</source>
<comment>single ssl error</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1012"/>
<source>SSL Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PinDialog</name>
@@ -419,14 +417,15 @@
<context>
<name>QObject</name>
<message>
<location filename="main.cxx" line="202"/>
<location filename="main.cxx" line="204"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;ext&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -438,8 +437,10 @@ Environment:
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -450,33 +451,33 @@ Environment:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="231"/>
<location filename="main.cxx" line="232"/>
<source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="237"/>
<location filename="main.cxx" line="238"/>
<source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="244"/>
<location filename="main.cxx" line="245"/>
<source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="249"/>
<location filename="main.cxx" line="250"/>
<source>Read private key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="254"/>
<location filename="main.cxx" line="261"/>
<source>Too few arguments.
Try: %1 --help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="261"/>
<location filename="main.cxx" line="268"/>
<source>http://swisssign.com</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -11,392 +11,390 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="42"/>
<location filename="browser.ui" line="45"/>
<source>toolBar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="73"/>
<location filename="browser.ui" line="76"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="86"/>
<location filename="browser.ui" line="89"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="102"/>
<location filename="browser.ui" line="94"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="101"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="119"/>
<source>neu laden</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="114"/>
<location filename="browser.ui" line="122"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="134"/>
<source>stoppen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="129"/>
<location filename="browser.ui" line="149"/>
<source>zurückkehren</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="147"/>
<location filename="browser.ui" line="167"/>
<source>weitergehen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="162"/>
<location filename="browser.ui" line="182"/>
<source>Startseite</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="173"/>
<location filename="browser.ui" line="185"/>
<source>Ctrl+Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="193"/>
<source>&amp;New Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="176"/>
<location filename="browser.ui" line="196"/>
<source>New Browser Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="179"/>
<location filename="browser.ui" line="199"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="184"/>
<location filename="browser.ui" line="204"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="187"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="192"/>
<location filename="browser.ui" line="209"/>
<source>&amp;Proxy...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="210"/>
<location filename="browser.ui" line="227"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="215"/>
<location filename="browser.ui" line="232"/>
<source>Next Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="218"/>
<location filename="browser.ui" line="235"/>
<source>Shift+Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="223"/>
<location filename="browser.ui" line="240"/>
<source>Previous Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="226"/>
<location filename="browser.ui" line="243"/>
<source>Shift+Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="231"/>
<location filename="browser.ui" line="248"/>
<source>New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="234"/>
<location filename="browser.ui" line="251"/>
<source>Add New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="237"/>
<location filename="browser.ui" line="254"/>
<source>Ctrl+T</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="197"/>
<location filename="browser.ui" line="259"/>
<source>Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="270"/>
<source>Close Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="278"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="137"/>
<location filename="browser.ui" line="273"/>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="262"/>
<source>find in page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="265"/>
<source>Ctrl+F</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="214"/>
<source>Print ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="207"/>
<location filename="browser.ui" line="224"/>
<source>Quick &amp;Print</source>
<oldsource>&amp;Print</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="202"/>
<location filename="browser.ui" line="219"/>
<source>Print Pre&amp;view ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="145"/>
<location filename="browser.hxx" line="167"/>
<source>The connection to the proxy server was refused (the proxy server is not accepting requests).</source>
<oldsource>the connection to the proxy timed out or the proxy did not reply in time to the request sent</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="157"/>
<location filename="browser.hxx" line="179"/>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).</source>
<oldsource>the Network Access API cannot honor the request because the protocol is not known</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="212"/>
<location filename="browser.hxx" line="242"/>
<source>Checking: %1</source>
<oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="242"/>
<location filename="browser.hxx" line="258"/>
<source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="255"/>
<location filename="browser.hxx" line="276"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="256"/>
<source>Reply Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="990"/>
<source>Network Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="284"/>
<location filename="browser.hxx" line="269"/>
<source>Zoom: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="959"/>
<location filename="browser.hxx" line="979"/>
<location filename="browser.hxx" line="989"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1009"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %4&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</source>
<oldsource>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="960"/>
<source>Unsuported Content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="81"/>
<location filename="browser.hxx" line="95"/>
<source>access to URL %1 not allowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="125"/>
<location filename="browser.hxx" line="147"/>
<source>Network connection successful, remote host can be reached.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="128"/>
<location filename="browser.hxx" line="150"/>
<source>The remote server refused the connection (the server is not accepting requests).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="131"/>
<location filename="browser.hxx" line="153"/>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="134"/>
<location filename="browser.hxx" line="156"/>
<source>The remote host name was not found (invalid hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="136"/>
<location filename="browser.hxx" line="158"/>
<source>The connection to the remote server timed out.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="138"/>
<location filename="browser.hxx" line="160"/>
<source>The operation was canceled via calls to abort() or close() before it was finished.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="141"/>
<location filename="browser.hxx" line="163"/>
<source>The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="148"/>
<location filename="browser.hxx" line="170"/>
<source>The proxy server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="151"/>
<location filename="browser.hxx" line="173"/>
<source>The proxy host name was not found (invalid proxy hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="154"/>
<location filename="browser.hxx" line="176"/>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="161"/>
<location filename="browser.hxx" line="183"/>
<source>The access to the remote content was denied (similar to HTTP error 401).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="164"/>
<location filename="browser.hxx" line="186"/>
<source>The operation requested on the remote content is not permitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="167"/>
<location filename="browser.hxx" line="189"/>
<source>The remote content was not found at the server (similar to HTTP error 404).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="170"/>
<location filename="browser.hxx" line="192"/>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="174"/>
<location filename="browser.hxx" line="196"/>
<source>The Network Access API cannot honor the request because the protocol is not known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="177"/>
<location filename="browser.hxx" line="199"/>
<source>The requested operation is invalid for this protocol.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="179"/>
<location filename="browser.hxx" line="201"/>
<source>An unknown network-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="181"/>
<location filename="browser.hxx" line="203"/>
<source>An unknown proxy-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="183"/>
<location filename="browser.hxx" line="205"/>
<source>An unknonwn error related to the remote content was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="186"/>
<location filename="browser.hxx" line="208"/>
<source>A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="189"/>
<location filename="browser.hxx" line="211"/>
<source>&lt;strong&gt;Unknown network error (code: %1).&lt;/string&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="244"/>
<location filename="browser.hxx" line="260"/>
<source>Illegal URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="254"/>
<source>network error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="264"/>
<location filename="browser.hxx" line="275"/>
<source>proxy error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="265"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;Proxy: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;%4&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="266"/>
<source>Possible Proxy Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="277"/>
<source>Connection Cannot Be Established</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="634"/>
<location filename="browser.hxx" line="575"/>
<source>Print Document</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="896"/>
<location filename="browser.hxx" line="596"/>
<source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="691"/>
<source>Info: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="715"/>
<source>done.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="968"/>
<source>%1</source>
<comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="958"/>
<source>unsupported content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="216"/>
<location filename="browser.hxx" line="245"/>
<source>Forbidden: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="217"/>
<location filename="browser.hxx" line="246"/>
<source>Access Denied</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="218"/>
<location filename="browser.hxx" line="247"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="978"/>
<location filename="browser.hxx" line="615"/>
<source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="684"/>
<source>%1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1068"/>
<source>Save File As ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1123"/>
<source>authentication required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="980"/>
<source>Authentication Required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1004"/>
<location filename="browser.hxx" line="1138"/>
<source>ssl error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1008"/>
<source>&lt;li&gt;%1&lt;/li&gt;</source>
<comment>single ssl error</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1012"/>
<source>SSL Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PinDialog</name>
@@ -419,14 +417,15 @@
<context>
<name>QObject</name>
<message>
<location filename="main.cxx" line="202"/>
<location filename="main.cxx" line="204"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;ext&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -438,8 +437,10 @@ Environment:
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -450,33 +451,33 @@ Environment:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="231"/>
<location filename="main.cxx" line="232"/>
<source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="237"/>
<location filename="main.cxx" line="238"/>
<source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="244"/>
<location filename="main.cxx" line="245"/>
<source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="249"/>
<location filename="main.cxx" line="250"/>
<source>Read private key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="254"/>
<location filename="main.cxx" line="261"/>
<source>Too few arguments.
Try: %1 --help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="261"/>
<location filename="main.cxx" line="268"/>
<source>http://swisssign.com</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -11,392 +11,390 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="42"/>
<location filename="browser.ui" line="45"/>
<source>toolBar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="73"/>
<location filename="browser.ui" line="76"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="86"/>
<location filename="browser.ui" line="89"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="102"/>
<location filename="browser.ui" line="94"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="101"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="119"/>
<source>neu laden</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="114"/>
<location filename="browser.ui" line="122"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="134"/>
<source>stoppen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="129"/>
<location filename="browser.ui" line="149"/>
<source>zurückkehren</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="147"/>
<location filename="browser.ui" line="167"/>
<source>weitergehen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="162"/>
<location filename="browser.ui" line="182"/>
<source>Startseite</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="173"/>
<location filename="browser.ui" line="185"/>
<source>Ctrl+Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="193"/>
<source>&amp;New Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="176"/>
<location filename="browser.ui" line="196"/>
<source>New Browser Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="179"/>
<location filename="browser.ui" line="199"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="184"/>
<location filename="browser.ui" line="204"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="187"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="192"/>
<location filename="browser.ui" line="209"/>
<source>&amp;Proxy...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="210"/>
<location filename="browser.ui" line="227"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="215"/>
<location filename="browser.ui" line="232"/>
<source>Next Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="218"/>
<location filename="browser.ui" line="235"/>
<source>Shift+Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="223"/>
<location filename="browser.ui" line="240"/>
<source>Previous Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="226"/>
<location filename="browser.ui" line="243"/>
<source>Shift+Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="231"/>
<location filename="browser.ui" line="248"/>
<source>New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="234"/>
<location filename="browser.ui" line="251"/>
<source>Add New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="237"/>
<location filename="browser.ui" line="254"/>
<source>Ctrl+T</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="197"/>
<location filename="browser.ui" line="259"/>
<source>Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="270"/>
<source>Close Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="278"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="137"/>
<location filename="browser.ui" line="273"/>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="262"/>
<source>find in page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="265"/>
<source>Ctrl+F</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="214"/>
<source>Print ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="207"/>
<location filename="browser.ui" line="224"/>
<source>Quick &amp;Print</source>
<oldsource>&amp;Print</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="202"/>
<location filename="browser.ui" line="219"/>
<source>Print Pre&amp;view ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="145"/>
<location filename="browser.hxx" line="167"/>
<source>The connection to the proxy server was refused (the proxy server is not accepting requests).</source>
<oldsource>the connection to the proxy timed out or the proxy did not reply in time to the request sent</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="157"/>
<location filename="browser.hxx" line="179"/>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).</source>
<oldsource>the Network Access API cannot honor the request because the protocol is not known</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="212"/>
<location filename="browser.hxx" line="242"/>
<source>Checking: %1</source>
<oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="242"/>
<location filename="browser.hxx" line="258"/>
<source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="255"/>
<location filename="browser.hxx" line="276"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="256"/>
<source>Reply Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="990"/>
<source>Network Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="284"/>
<location filename="browser.hxx" line="269"/>
<source>Zoom: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="959"/>
<location filename="browser.hxx" line="979"/>
<location filename="browser.hxx" line="989"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1009"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %4&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</source>
<oldsource>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="960"/>
<source>Unsuported Content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="81"/>
<location filename="browser.hxx" line="95"/>
<source>access to URL %1 not allowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="125"/>
<location filename="browser.hxx" line="147"/>
<source>Network connection successful, remote host can be reached.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="128"/>
<location filename="browser.hxx" line="150"/>
<source>The remote server refused the connection (the server is not accepting requests).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="131"/>
<location filename="browser.hxx" line="153"/>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="134"/>
<location filename="browser.hxx" line="156"/>
<source>The remote host name was not found (invalid hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="136"/>
<location filename="browser.hxx" line="158"/>
<source>The connection to the remote server timed out.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="138"/>
<location filename="browser.hxx" line="160"/>
<source>The operation was canceled via calls to abort() or close() before it was finished.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="141"/>
<location filename="browser.hxx" line="163"/>
<source>The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="148"/>
<location filename="browser.hxx" line="170"/>
<source>The proxy server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="151"/>
<location filename="browser.hxx" line="173"/>
<source>The proxy host name was not found (invalid proxy hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="154"/>
<location filename="browser.hxx" line="176"/>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="161"/>
<location filename="browser.hxx" line="183"/>
<source>The access to the remote content was denied (similar to HTTP error 401).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="164"/>
<location filename="browser.hxx" line="186"/>
<source>The operation requested on the remote content is not permitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="167"/>
<location filename="browser.hxx" line="189"/>
<source>The remote content was not found at the server (similar to HTTP error 404).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="170"/>
<location filename="browser.hxx" line="192"/>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="174"/>
<location filename="browser.hxx" line="196"/>
<source>The Network Access API cannot honor the request because the protocol is not known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="177"/>
<location filename="browser.hxx" line="199"/>
<source>The requested operation is invalid for this protocol.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="179"/>
<location filename="browser.hxx" line="201"/>
<source>An unknown network-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="181"/>
<location filename="browser.hxx" line="203"/>
<source>An unknown proxy-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="183"/>
<location filename="browser.hxx" line="205"/>
<source>An unknonwn error related to the remote content was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="186"/>
<location filename="browser.hxx" line="208"/>
<source>A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="189"/>
<location filename="browser.hxx" line="211"/>
<source>&lt;strong&gt;Unknown network error (code: %1).&lt;/string&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="244"/>
<location filename="browser.hxx" line="260"/>
<source>Illegal URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="254"/>
<source>network error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="264"/>
<location filename="browser.hxx" line="275"/>
<source>proxy error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="265"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;Proxy: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;%4&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="266"/>
<source>Possible Proxy Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="277"/>
<source>Connection Cannot Be Established</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="634"/>
<location filename="browser.hxx" line="575"/>
<source>Print Document</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="896"/>
<location filename="browser.hxx" line="596"/>
<source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="691"/>
<source>Info: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="715"/>
<source>done.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="968"/>
<source>%1</source>
<comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="958"/>
<source>unsupported content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="216"/>
<location filename="browser.hxx" line="245"/>
<source>Forbidden: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="217"/>
<location filename="browser.hxx" line="246"/>
<source>Access Denied</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="218"/>
<location filename="browser.hxx" line="247"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="978"/>
<location filename="browser.hxx" line="615"/>
<source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="684"/>
<source>%1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1068"/>
<source>Save File As ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1123"/>
<source>authentication required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="980"/>
<source>Authentication Required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1004"/>
<location filename="browser.hxx" line="1138"/>
<source>ssl error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1008"/>
<source>&lt;li&gt;%1&lt;/li&gt;</source>
<comment>single ssl error</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1012"/>
<source>SSL Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PinDialog</name>
@@ -419,14 +417,15 @@
<context>
<name>QObject</name>
<message>
<location filename="main.cxx" line="202"/>
<location filename="main.cxx" line="204"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;ext&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -438,8 +437,10 @@ Environment:
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -450,33 +451,33 @@ Environment:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="231"/>
<location filename="main.cxx" line="232"/>
<source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="237"/>
<location filename="main.cxx" line="238"/>
<source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="244"/>
<location filename="main.cxx" line="245"/>
<source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="249"/>
<location filename="main.cxx" line="250"/>
<source>Read private key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="254"/>
<location filename="main.cxx" line="261"/>
<source>Too few arguments.
Try: %1 --help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="261"/>
<location filename="main.cxx" line="268"/>
<source>http://swisssign.com</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -11,392 +11,390 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="42"/>
<location filename="browser.ui" line="45"/>
<source>toolBar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="73"/>
<location filename="browser.ui" line="76"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="86"/>
<location filename="browser.ui" line="89"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="102"/>
<location filename="browser.ui" line="94"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="101"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="119"/>
<source>neu laden</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="114"/>
<location filename="browser.ui" line="122"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="134"/>
<source>stoppen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="129"/>
<location filename="browser.ui" line="149"/>
<source>zurückkehren</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="147"/>
<location filename="browser.ui" line="167"/>
<source>weitergehen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="162"/>
<location filename="browser.ui" line="182"/>
<source>Startseite</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="173"/>
<location filename="browser.ui" line="185"/>
<source>Ctrl+Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="193"/>
<source>&amp;New Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="176"/>
<location filename="browser.ui" line="196"/>
<source>New Browser Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="179"/>
<location filename="browser.ui" line="199"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="184"/>
<location filename="browser.ui" line="204"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="187"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="192"/>
<location filename="browser.ui" line="209"/>
<source>&amp;Proxy...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="210"/>
<location filename="browser.ui" line="227"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="215"/>
<location filename="browser.ui" line="232"/>
<source>Next Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="218"/>
<location filename="browser.ui" line="235"/>
<source>Shift+Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="223"/>
<location filename="browser.ui" line="240"/>
<source>Previous Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="226"/>
<location filename="browser.ui" line="243"/>
<source>Shift+Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="231"/>
<location filename="browser.ui" line="248"/>
<source>New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="234"/>
<location filename="browser.ui" line="251"/>
<source>Add New Tab</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="237"/>
<location filename="browser.ui" line="254"/>
<source>Ctrl+T</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="197"/>
<location filename="browser.ui" line="259"/>
<source>Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="270"/>
<source>Close Find</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="278"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="137"/>
<location filename="browser.ui" line="273"/>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="262"/>
<source>find in page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="265"/>
<source>Ctrl+F</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="214"/>
<source>Print ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="207"/>
<location filename="browser.ui" line="224"/>
<source>Quick &amp;Print</source>
<oldsource>&amp;Print</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.ui" line="202"/>
<location filename="browser.ui" line="219"/>
<source>Print Pre&amp;view ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="145"/>
<location filename="browser.hxx" line="167"/>
<source>The connection to the proxy server was refused (the proxy server is not accepting requests).</source>
<oldsource>the connection to the proxy timed out or the proxy did not reply in time to the request sent</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="157"/>
<location filename="browser.hxx" line="179"/>
<source>The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).</source>
<oldsource>the Network Access API cannot honor the request because the protocol is not known</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="212"/>
<location filename="browser.hxx" line="242"/>
<source>Checking: %1</source>
<oldsource>Opening: %1</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="242"/>
<location filename="browser.hxx" line="258"/>
<source>Reading: %1</source>
<oldsource>Reading: %1%</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="255"/>
<location filename="browser.hxx" line="276"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="256"/>
<source>Reply Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="990"/>
<source>Network Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="284"/>
<location filename="browser.hxx" line="269"/>
<source>Zoom: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="959"/>
<location filename="browser.hxx" line="979"/>
<location filename="browser.hxx" line="989"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1009"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %4&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</source>
<oldsource>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;URL: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;h3&gt;SSL Errors&lt;/h3&gt;&lt;p&gt;&lt;ul&gt;%3&lt;/ul&gt;&lt;/p&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="960"/>
<source>Unsuported Content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="81"/>
<location filename="browser.hxx" line="95"/>
<source>access to URL %1 not allowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="125"/>
<location filename="browser.hxx" line="147"/>
<source>Network connection successful, remote host can be reached.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="128"/>
<location filename="browser.hxx" line="150"/>
<source>The remote server refused the connection (the server is not accepting requests).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="131"/>
<location filename="browser.hxx" line="153"/>
<source>The remote server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="134"/>
<location filename="browser.hxx" line="156"/>
<source>The remote host name was not found (invalid hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="136"/>
<location filename="browser.hxx" line="158"/>
<source>The connection to the remote server timed out.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="138"/>
<location filename="browser.hxx" line="160"/>
<source>The operation was canceled via calls to abort() or close() before it was finished.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="141"/>
<location filename="browser.hxx" line="163"/>
<source>The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="148"/>
<location filename="browser.hxx" line="170"/>
<source>The proxy server closed the connection prematurely, before the entire reply was received and processed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="151"/>
<location filename="browser.hxx" line="173"/>
<source>The proxy host name was not found (invalid proxy hostname).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="154"/>
<location filename="browser.hxx" line="176"/>
<source>The connection to the proxy timed out or the proxy did not reply in time to the request sent.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="161"/>
<location filename="browser.hxx" line="183"/>
<source>The access to the remote content was denied (similar to HTTP error 401).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="164"/>
<location filename="browser.hxx" line="186"/>
<source>The operation requested on the remote content is not permitted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="167"/>
<location filename="browser.hxx" line="189"/>
<source>The remote content was not found at the server (similar to HTTP error 404).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="170"/>
<location filename="browser.hxx" line="192"/>
<source>The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="174"/>
<location filename="browser.hxx" line="196"/>
<source>The Network Access API cannot honor the request because the protocol is not known.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="177"/>
<location filename="browser.hxx" line="199"/>
<source>The requested operation is invalid for this protocol.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="179"/>
<location filename="browser.hxx" line="201"/>
<source>An unknown network-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="181"/>
<location filename="browser.hxx" line="203"/>
<source>An unknown proxy-related error was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="183"/>
<location filename="browser.hxx" line="205"/>
<source>An unknonwn error related to the remote content was detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="186"/>
<location filename="browser.hxx" line="208"/>
<source>A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="189"/>
<location filename="browser.hxx" line="211"/>
<source>&lt;strong&gt;Unknown network error (code: %1).&lt;/string&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="244"/>
<location filename="browser.hxx" line="260"/>
<source>Illegal URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="254"/>
<source>network error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="264"/>
<location filename="browser.hxx" line="275"/>
<source>proxy error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="265"/>
<source>&lt;h2&gt;%1&lt;/h2&gt;&lt;p&gt;Proxy: %3&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;%4&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="266"/>
<source>Possible Proxy Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="277"/>
<source>Connection Cannot Be Established</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="634"/>
<location filename="browser.hxx" line="575"/>
<source>Print Document</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="896"/>
<location filename="browser.hxx" line="596"/>
<source>%1 - %2</source>
<oldsource>Back to %1 - %2</oldsource>
<comment>statusbar actionBack_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="691"/>
<source>Info: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="715"/>
<source>done.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="968"/>
<source>%1</source>
<comment>statusbar for hovered link %1=url</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="958"/>
<source>unsupported content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="216"/>
<location filename="browser.hxx" line="245"/>
<source>Forbidden: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="217"/>
<location filename="browser.hxx" line="246"/>
<source>Access Denied</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="218"/>
<location filename="browser.hxx" line="247"/>
<source>&lt;p&gt;Access denied due to security considerations.&lt;/p&gt;&lt;p&gt;You are not allowed to connect to %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="978"/>
<location filename="browser.hxx" line="615"/>
<source>%1 - %2</source>
<comment>statusbar actionForward_hovered %1=url %2=title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="684"/>
<source>%1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1068"/>
<source>Save File As ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1123"/>
<source>authentication required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="980"/>
<source>Authentication Required</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1004"/>
<location filename="browser.hxx" line="1138"/>
<source>ssl error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1008"/>
<source>&lt;li&gt;%1&lt;/li&gt;</source>
<comment>single ssl error</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="browser.hxx" line="1012"/>
<source>SSL Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PinDialog</name>
@@ -419,14 +417,15 @@
<context>
<name>QObject</name>
<message>
<location filename="main.cxx" line="202"/>
<location filename="main.cxx" line="204"/>
<source>Usage: %1 [OPTIONS...] [&lt;url&gt; ...]
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;ext&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -438,8 +437,10 @@ Environment:
Options:
-h, --help show this help text
-k, --kiosk no url bar
-p, --no-proxy no proxy detection
-c, --cert &lt;file&gt; load local client certificate from &lt;file&gt;
-y, --key &lt;file&gt; load local certificate key from &lt;file&gt;
-m, --mime &lt;mime&gt; &lt;tool&gt;
start &lt;tool&gt; for mimetype &lt;mime&gt;
&lt;url&gt; optional full URL
Environment:
LANGUAGE &quot;de&quot;, &quot;en&quot;, ... (actual: %5)
@@ -450,33 +451,33 @@ Environment:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="231"/>
<location filename="main.cxx" line="232"/>
<source>Cannot read PEM certificate from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="237"/>
<location filename="main.cxx" line="238"/>
<source>Read PEM certificates from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="244"/>
<location filename="main.cxx" line="245"/>
<source>Cannot read PEM RSA key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="249"/>
<location filename="main.cxx" line="250"/>
<source>Read private key from file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="254"/>
<location filename="main.cxx" line="261"/>
<source>Too few arguments.
Try: %1 --help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cxx" line="261"/>
<location filename="main.cxx" line="268"/>
<source>http://swisssign.com</source>
<translation type="unfinished"></translation>
</message>