diff --git a/kerfuffle/cliinterface.cpp b/kerfuffle/cliinterface.cpp --- a/kerfuffle/cliinterface.cpp +++ b/kerfuffle/cliinterface.cpp @@ -39,7 +39,6 @@ #endif #include - #include #include #include @@ -471,8 +470,11 @@ qCWarning(ARK) << "File" << absDestEntry.absoluteFilePath() << "exists."; if (!skipAll && !overwriteAll) { - - Kerfuffle::OverwriteQuery query(absDestEntry.absoluteFilePath()); + Kerfuffle::OverwriteQuery query(absDestEntry.absoluteFilePath(), + file->property("timestamp").toDateTime(), + file->property("timestamp").toDateTime(), + file->property("size").toLongLong() + ); query.setNoRenameMode(true); query.execute(); @@ -587,13 +589,17 @@ } else { relEntry = QFileInfo(dirIt.fileName()); } + QFileInfo srcFile(dirIt.filePath()); QFileInfo absDestEntry(destDir.path() + QLatin1Char('/') + relEntry.filePath()); if (absDestEntry.exists()) { qCWarning(ARK) << "File" << absDestEntry.absoluteFilePath() << "exists."; - - Kerfuffle::OverwriteQuery query(absDestEntry.absoluteFilePath()); + Kerfuffle::OverwriteQuery query(absDestEntry.absoluteFilePath(), + srcFile.birthTime(), + srcFile.lastModified(), + srcFile.size() + ); query.setNoRenameMode(true); query.execute(); @@ -968,12 +974,15 @@ } } } - if (!isFileExistsMsg(line)) { return false; } - - Kerfuffle::OverwriteQuery query(QDir::current().path() + QLatin1Char( '/' ) + m_storedFileName); + QFileInfo destFile = QFileInfo(QDir::current().path() + QLatin1Char( '/' ) + m_storedFileName); + Kerfuffle::OverwriteQuery query(destFile.filePath(), + destFile.birthTime(), + destFile.lastModified(), + destFile.size() + ); query.setNoRenameMode(true); query.execute(); diff --git a/kerfuffle/queries.h b/kerfuffle/queries.h --- a/kerfuffle/queries.h +++ b/kerfuffle/queries.h @@ -36,6 +36,7 @@ #include #include #include +#include namespace Kerfuffle { @@ -81,7 +82,7 @@ class KERFUFFLE_EXPORT OverwriteQuery : public Query { public: - explicit OverwriteQuery(const QString& filename); + explicit OverwriteQuery(const QString& filename, QDateTime dateSrc, QDateTime mdateSrc, qulonglong sizeSrc ); void execute() override; bool responseCancelled(); bool responseOverwriteAll(); @@ -95,9 +96,13 @@ bool noRenameMode(); void setMultiMode(bool enableMultiMode); bool multiMode(); + private: bool m_noRenameMode; bool m_multiMode; + QDateTime m_dateSrc; + QDateTime m_mdateSrc; + qulonglong m_sizeSrc; }; /* ************************************** diff --git a/kerfuffle/queries.cpp b/kerfuffle/queries.cpp --- a/kerfuffle/queries.cpp +++ b/kerfuffle/queries.cpp @@ -66,9 +66,12 @@ m_responseCondition.wakeAll(); } -OverwriteQuery::OverwriteQuery(const QString &filename) : - m_noRenameMode(false), - m_multiMode(true) +OverwriteQuery::OverwriteQuery(const QString &filename, QDateTime dateSrc, QDateTime mdateSrc, KIO::filesize_t sizeSrc) : + m_noRenameMode(false), + m_multiMode(true), + m_dateSrc(dateSrc), + m_mdateSrc(mdateSrc), + m_sizeSrc(sizeSrc) { m_data[QStringLiteral("filename")] = filename; } @@ -87,17 +90,23 @@ options = options | KIO::RenameDialog_MultipleItems; } - QUrl sourceUrl = QUrl::fromLocalFile(QDir::cleanPath(m_data.value(QStringLiteral("filename")).toString())); QUrl destUrl = QUrl::fromLocalFile(QDir::cleanPath(m_data.value(QStringLiteral("filename")).toString())); - + QUrl sourceUrl = QUrl(m_data.value(QStringLiteral("filename")).toString()); QPointer dialog = new KIO::RenameDialog( nullptr, i18nc("@title:window", "File Already Exists"), sourceUrl, destUrl, - options); - dialog.data()->exec(); + options, + KIO::filesize_t(m_sizeSrc), + KIO::filesize_t(-1), + m_dateSrc, + QDateTime(), + m_mdateSrc, + QDateTime() + ); + dialog.data()->exec(); m_data[QStringLiteral("newFilename")] = dialog.data()->newDestUrl().toDisplayString(QUrl::PreferLocalFile); setResponse(dialog.data()->result()); diff --git a/plugins/libarchive/libarchiveplugin.cpp b/plugins/libarchive/libarchiveplugin.cpp --- a/plugins/libarchive/libarchiveplugin.cpp +++ b/plugins/libarchive/libarchiveplugin.cpp @@ -303,7 +303,11 @@ archive_entry_clear(entry); continue; } else if (!overwriteAll && !skipAll) { - Kerfuffle::OverwriteQuery query(entryName); + Kerfuffle::OverwriteQuery query(entryName, + QDateTime::fromSecsSinceEpoch(archive_entry_ctime(entry)), + QDateTime::fromSecsSinceEpoch(archive_entry_mtime(entry)), + archive_entry_size(entry) + ); emit userQuery(&query); query.waitForResponse(); diff --git a/plugins/libsinglefileplugin/singlefileplugin.cpp b/plugins/libsinglefileplugin/singlefileplugin.cpp --- a/plugins/libsinglefileplugin/singlefileplugin.cpp +++ b/plugins/libsinglefileplugin/singlefileplugin.cpp @@ -118,8 +118,12 @@ QString newFileName(filename); while (QFile::exists(newFileName)) { - Kerfuffle::OverwriteQuery query(newFileName); - + QFileInfo newFileInfo = QFileInfo(newFileName); + Kerfuffle::OverwriteQuery query(newFileInfo.absoluteFilePath(), + newFileInfo.birthTime(), + newFileInfo.lastModified(), + newFileInfo.size() + ); query.setMultiMode(false); emit userQuery(&query); query.waitForResponse(); diff --git a/plugins/libzipplugin/libzipplugin.cpp b/plugins/libzipplugin/libzipplugin.cpp --- a/plugins/libzipplugin/libzipplugin.cpp +++ b/plugins/libzipplugin/libzipplugin.cpp @@ -647,7 +647,11 @@ if (m_skipAll) { return true; } else { - Kerfuffle::OverwriteQuery query(renamedEntry); + Kerfuffle::OverwriteQuery query(renamedEntry, + QDateTime::fromSecsSinceEpoch(statBuffer.mtime), + QDateTime::fromSecsSinceEpoch(statBuffer.mtime), + statBuffer.size + ); emit userQuery(&query); query.waitForResponse();