diff --git a/toonz/sources/common/tsystem/tsystempd.cpp b/toonz/sources/common/tsystem/tsystempd.cpp index ef3f3bd..37e986c 100644 --- a/toonz/sources/common/tsystem/tsystempd.cpp +++ b/toonz/sources/common/tsystem/tsystempd.cpp @@ -59,7 +59,11 @@ #include #include #include - +#include +#include +#include +#include +#include #endif #if defined(MACOSX) @@ -452,7 +456,55 @@ void TSystem::moveFileToRecycleBin(const TFilePath &fp) { } catch (...) { } } +#elif defined(LINUX) + // + // From https://stackoverflow.com/questions/17964439/move-files-to-trash-recycle-bin-in-qt + // + QString fileToRecycle = fp.getQString(); + QFileInfo FileName(fileToRecycle); + + QDateTime currentTime(QDateTime::currentDateTime()); // get system time + + // check if the file is on the local drive + const QStorageInfo fileStorageInfo(fileToRecycle); + const QStorageInfo homeStorageInfo(QDir::homePath()); + const bool isOnHomeDrive = fileStorageInfo == homeStorageInfo; + + QString trashFilePath = QDir::homePath() + "/.local/share/Trash/files/"; // this folder contains deleted files + QString trashInfoPath = QDir::homePath() + "/.local/share/Trash/info/"; // this folder contains information about the deleted files + + // different paths are used for external drives + if (!isOnHomeDrive) { + //trashFilePath = fileStorageInfo.rootPath() + "/.Trash-1000/files/"; + //trashInfoPath = fileStorageInfo.rootPath() + "/.Trash-1000/info/"; + + // TODO: Implement this... The standard is /.Trash-/... + outputDebug("Deleting files on external drives in Linux is not implemented yet."); + return; + } + + // check paths exist + if( !QDir(trashFilePath).exists() || !QDir(trashInfoPath).exists() ) { + outputDebug("Could not find the right paths to send the file to the recycle bin."); + return; + } + + // create file for the "Trash/info" folder + QFile infoFile(trashInfoPath + FileName.completeBaseName() + "." + FileName.completeSuffix() + ".trashinfo"); // filename+extension+.trashinfo + + infoFile.open(QIODevice::ReadWrite); + + QTextStream stream(&infoFile); + + stream << "[Trash Info]" << endl; + stream << "Path=" + QString(QUrl::toPercentEncoding(FileName.absoluteFilePath(), "~_-./")) << endl; // convert path to percentage encoded string + stream << "DeletionDate=" + currentTime.toString("yyyy-MM-dd") + "T" + currentTime.toString("hh:mm:ss") << endl; // get date and time in format YYYY-MM-DDThh:mm:ss + + infoFile.close(); + // move the original file to the "Trash/files" folder + QDir file; + file.rename(FileName.absoluteFilePath(), trashFilePath+FileName.completeBaseName() + "." + FileName.completeSuffix()); // rename(original path, trash path) #else assert(!"Not implemented yet"); #endif