From 8ea63d83c5251bcff66de198afabc227162c637f Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 19 May 2010 16:06:43 +0200 Subject: 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 :) --- src/webpage.cpp | 21 +++++++++++++++++---- src/webpage.h | 11 +++++++++-- src/webview.cpp | 9 +++------ 3 files changed, 29 insertions(+), 12 deletions(-) (limited to 'src') 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 &)), -- cgit v1.2.1