From fba650c3d774c595b6726c7140ff12353f8c0a4c Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 18 Sep 2015 15:02:06 +0200 Subject: Make the MIME-type of downloads available An application currently have to rely on suggested filename only to guess the type of a download. This is often insufficient when the suffix is misleading or missing. This patch adds the mimetype to the reported metadata and also adds a mimetype appropriate suffix to suggested filenames. Task-number: QTBUG-48206 Change-Id: I4c70f076d6eb5ae820fd6b7f568515eeb7c18df5 Reviewed-by: Leena Miettinen Reviewed-by: Joerg Bornemann --- src/core/download_manager_delegate_qt.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/core/download_manager_delegate_qt.cpp') diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index e9af98fd8..6d29af76a 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include "browser_context_adapter.h" @@ -102,23 +103,28 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(content::DownloadItem* i return true; } - std::string suggestedFilename = item->GetSuggestedFilename(); + QString suggestedFilename = toQt(item->GetSuggestedFilename()); + QString mimeTypeString = toQt(item->GetMimeType()); - if (suggestedFilename.empty()) - suggestedFilename = net::HttpContentDisposition(item->GetContentDisposition(), std::string()).filename(); + if (suggestedFilename.isEmpty()) + suggestedFilename = toQt(net::HttpContentDisposition(item->GetContentDisposition(), std::string()).filename()); - if (suggestedFilename.empty()) - suggestedFilename = item->GetTargetFilePath().AsUTF8Unsafe(); + if (suggestedFilename.isEmpty()) + suggestedFilename = toQt(item->GetTargetFilePath().AsUTF8Unsafe()); - if (suggestedFilename.empty()) - suggestedFilename = item->GetURL().ExtractFileName(); + if (suggestedFilename.isEmpty()) + suggestedFilename = toQt(item->GetURL().ExtractFileName()); - if (suggestedFilename.empty()) - suggestedFilename = "qwe_download"; + if (suggestedFilename.isEmpty()) { + suggestedFilename = QStringLiteral("qwe_download"); + QMimeType mimeType = QMimeDatabase().mimeTypeForName(mimeTypeString); + if (mimeType.isValid() && !mimeType.preferredSuffix().isEmpty()) + suggestedFilename += QStringLiteral(".") + mimeType.preferredSuffix(); + } QDir defaultDownloadDirectory = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QFileInfo suggestedFile(defaultDownloadDirectory.absoluteFilePath(QString::fromStdString(suggestedFilename))); + QFileInfo suggestedFile(defaultDownloadDirectory.absoluteFilePath(suggestedFilename)); QString suggestedFilePath = suggestedFile.absoluteFilePath(); QString tmpFileBase = QString("%1%2%3").arg(suggestedFile.absolutePath()).arg(QDir::separator()).arg(suggestedFile.baseName()); @@ -139,6 +145,7 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(content::DownloadItem* i item->GetState(), item->GetTotalBytes(), item->GetReceivedBytes(), + mimeTypeString, suggestedFilePath, false /* accepted */ }; @@ -191,6 +198,7 @@ void DownloadManagerDelegateQt::OnDownloadUpdated(content::DownloadItem *downloa download->GetState(), download->GetTotalBytes(), download->GetReceivedBytes(), + toQt(download->GetMimeType()), QString(), true /* accepted */ }; -- cgit v1.2.3