diff --git a/include/dfm-io/dfm-io/dfmio_utils.h b/include/dfm-io/dfm-io/dfmio_utils.h index 222bf05..716b77f 100644 --- a/include/dfm-io/dfm-io/dfmio_utils.h +++ b/include/dfm-io/dfm-io/dfmio_utils.h @@ -57,6 +57,7 @@ class DFMUtils static DEnumeratorFuture *asyncTrashCount(); static int syncTrashCount(); static qint64 deviceBytesFree(const QUrl &url); + static bool supportTrash(const QUrl &url); private: static QMap diff --git a/src/dfm-io/dfm-io/dfmio_utils.cpp b/src/dfm-io/dfm-io/dfmio_utils.cpp index b94df81..d5fd909 100644 --- a/src/dfm-io/dfm-io/dfmio_utils.cpp +++ b/src/dfm-io/dfm-io/dfmio_utils.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -306,6 +307,33 @@ qint64 DFMUtils::deviceBytesFree(const QUrl &url) } } +bool dfmio::DFMUtils::supportTrash(const QUrl &url) +{ + if (!url.isValid()) + return false; + + auto path = url.path(); + GStatBuf file_stat, home_stat; + if (g_stat (path.toStdString().data(), &file_stat) != 0) + return false; + + const char *homedir = g_get_home_dir (); + g_stat (homedir, &home_stat); + // 和当前用的主目录在同一挂载点 + if (file_stat.st_dev == home_stat.st_dev) + return true; + + g_autoptr(GFile) gfile = g_file_new_for_uri(url.toString().toLocal8Bit().data()); + g_autofree char *path1 = g_file_get_path(gfile); + if (!path1) + return false; + g_autoptr(GUnixMountEntry) mount = g_unix_mount_for(path1, nullptr); + if (mount == nullptr || g_unix_mount_is_system_internal (mount)) + return false; + + return true; +} + QMap DFMUtils::fstabBindInfo() { static QMutex mutex;