mirror of
https://github.com/iDescriptor/iDescriptor.git
synced 2026-06-21 19:35:49 +08:00
72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
/*
|
|
* iDescriptor: A free and open-source idevice management tool.
|
|
*
|
|
* Copyright (C) 2025 Uncore <https://github.com/uncor3>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published
|
|
* by the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "ifusemanager.h"
|
|
#include <QDebug>
|
|
#include <QProcess>
|
|
|
|
QStringList iFuseManager::getMountArg(std::string &udid, QString &path)
|
|
{
|
|
return QStringList() << "-u" << QString::fromStdString(udid) << path;
|
|
}
|
|
|
|
#ifdef __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;
|
|
} |