mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Replace custom moveToTrash solution with Qt QFile::moveToTrash
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
parent
a14f5bc90e
commit
d3eefee25a
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user