Replace custom moveToTrash solution with Qt QFile::moveToTrash

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2023-05-16 13:28:48 +08:00
parent a14f5bc90e
commit d3eefee25a
No known key found for this signature in database
GPG Key ID: C839200C384636B0

View File

@ -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)