diff options
author | Tamas Zakor <ztamas@inf.u-szeged.hu> | 2018-12-03 10:40:59 +0100 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2019-01-02 07:15:40 +0000 |
commit | 2de92a4fe12eecc081a09a009badc32083587ad2 (patch) | |
tree | 7c2552813787fa3ab4df2c10fad6a486fd099de4 | |
parent | 540ca045f883d9961a982573a6c30cb7256b7d2c (diff) | |
download | qtwebengine-2de92a4fe12eecc081a09a009badc32083587ad2.tar.gz |
Fix uniquifying download filename
The QFileInfo::baseName() can’t be used to split the filename
when it contains a dot what is not for extension.
Moreover, use timestamps after 100 numerically deduplicated
filenames as chrome do:
https://chromium-review.googlesource.com/c/1278137
Task-number: QTBUG-66262
Change-Id: Ice548ba2824bd43cf7ad00509b598853087274af
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r-- | src/core/download_manager_delegate_qt.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index 9fe233577..abf4a2a95 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -39,6 +39,8 @@ #include "download_manager_delegate_qt.h" +#include "base/files/file_util.h" +#include "base/time/time_to_iso8601.h" #include "content/public/browser/download_item_utils.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/save_page_type.h" @@ -156,15 +158,13 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* QFileInfo suggestedFile(defaultDownloadDirectory.absoluteFilePath(suggestedFilename)); QString suggestedFilePath = suggestedFile.absoluteFilePath(); - QString tmpFileBase = QString("%1%2%3").arg(suggestedFile.absolutePath()).arg(QDir::separator()).arg(suggestedFile.baseName()); + base::FilePath tmpFilePath(toFilePathString(suggestedFilePath)); - for (int i = 1; QFileInfo::exists(suggestedFilePath); ++i) { - suggestedFilePath = QString("%1(%2).%3").arg(tmpFileBase).arg(i).arg(suggestedFile.completeSuffix()); - if (i >= 99) { - suggestedFilePath = suggestedFile.absoluteFilePath(); - break; - } - } + int uniquifier = base::GetUniquePathNumber(tmpFilePath, base::FilePath::StringType()); + if (uniquifier > 0) + suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(base::StringPrintf(" (%d)", uniquifier)).AsUTF8Unsafe()); + else if (uniquifier == -1) + suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(base::StringPrintf(" - %s", base::TimeToISO8601(item->GetStartTime()).c_str())).AsUTF8Unsafe()); item->AddObserver(this); QList<ProfileAdapterClient*> clients = m_profileAdapter->clients(); |