mirror of
https://github.com/iDescriptor/iDescriptor.git
synced 2026-06-22 03:45:51 +08:00
implement ifuse for Linux
- Updated CMakeLists.txt to include platform-specific source files for macOS. - Added new icon for disk unmount button. - Modified resources.qrc to include the new icon. - Implemented iFuse disk unmount button and manager classes for handling iFuse operations on Linux. - Created iFuseWidget for managing iPhone disk mounting, including UI and process handling. - Integrated iFuse functionality into the main application, allowing users to mount and unmount iPhone disks. - Enhanced DeviceInfoWidget and other UI components for better user experience. - Added support for displaying mounted iFuse paths in the status bar.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#include "ifusemanager.h"
|
||||
#include <QDebug>
|
||||
#include <QProcess>
|
||||
|
||||
QStringList iFuseManager::getMountArg(std::string &udid, QString &path)
|
||||
{
|
||||
return QStringList() << "-u" << QString::fromStdString(udid) << path;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
QList<QString> iFuseManager::getMountPoints()
|
||||
{
|
||||
QProcess mountProcess;
|
||||
mountProcess.start("mount", QStringList() << "-t"
|
||||
<< "fuse.ifuse");
|
||||
mountProcess.waitForFinished();
|
||||
|
||||
QString output = mountProcess.readAllStandardOutput();
|
||||
|
||||
if (output.trimmed().isEmpty()) {
|
||||
qDebug() << "[iFuseWidget] No existing ifuse mounts found.";
|
||||
return {};
|
||||
}
|
||||
|
||||
QStringList mountPoints;
|
||||
QStringList lines = output.split('\n', Qt::SkipEmptyParts);
|
||||
for (const QString &line : lines) {
|
||||
// A typical line is: "ifuse on /path/to/mount type fuse.ifuse (...)"
|
||||
QString mountPath = line.section(" on ", 1).section(" type ", 0, 0);
|
||||
if (!mountPath.isEmpty()) {
|
||||
qDebug() << "[iFuseWidget] - Mount point:" << mountPath;
|
||||
mountPoints.append(mountPath);
|
||||
}
|
||||
}
|
||||
return mountPoints;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool iFuseManager::linuxUnmount(const QString &path)
|
||||
{
|
||||
QProcess umountProcess;
|
||||
umountProcess.start("fusermount", QStringList() << "-u" << path);
|
||||
umountProcess.waitForFinished();
|
||||
|
||||
if (umountProcess.exitCode() != 0) {
|
||||
qWarning() << "[iFuseWidget] Failed to unmount" << path << ":"
|
||||
<< umountProcess.readAllStandardError().trimmed();
|
||||
return false;
|
||||
}
|
||||
|
||||
qDebug() << "[iFuseWidget] Successfully unmounted" << path;
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user