Skip to content

Commit

Permalink
Replace custom moveToTrash solution with Qt QFile::moveToTrash
Browse files Browse the repository at this point in the history
Signed-off-by: Claudio Cambra <[email protected]>
  • Loading branch information
claucambra committed May 16, 2023
1 parent 0d6d570 commit 3c2f28a
Showing 1 changed file with 5 additions and 68 deletions.
73 changes: 5 additions & 68 deletions src/common/filesystembase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 3c2f28a

Please sign in to comment.