[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/libs/webkitkde
From: Urs Wolfer <uwolfer () kde ! org>
Date: 2009-04-22 21:04:13
Message-ID: 1240434253.355803.16451.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 957782 by uwolfer:
Improve handling of download file names.
BUG:186272
M +28 -2 kdewebkit/kwebpage.cpp
M +1 -0 kdewebkit/kwebpage.h
M +3 -1 part/webpage.cpp
--- trunk/playground/libs/webkitkde/kdewebkit/kwebpage.cpp #957781:957782
@@ -95,6 +95,8 @@
{
public:
KWebPagePrivate() {}
+
+ QString getFileNameForDownload(const QNetworkRequest &request, QNetworkReply \
*reply) const; #if KDE_IS_VERSION(4, 2, 70)
KIO::AccessManager* accessManager;
#else
@@ -102,6 +104,22 @@
#endif
};
+QString KWebPage::KWebPagePrivate::getFileNameForDownload(const QNetworkRequest \
&request, QNetworkReply *reply) const +{
+ QString fileName = KUrl(request.url()).fileName();
+ if (reply && reply->hasRawHeader("Content-Disposition")) { // based on code from \
arora, downloadmanger.cpp + const QString value = \
QLatin1String(reply->rawHeader("Content-Disposition")); + const int pos = \
value.indexOf(QLatin1String("filename=")); + if (pos != -1) {
+ QString name = value.mid(pos + 9);
+ if (name.startsWith(QLatin1Char('"')) && \
name.endsWith(QLatin1Char('"'))) + name = name.mid(1, name.size() - \
2); + fileName = name;
+ }
+ }
+ return fileName;
+}
+
KWebPage::KWebPage(QObject *parent)
: QWebPage(parent), d(new KWebPage::KWebPagePrivate())
{
@@ -234,10 +252,10 @@
KParts::BrowserRun::AskSaveResult res = KParts::BrowserRun::askEmbedOrSave(
url,
\
reply->header(QNetworkRequest::ContentTypeHeader).toString(),
- url.fileName());
+ \
d->getFileNameForDownload(reply->request(), reply)); switch (res) {
case KParts::BrowserRun::Save:
- slotDownloadRequested(reply->request());
+ slotDownloadRequested(reply->request(), reply);
return;
case KParts::BrowserRun::Cancel:
return;
@@ -257,11 +275,19 @@
return loader.createWidget(classId, view());
}
+
void KWebPage::slotDownloadRequested(const QNetworkRequest &request)
{
+ slotDownloadRequested(request, 0);
+}
+
+void KWebPage::slotDownloadRequested(const QNetworkRequest &request, QNetworkReply \
*reply) +{
const KUrl url(request.url());
kDebug() << url;
+ const QString fileName = d->getFileNameForDownload(request, reply);
+
// parts of following code are based on khtml_ext.cpp
// DownloadManager <-> konqueror integration
// find if the integration is enabled
--- trunk/playground/libs/webkitkde/kdewebkit/kwebpage.h #957781:957782
@@ -62,6 +62,7 @@
protected Q_SLOTS:
virtual void slotHandleUnsupportedContent(QNetworkReply *reply);
virtual void slotDownloadRequested(const QNetworkRequest &request);
+ virtual void slotDownloadRequested(const QNetworkRequest &request, QNetworkReply \
*reply);
private:
class KWebPagePrivate;
--- trunk/playground/libs/webkitkde/part/webpage.cpp #957781:957782
@@ -154,7 +154,9 @@
{
const KUrl url(reply->request().url());
KParts::OpenUrlArguments args;
- args.setMimeType(reply->header(QNetworkRequest::ContentTypeHeader).toString());
+ Q_FOREACH (const QByteArray &headerName, reply->rawHeaderList()) {
+ args.metaData().insert(QString(headerName), \
QString(reply->rawHeader(headerName))); + }
emit m_part->browserExtension()->openUrlRequest(url, args, \
KParts::BrowserArguments()); }
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic