summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2010-05-19 16:06:43 +0200
committerAndrea Diamantini <adjam7@gmail.com>2010-05-19 16:06:43 +0200
commit8ea63d83c5251bcff66de198afabc227162c637f (patch)
treef88a9e2ed5713b3f111023f187be157013fa94c1 /src
parentBIG COMMIT (diff)
downloadrekonq-8ea63d83c5251bcff66de198afabc227162c637f.tar.xz
Fix download handling
This commit, together with adawit's patch to QtWebKit (not yet merged) && KIO will definitely solve download handling. At least, I hope so :)
Diffstat (limited to 'src')
-rw-r--r--src/webpage.cpp21
-rw-r--r--src/webpage.h11
-rw-r--r--src/webview.cpp9
3 files changed, 29 insertions, 12 deletions
diff --git a/src/webpage.cpp b/src/webpage.cpp
index b0397870..9da75a91 100644
--- a/src/webpage.cpp
+++ b/src/webpage.cpp
@@ -296,7 +296,7 @@ void WebPage::handleUnsupportedContent(QNetworkReply *reply)
isLocal
? KMessageBox::sorry(view(), i18n("No service can handle this :("))
- : downloadRequest(reply->request());
+ : downloadThings(reply->request(), suggestedFileName);
return;
}
@@ -312,7 +312,7 @@ void WebPage::handleUnsupportedContent(QNetworkReply *reply)
{
case KParts::BrowserOpenOrSaveQuestion::Save:
kDebug() << "service handling: download!";
- downloadRequest(reply->request());
+ downloadThings(reply->request(), suggestedFileName);
return;
case KParts::BrowserOpenOrSaveQuestion::Cancel:
@@ -491,15 +491,28 @@ QString WebPage::errorPage(QNetworkReply *reply)
// this code is actually copied from KWebPage::downloadRequest to save
// downloads data before. If you have some better ideas about,
// feel free to let us know about :)
-void WebPage::downloadRequest(const QNetworkRequest &request)
+void WebPage::downloadThings(const QNetworkRequest &request, const QString &suggestedFileName)
{
KUrl destUrl;
KUrl srcUrl(request.url());
+
+ if( !ReKonfig::kgetDownload() && suggestedFileName.isEmpty() )
+ {
+ kDebug() << "Using KWebPage downloadRequest..";
+ Application::historyManager()->addDownload(srcUrl.pathOrUrl() , destUrl.pathOrUrl());
+ KWebPage::downloadRequest(request);
+ return;
+ }
+
int result = KIO::R_OVERWRITE;
do
{
- destUrl = KFileDialog::getSaveFileName(srcUrl.fileName(), QString(), view());
+ QString fName = suggestedFileName.isEmpty()
+ ? srcUrl.fileName()
+ : suggestedFileName;
+
+ destUrl = KFileDialog::getSaveFileName(fName, QString(), view());
if (destUrl.isLocalFile())
{
diff --git a/src/webpage.h b/src/webpage.h
index 9b2243bc..eff4c3fc 100644
--- a/src/webpage.h
+++ b/src/webpage.h
@@ -67,7 +67,6 @@ public:
inline void setIsOnRekonqPage(bool b) { _isOnRekonqPage = b; };
public slots:
- virtual void downloadRequest(const QNetworkRequest &request);
void downloadAllContentsWithKGet(QPoint);
protected:
@@ -84,7 +83,15 @@ private slots:
void showSSLInfo(QPoint);
void updateImage(bool ok);
-private:
+ /**
+ * This new slot is needed to provide integration between rekonq & KGet,
+ * to better manage file names and to not overwrite KWebPage default behavior on need
+ *
+ * @see KWebPage::downloadRequest.
+ */
+ void downloadThings(const QNetworkRequest &request, const QString &suggestedFileName = QString());
+
+private:
QString errorPage(QNetworkReply *reply);
QUrl _loadingUrl;
diff --git a/src/webview.cpp b/src/webview.cpp
index e7226740..1996d6af 100644
--- a/src/webview.cpp
+++ b/src/webview.cpp
@@ -76,14 +76,11 @@ WebView::WebView(QWidget* parent)
setPage(page);
// download system
- connect(this, SIGNAL(linkShiftClicked(const KUrl &)),
- page, SLOT(downloadUrl(const KUrl &)));
- connect(page, SIGNAL(downloadRequested(const QNetworkRequest &)),
- page, SLOT(downloadRequest(const QNetworkRequest &)));
+ connect(this, SIGNAL(linkShiftClicked(const KUrl &)), page, SLOT(downloadUrl(const KUrl &)));
+ connect(page, SIGNAL(downloadRequested(const QNetworkRequest &)), page, SLOT(downloadThings(const QNetworkRequest &)));
// middle click || ctrl + click signal
- connect(this, SIGNAL(linkMiddleOrCtrlClicked(const KUrl &)),
- this, SLOT(loadUrlInNewTab(const KUrl &)));
+ connect(this, SIGNAL(linkMiddleOrCtrlClicked(const KUrl &)), this, SLOT(loadUrlInNewTab(const KUrl &)));
// loadUrl signal
connect(this, SIGNAL(loadUrl(const KUrl &, const Rekonq::OpenType &)),