From 4907c4b14b9152d27897998849c8121d04c440f5 Mon Sep 17 00:00:00 2001 From: Wolfgang Bauer Date: Thu, 11 May 2017 16:17:48 +0200 Subject: [PATCH] Avoid data loss when importing pictures Fix porting regressions, which left users of Gwenview Importer with: * failed import (import destination still empty) * additionally (when choosing "Delete" instead of "Keep" after import): pictures also removed from import source, with no way to recover Correct additional problems remaining after fixing the import failure: * hang on duplicate filenames * identically named files with different content are never imported * error dialog when deleting pictures from import source BUG: 379615 Differential Revision: https://phabricator.kde.org/D5749 --- importer/fileutils.cpp | 5 ++++- importer/importdialog.cpp | 2 +- importer/importer.cpp | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/importer/fileutils.cpp b/importer/fileutils.cpp index 5293d561..a51a18cf 100644 --- a/importer/fileutils.cpp +++ b/importer/fileutils.cpp @@ -128,7 +128,10 @@ RenameResult rename(const QUrl& src, const QUrl& dst_, QWidget* authWindow) } result = RenamedUnderNewName; - dst.setPath(dst.path() + '/' + prefix + QString::number(count) + suffix); + dst.setPath(dst.adjusted(QUrl::RemoveFilename).path() + prefix + QString::number(count) + suffix); + statJob = KIO::stat(dst); + KJobWidgets::setWindow(statJob, authWindow); + ++count; } diff --git a/importer/importdialog.cpp b/importer/importdialog.cpp index ee6f7cd6..5e9e847c 100644 --- a/importer/importdialog.cpp +++ b/importer/importdialog.cpp @@ -121,7 +121,7 @@ public: QList urls = importedUrls + skippedUrls; while (true) { KIO::Job* job = KIO::del(urls); - if (!job->exec()) { + if (job->exec()) { break; } // Deleting failed diff --git a/importer/importer.cpp b/importer/importer.cpp index 51c4b964..a7e1d4ea 100644 --- a/importer/importer.cpp +++ b/importer/importer.cpp @@ -98,7 +98,7 @@ struct ImporterPrivate } mCurrentUrl = mUrlList.takeFirst(); QUrl dst = mTempImportDirUrl; - dst.setPath(dst.path() + '/' + mCurrentUrl.fileName()); + dst.setPath(dst.path() + mCurrentUrl.fileName()); KIO::Job* job = KIO::copy(mCurrentUrl, dst, KIO::HideProgressInfo); KJobWidgets::setWindow(job, mAuthWindow); QObject::connect(job, SIGNAL(result(KJob*)), @@ -122,7 +122,7 @@ struct ImporterPrivate } else { fileName = src.fileName(); } - dst.setPath(dst.path() + '/' + fileName); + dst.setPath(dst.path() + fileName); FileUtils::RenameResult result = FileUtils::rename(src, dst, mAuthWindow); switch (result) { -- 2.12.0