QT DBUS смонтировать файловую систему

Я хотел бы смонтировать файловую систему, используя QT и DBUS. Я подписался на сигнал «DeviceAdded», используя этот небольшой фрагмент:

 void DBusWatcher::deviceAdded(const QDBusObjectPath &o) {
QDBusMessage call = QDBusMessage::createMethodCall("org.freedesktop.UDisks", o.path(), "org.freedesktop.DBus.Properties", "GetAll");

QList<QVariant> args;
args.append("org.freedesktop.UDisks.Device");
call.setArguments(args);

QDBusPendingReply<QVariantMap> reply = DBusConnection::systemBus().asyncCall(call);
reply.waitForFinished();

QVariantMap map = reply.value();

// ...
}

Это работает довольно хорошо. У меня вопрос, как мне смонтировать эту штуку? Все, что у меня есть, что-то вроде этого — и это не работает вообще — и без ошибок.

QDBusMessage call = QDBusMessage::createMethodCall("org.freedesktop.UDisks", "dont know what to put here!", "org.freedesktop.UDisks.Device", "FilesystemMount");

А теперь, какое действие я должен использовать для QDBusConnection :: systemBus (): call, asyncCall, callWithCallback? Что нужно поставить в качестве второго аргумента в createMethodCall? Ничего не работает! Действительно расстраивает!

3

Решение

Хорошо, после борьбы в течение по крайней мере 2 дней я наконец получил это! Я смотрел в razer-qt источники, я посмотрел в kdelibs источники, но как-то все их dbus вещи не работали. Вот фрагмент, которым я очень доволен:

void DBusWatcher::deviceAdded(const QDBusObjectPath &o) {
QDBusMessage call = QDBusMessage::createMethodCall("org.freedesktop.UDisks", o.path(), "org.freedesktop.DBus.Properties", "GetAll");

QList<QVariant> args;
args.append("org.freedesktop.UDisks.Device");
call.setArguments(args);

QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
reply.waitForFinished();

QVariantMap map = reply.value();
// now do what you want with the map ;)
// You will find all available information to the device attached
}

// a class wide pointer to the systembus
// initialized within the constructor of the class
// and deleted in the destructor
dbus = new QDBusInterface(
"org.freedesktop.UDisks",
"here comes the path from the QDBusObjectPath.path() object",
"org.freedesktop.UDisks.Device",
QDBusConnection::systemBus(),
this
);

void DbusAction::mountFilesystem() {
if(dbus->isValid()) {

QList<QVariant> args;
args << QVariant(QString()) << QVariant(QStringList());

QDBusMessage msg = dbus->callWithArgumentList(QDBus::AutoDetect, "FilesystemMount", args);
if(msg.type() == QDBusMessage::ReplyMessage) {
QString path = msg.arguments().at(0).toString();
if(!path.isEmpty()) {
emit deviceMounted(path);
} else {
qDebug() << "sorry, but the path returned is empty";
}
} else {
qDebug() << msg.errorMessage();
}
}
}

я использую Openbox и последний Udisk(2) вещи, работающие на x64-ArchLinux. Может быть, кто-то может использовать это тоже.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector