diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/download_manager_delegate_qt.cpp | 31 | ||||
-rw-r--r-- | src/core/download_manager_delegate_qt.h | 1 | ||||
-rw-r--r-- | src/core/profile_adapter.cpp | 30 | ||||
-rw-r--r-- | src/core/profile_adapter.h | 3 | ||||
-rw-r--r-- | src/core/profile_adapter_client.h | 2 |
5 files changed, 45 insertions, 22 deletions
diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index ba506601f..34e290317 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -168,22 +168,7 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* QDir defaultDownloadDirectory(m_profileAdapter->downloadPath()); - QFileInfo suggestedFile(defaultDownloadDirectory.absoluteFilePath(suggestedFilename)); - QString suggestedFilePath = suggestedFile.absoluteFilePath(); - base::FilePath tmpFilePath(toFilePath(suggestedFilePath).NormalizePathSeparatorsTo('/')); - - int uniquifier = base::GetUniquePathNumber(tmpFilePath, base::FilePath::StringType()); - if (uniquifier > 0) - suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(base::StringPrintf(" (%d)", uniquifier)).AsUTF8Unsafe()); - else if (uniquifier == -1) { - base::Time::Exploded exploded; - item->GetStartTime().LocalExplode(&exploded); - std::string suffix = base::StringPrintf( - " - %04d-%02d-%02dT%02d%02d%02d.%03d", exploded.year, exploded.month, - exploded.day_of_month, exploded.hour, exploded.minute, - exploded.second, exploded.millisecond); - suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(suffix).AsUTF8Unsafe()); - } + QString suggestedFilePath = m_profileAdapter->determineDownloadPath(defaultDownloadDirectory.absolutePath(), suggestedFilename, item->GetStartTime().ToTimeT()); item->AddObserver(this); QList<ProfileAdapterClient*> clients = m_profileAdapter->clients(); @@ -209,7 +194,8 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* downloadType, item->GetLastReason(), adapterClient, - suggestedFilename + suggestedFilename, + item->GetStartTime().ToTimeT() }; for (ProfileAdapterClient *client : qAsConst(clients)) { @@ -218,7 +204,7 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* break; } - suggestedFile.setFile(info.path); + QFileInfo suggestedFile(info.path); if (info.accepted && !suggestedFile.absoluteDir().mkpath(suggestedFile.absolutePath())) { qWarning("Creating download path failed, download cancelled: %s", suggestedFile.absolutePath().toUtf8().data()); @@ -279,7 +265,7 @@ void DownloadManagerDelegateQt::ChooseSavePath(content::WebContents *web_content acceptedByDefault = true; } if (QFileInfo(suggestedFilePath).isRelative()) { - const QDir downloadDir(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)); + const QDir downloadDir(m_profileAdapter->downloadPath()); suggestedFilePath = downloadDir.absoluteFilePath(suggestedFilePath); } @@ -311,8 +297,8 @@ void DownloadManagerDelegateQt::ChooseSavePath(content::WebContents *web_content ProfileAdapterClient::SavePage, ProfileAdapterClient::NoReason, adapterClient, - QFileInfo(suggestedFilePath).fileName() - + QFileInfo(suggestedFilePath).fileName(), + time_t(QDateTime::currentMSecsSinceEpoch()) }; for (ProfileAdapterClient *client : qAsConst(clients)) { @@ -379,7 +365,8 @@ void DownloadManagerDelegateQt::OnDownloadUpdated(download::DownloadItem *downlo 0 /* downloadType (unused) */, download->GetLastReason(), adapterClient, - toQt(download->GetSuggestedFilename()) + toQt(download->GetSuggestedFilename()), + download->GetStartTime().ToTimeT() }; for (ProfileAdapterClient *client : qAsConst(clients)) { diff --git a/src/core/download_manager_delegate_qt.h b/src/core/download_manager_delegate_qt.h index 382c57524..6acfa42ce 100644 --- a/src/core/download_manager_delegate_qt.h +++ b/src/core/download_manager_delegate_qt.h @@ -109,6 +109,7 @@ private: bool m_nextDownloadIsUserRequested; friend class DownloadManagerDelegateInstance; + friend class ProfileAdapter; DISALLOW_COPY_AND_ASSIGN(DownloadManagerDelegateQt); }; diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp index 8d32aad84..65d5c2da2 100644 --- a/src/core/profile_adapter.cpp +++ b/src/core/profile_adapter.cpp @@ -57,6 +57,8 @@ #include "web_engine_context.h" #include "web_contents_adapter_client.h" +#include "base/files/file_util.h" +#include "base/time/time_to_iso8601.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -691,6 +693,34 @@ bool ProfileAdapter::isUsedForGlobalCertificateVerification() const return m_usedForGlobalCertificateVerification; } +QString ProfileAdapter::determineDownloadPath(const QString &downloadDirectory, const QString &suggestedFilename, const time_t &startTime) +{ + QFileInfo suggestedFile(QDir(downloadDirectory).absoluteFilePath(suggestedFilename)); + QString suggestedFilePath = suggestedFile.absoluteFilePath(); + base::FilePath tmpFilePath(toFilePath(suggestedFilePath).NormalizePathSeparatorsTo('/')); + + int uniquifier = base::GetUniquePathNumber(tmpFilePath, base::FilePath::StringType()); + if (uniquifier > 0) + suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(base::StringPrintf(" (%d)", uniquifier)).AsUTF8Unsafe()); + else if (uniquifier == -1) { + base::Time::Exploded exploded; + base::Time::FromTimeT(startTime).LocalExplode(&exploded); + std::string suffix = base::StringPrintf( + " - %04d-%02d-%02dT%02d%02d%02d.%03d", exploded.year, exploded.month, + exploded.day_of_month, exploded.hour, exploded.minute, + exploded.second, exploded.millisecond); + suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(suffix).AsUTF8Unsafe()); + } + return suggestedFilePath; +} + +QString ProfileAdapter::updateDownloadPath(int downloadId, const QString &directory, const QString &fileName) +{ + download::DownloadItem *download = m_downloadManagerDelegate->findDownloadById(downloadId); + Q_ASSERT(download); + return determineDownloadPath(directory, fileName, download->GetStartTime().ToTimeT()); +} + #if QT_CONFIG(ssl) QWebEngineClientCertificateStore *ProfileAdapter::clientCertificateStore() { diff --git a/src/core/profile_adapter.h b/src/core/profile_adapter.h index 1f94f59a9..8df85a68f 100644 --- a/src/core/profile_adapter.h +++ b/src/core/profile_adapter.h @@ -214,6 +214,9 @@ public: QHash<QByteArray, QSharedPointer<UserNotificationController>> &persistentNotifications() { return m_persistentNotifications; } + QString determineDownloadPath(const QString &downloadDirectory, const QString &suggestedFilename, const time_t &startTime); + QString updateDownloadPath(int downloadId, const QString &directory, const QString &filename); + private: void updateCustomUrlSchemeHandlers(); void resetVisitedLinksManager(); diff --git a/src/core/profile_adapter_client.h b/src/core/profile_adapter_client.h index 3589f6cd7..dc0f508a1 100644 --- a/src/core/profile_adapter_client.h +++ b/src/core/profile_adapter_client.h @@ -55,6 +55,7 @@ #include <QSharedPointer> #include <QString> #include <QUrl> +#include <time.h> namespace QtWebEngineCore { @@ -139,6 +140,7 @@ public: int downloadInterruptReason; WebContentsAdapterClient *page; QString suggestedFileName; + time_t startTime; }; virtual ~ProfileAdapterClient() { } |