[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