Mercurial > projects > qtd
comparison demos/browser/networkaccessmanager.d @ 73:7bfd46c330dc
more porting
author | mandel |
---|---|
date | Fri, 22 May 2009 10:59:00 +0000 |
parents | 71b382c10ef6 |
children | 37caa90ce503 |
comparison
equal
deleted
inserted
replaced
72:b149ef2cb18b | 73:7bfd46c330dc |
---|---|
40 ****************************************************************************/ | 40 ****************************************************************************/ |
41 | 41 |
42 module networkaccessmanager; | 42 module networkaccessmanager; |
43 | 43 |
44 | 44 |
45 import QtNetwork.QNetworkAccessManager; | 45 import qt.network.QNetworkAccessManager; |
46 | |
47 import qt.core.QSettings; | |
48 | |
49 import qt.gui.QDesktopServices; | |
50 import qt.gui.QDialog; | |
51 import qt.gui.QMessageBox; | |
52 import qt.gui.QStyle; | |
53 import qt.gui.QTextDocument; | |
54 | |
55 import qt.network.QAuthenticator; | |
56 import qt.network.QNetworkDiskCache; | |
57 import qt.network.QNetworkProxy; | |
58 import qt.network.QNetworkReply; | |
59 import qt.network.QSslError; | |
46 | 60 |
47 import browserapplication; | 61 import browserapplication; |
48 import browsermainwindow; | 62 import browsermainwindow; |
49 import ui_passworddialog; | 63 import ui_passworddialog; |
50 import ui_proxy; | 64 import ui_proxy; |
51 | 65 |
52 import QtCore.QSettings; | |
53 | |
54 import QtGui.QDesktopServices; | |
55 import QtGui.QDialog; | |
56 import QtGui.QMessageBox; | |
57 import QtGui.QStyle; | |
58 import QtGui.QTextDocument; | |
59 | |
60 import QtNetwork.QAuthenticator; | |
61 import QtNetwork.QNetworkDiskCache; | |
62 import QtNetwork.QNetworkProxy; | |
63 import QtNetwork.QNetworkReply; | |
64 import QtNetwork.QSslError; | |
65 | |
66 | 66 |
67 class NetworkAccessManager : public QNetworkAccessManager | 67 class NetworkAccessManager : public QNetworkAccessManager |
68 { | 68 { |
69 Q_OBJECT | 69 public: |
70 this(QObject parent = null) | |
71 { | |
72 super(parent); | |
70 | 73 |
71 public: | 74 this.authenticationRequired.connect(&authenticationRequired); |
72 this(QObject *parent = null) | 75 this.proxyAuthenticationRequired.connect(&proxyAuthenticationRequired); |
73 { | 76 version(QT_NO_OPENSSL) { |
74 super(parent); | 77 this.sslErrors.connect(&sslErrors); |
75 | 78 } |
76 connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), | 79 loadSettings(); |
77 SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*))); | |
78 connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), | |
79 SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*))); | |
80 version(QT_NO_OPENSSL) { | |
81 connect(this, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), | |
82 SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&))); | |
83 } | |
84 loadSettings(); | |
85 | 80 |
86 QNetworkDiskCache *diskCache = new QNetworkDiskCache(this); | 81 QNetworkDiskCache diskCache = new QNetworkDiskCache(this); |
87 QString location = QDesktopServices::storageLocation(QDesktopServices::CacheLocation); | 82 QString location = QDesktopServices.storageLocation(QDesktopServices.CacheLocation); |
88 diskCache.setCacheDirectory(location); | 83 diskCache.setCacheDirectory(location); |
89 setCache(diskCache); | 84 setCache(diskCache); |
90 } | 85 } |
91 | 86 |
92 private: | 87 private: |
93 QList<QString> sslTrustedHostList; | 88 QList<QString> sslTrustedHostList; |
94 | 89 |
95 public slots: | 90 public: |
96 void loadSettings() | |
97 { | |
98 QSettings settings; | |
99 settings.beginGroup(QLatin1String("proxy")); | |
100 QNetworkProxy proxy; | |
101 if (settings.value(QLatin1String("enabled"), false).toBool()) { | |
102 if (settings.value(QLatin1String("type"), 0).toInt() == 0) | |
103 proxy = QNetworkProxy::Socks5Proxy; | |
104 else | |
105 proxy = QNetworkProxy::HttpProxy; | |
106 proxy.setHostName(settings.value(QLatin1String("hostName")).toString()); | |
107 proxy.setPort(settings.value(QLatin1String("port"), 1080).toInt()); | |
108 proxy.setUser(settings.value(QLatin1String("userName")).toString()); | |
109 proxy.setPassword(settings.value(QLatin1String("password")).toString()); | |
110 } | |
111 setProxy(proxy); | |
112 } | |
113 | 91 |
92 void loadSettings() | |
93 { | |
94 QSettings settings; | |
95 settings.beginGroup(QLatin1String("proxy")); | |
96 QNetworkProxy proxy; | |
97 if (settings.value(QLatin1String("enabled"), false).toBool()) { | |
98 if (settings.value(QLatin1String("type"), 0).toInt() == 0) | |
99 proxy = QNetworkProxy.Socks5Proxy; | |
100 else | |
101 proxy = QNetworkProxy.HttpProxy; | |
102 proxy.setHostName(settings.value(QLatin1String("hostName")).toString()); | |
103 proxy.setPort(settings.value(QLatin1String("port"), 1080).toInt()); | |
104 proxy.setUser(settings.value(QLatin1String("userName")).toString()); | |
105 proxy.setPassword(settings.value(QLatin1String("password")).toString()); | |
106 } | |
107 setProxy(proxy); | |
108 } | |
114 | 109 |
115 private slots: | 110 private: |
116 void authenticationRequired(QNetworkReply *reply, QAuthenticator *auth) | |
117 { | |
118 BrowserMainWindow *mainWindow = BrowserApplication::instance().mainWindow(); | |
119 | 111 |
120 QDialog dialog(mainWindow); | 112 void authenticationRequired(QNetworkReply reply, QAuthenticator auth) |
121 dialog.setWindowFlags(Qt::Sheet); | 113 { |
114 BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow(); | |
122 | 115 |
123 Ui::PasswordDialog passwordDialog; | 116 QDialog dialog(mainWindow); |
124 passwordDialog.setupUi(&dialog); | 117 dialog.setWindowFlags(Qt.Sheet); |
125 | 118 |
126 passwordDialog.iconLabel.setText(QString()); | 119 Ui.PasswordDialog passwordDialog; |
127 passwordDialog.iconLabel.setPixmap(mainWindow.style().standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); | 120 passwordDialog.setupUi(&dialog); |
128 | 121 |
129 QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>"); | 122 passwordDialog.iconLabel.setText(QString()); |
130 introMessage = introMessage.arg(Qt::escape(reply.url().toString())).arg(Qt::escape(reply.url().toString())); | 123 passwordDialog.iconLabel.setPixmap(mainWindow.style().standardIcon(QStyle.SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); |
131 passwordDialog.introLabel.setText(introMessage); | |
132 passwordDialog.introLabel.setWordWrap(true); | |
133 | 124 |
134 if (dialog.exec() == QDialog::Accepted) { | 125 QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>"); |
135 auth.setUser(passwordDialog.userNameLineEdit.text()); | 126 introMessage = introMessage.arg(Qt.escape(reply.url().toString())).arg(Qt.escape(reply.url().toString())); |
136 auth.setPassword(passwordDialog.passwordLineEdit.text()); | 127 passwordDialog.introLabel.setText(introMessage); |
137 } | 128 passwordDialog.introLabel.setWordWrap(true); |
138 } | |
139 | 129 |
140 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth) | 130 if (dialog.exec() == QDialog.Accepted) { |
141 { | 131 auth.setUser(passwordDialog.userNameLineEdit.text()); |
142 BrowserMainWindow *mainWindow = BrowserApplication::instance().mainWindow(); | 132 auth.setPassword(passwordDialog.passwordLineEdit.text()); |
133 } | |
134 } | |
143 | 135 |
144 QDialog dialog(mainWindow); | 136 void proxyAuthenticationRequired(const QNetworkProxy proxy, QAuthenticator auth) |
145 dialog.setWindowFlags(Qt::Sheet); | 137 { |
138 BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow(); | |
146 | 139 |
147 Ui::ProxyDialog proxyDialog; | 140 QDialog dialog(mainWindow); |
148 proxyDialog.setupUi(&dialog); | 141 dialog.setWindowFlags(Qt.Sheet); |
149 | 142 |
150 proxyDialog.iconLabel.setText(QString()); | 143 Ui.ProxyDialog proxyDialog; |
151 proxyDialog.iconLabel.setPixmap(mainWindow.style().standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); | 144 proxyDialog.setupUi(&dialog); |
152 | 145 |
153 QString introMessage = tr("<qt>Connect to proxy \"%1\" using:</qt>"); | 146 proxyDialog.iconLabel.setText(QString()); |
154 introMessage = introMessage.arg(Qt::escape(proxy.hostName())); | 147 proxyDialog.iconLabel.setPixmap(mainWindow.style().standardIcon(QStyle.SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); |
155 proxyDialog.introLabel.setText(introMessage); | |
156 proxyDialog.introLabel.setWordWrap(true); | |
157 | 148 |
158 if (dialog.exec() == QDialog::Accepted) { | 149 QString introMessage = tr("<qt>Connect to proxy \"%1\" using:</qt>"); |
159 auth.setUser(proxyDialog.userNameLineEdit.text()); | 150 introMessage = introMessage.arg(Qt.escape(proxy.hostName())); |
160 auth.setPassword(proxyDialog.passwordLineEdit.text()); | 151 proxyDialog.introLabel.setText(introMessage); |
161 } | 152 proxyDialog.introLabel.setWordWrap(true); |
162 } | 153 |
154 if (dialog.exec() == QDialog.Accepted) { | |
155 auth.setUser(proxyDialog.userNameLineEdit.text()); | |
156 auth.setPassword(proxyDialog.passwordLineEdit.text()); | |
157 } | |
158 } | |
163 | 159 |
164 version(QT_NO_OPENSSL) { | 160 version(QT_NO_OPENSSL) { |
165 void sslErrors(QNetworkReply *reply, const QList<QSslError> &error) | 161 void sslErrors(QNetworkReply reply, QList<QSslError> error) |
166 { | 162 { |
167 // check if SSL certificate has been trusted already | 163 // check if SSL certificate has been trusted already |
168 QString replyHost = reply.url().host() + ":" + reply.url().port(); | 164 QString replyHost = reply.url().host() + ":" + reply.url().port(); |
169 if(! sslTrustedHostList.contains(replyHost)) { | 165 if(! sslTrustedHostList.contains(replyHost)) { |
170 BrowserMainWindow *mainWindow = BrowserApplication::instance().mainWindow(); | 166 BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow(); |
171 | 167 |
172 QStringList errorStrings; | 168 QStringList errorStrings; |
173 for (int i = 0; i < error.count(); ++i) | 169 for (int i = 0; i < error.count(); ++i) |
174 errorStrings += error.at(i).errorString(); | 170 errorStrings += error.at(i).errorString(); |
175 QString errors = errorStrings.join(QLatin1String("\n")); | 171 QString errors = errorStrings.join(QLatin1String("\n")); |
176 int ret = QMessageBox::warning(mainWindow, QCoreApplication::applicationName(), | 172 int ret = QMessageBox.warning(mainWindow, QCoreApplication.applicationName(), |
177 tr("SSL Errors:\n\n%1\n\n%2\n\n" | 173 tr("SSL Errors:\n\n%1\n\n%2\n\n" |
178 "Do you want to ignore these errors for this host?").arg(reply.url().toString()).arg(errors), | 174 "Do you want to ignore these errors for this host?").arg(reply.url().toString()).arg(errors), |
179 QMessageBox::Yes | QMessageBox::No, | 175 QMessageBox.Yes | QMessageBox.No, QMessageBox.No); |
180 QMessageBox::No); | 176 if (ret == QMessageBox.Yes) { |
181 if (ret == QMessageBox::Yes) { | 177 reply.ignoreSslErrors(); |
182 reply.ignoreSslErrors(); | 178 sslTrustedHostList.append(replyHost); |
183 sslTrustedHostList.append(replyHost); | 179 } |
184 } | 180 } |
185 } | 181 } |
186 } | |
187 } | 182 } |
188 | 183 |
189 } | 184 } |