From 3c2f28ab5156f7bbb77630a003d216f39f471a78 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Tue, 16 May 2023 13:28:48 +0800 Subject: [PATCH] Replace custom moveToTrash solution with Qt QFile::moveToTrash Signed-off-by: Claudio Cambra --- src/common/filesystembase.cpp | 73 +++-------------------------------- 1 file changed, 5 insertions(+), 68 deletions(-) diff --git a/src/common/filesystembase.cpp b/src/common/filesystembase.cpp index dc313e59ac659..90c87716bcf3e 100644 --- a/src/common/filesystembase.cpp +++ b/src/common/filesystembase.cpp @@ -367,77 +367,14 @@ bool FileSystem::remove(const QString &fileName, QString *errorString) bool FileSystem::moveToTrash(const QString &fileName, QString *errorString) { - // TODO: Qt 5.15 bool QFile::moveToTrash() -#if defined Q_OS_UNIX && !defined Q_OS_MAC - QString trashPath, trashFilePath, trashInfoPath; - QString xdgDataHome = QFile::decodeName(qgetenv("XDG_DATA_HOME")); - if (xdgDataHome.isEmpty()) { - trashPath = QDir::homePath() + QStringLiteral("/.local/share/Trash/"); // trash path that should exist - } else { - trashPath = xdgDataHome + QStringLiteral("/Trash/"); - } - - trashFilePath = trashPath + QStringLiteral("files/"); // trash file path contain delete files - trashInfoPath = trashPath + QStringLiteral("info/"); // trash info path contain delete files information - - if (!(QDir().mkpath(trashFilePath) && QDir().mkpath(trashInfoPath))) { - *errorString = QCoreApplication::translate("FileSystem", "Could not make directories in trash"); - return false; //mkpath will return true if path exists - } - - QFileInfo f(fileName); - - QDir file; - int suffix_number = 1; - if (file.exists(trashFilePath + f.fileName())) { //file in trash already exists, move to "filename.1" - QString path = trashFilePath + f.fileName() + QLatin1Char('.'); - while (file.exists(path + QString::number(suffix_number))) { //or to "filename.2" if "filename.1" exists, etc - suffix_number++; - } - if (!file.rename(f.absoluteFilePath(), path + QString::number(suffix_number))) { // rename(file old path, file trash path) - *errorString = QCoreApplication::translate("FileSystem", R"(Could not move "%1" to "%2")") - .arg(f.absoluteFilePath(), path + QString::number(suffix_number)); - return false; - } - } else { - if (!file.rename(f.absoluteFilePath(), trashFilePath + f.fileName())) { // rename(file old path, file trash path) - *errorString = QCoreApplication::translate("FileSystem", R"(Could not move "%1" to "%2")") - .arg(f.absoluteFilePath(), trashFilePath + f.fileName()); - return false; + QFile f(fileName); + if (!f.moveToTrash()) { + if (errorString) { + *errorString = f.errorString(); } + return false; } - - // create file format for trash info file----- START - QFile infoFile; - if (file.exists(trashInfoPath + f.fileName() + QStringLiteral(".trashinfo"))) { //TrashInfo file already exists, create "filename.1.trashinfo" - QString filename = trashInfoPath + f.fileName() + QLatin1Char('.') + QString::number(suffix_number) + QStringLiteral(".trashinfo"); - infoFile.setFileName(filename); //filename+.trashinfo // create file information file in /.local/share/Trash/info/ folder - } else { - QString filename = trashInfoPath + f.fileName() + QStringLiteral(".trashinfo"); - infoFile.setFileName(filename); //filename+.trashinfo // create file information file in /.local/share/Trash/info/ folder - } - - infoFile.open(QIODevice::ReadWrite); - - QTextStream stream(&infoFile); // for write data on open file - - stream << "[Trash Info]\n" - << "Path=" - << QUrl::toPercentEncoding(f.absoluteFilePath(), "~_-./") - << "\n" - << "DeletionDate=" - << QDateTime::currentDateTime().toString(Qt::ISODate) - << '\n'; - infoFile.close(); - - // create info file format of trash file----- END - return true; -#else - Q_UNUSED(fileName) - *errorString = QCoreApplication::translate("FileSystem", "Moving to the trash is not implemented on this platform"); - return false; -#endif } bool FileSystem::isFileLocked(const QString &fileName)