QML-тип DBusInterface

Предоставляет доступ к службе на шине D-Bus Подробнее...

Строка импорта: import Nemo.DBus 2.0

Свойства

Сигналы

Методы

  • void call(string method, variant arguments, variant callback, variant errorCallback)
  • void setProperty(string name, variant value)
  • bool typedCall(string method, variant arguments, variant callback, variant errorCallback)

Подробное описание

Объект типа DBusInterface используется для вызова методов объектов системной и сессионной шин, а также для получения сигналов (см. подробнее свойство signalsEnabled) и чтения свойств этих объектов.

Тип DBusInterface является удобным способом получения доступа к объектам через D-Bus. Значения свойств и аргументы методов автоматически конвертируются между QML/JS и D-Bus. Управление данным процессом ограничено. Для более сложных сценариев рекомендуется использовать C++ и модуль Qt DBus.

Обработка сигналов D-Bus

При значении свойства signalsEnabled, равным true, сигналы целевого объекта будут подключены к одноименным методам объекта.

Допустим, что имеется объект D-Bus, в котором заданы служба org.example.service, путь /org/example/service и интерфейс org.example.intf, а также два сигнала UpdateAll и UpdateOne. Организовать обработку этих сигналов можно следующим образом:

 DBusInterface {
     service: 'org.example.service'
     path: '/org/example/service'
     iface: 'org.example.intf'

     signalsEnabled: true

     function updateAll() {
         // Метод будет вызван при получении сигнала "UpdateAll"
     }

     function updateOne(a, b) {
         // Метод будет вызван при получении сигнала "UpdateOne"
     }
 }

Примечание: В D-Bus имена сигналов обычно начинаются с заглавной буквы, но в QML имена методов объектов должны начинаться со строчной буквы. Плагин выполняет соединение таких сигналов и методов (например, в D-Bus сигнал UpdateOne будет обрабатываться QML/JavaScript-методом updateOne).

Вызов методов D-Bus

Дистанционные методы D-Bus могут вызываться посредством методов call() или typedCall(). Метод call() предоставляет более простой API, который поддерживает только простые типы данных и при этом не учитывает возвращаемое значение вызванного метода. Метод typedCall() поддерживает большее количество типов данных, а также функции обратного вызова (callbacks) в случае успеха и неудачи вызванного метода.

Допустим, что имеется объект D-Bus, в котором заданы служба org.example.service, путь /org/example/service и интерфейс org.example.intf, а также имеются два метода:

  • RegisterObject с одним параметром object path и возвращаемым значением типа bool;
  • Update без параметров.

Организовать вызов этих методов можно следующим образом:

 DBusInterface {
     service: 'org.example.service'
     path: '/org/example/service'
     iface: 'org.example.intf'

     // Локальная функция для вызова дистанционного метода RegisterObject
     function registerObject(object) {
         typedCall('RegisterObject',
                   { 'type': 'o', 'value': '/example/object/path' },
                   function(result) { console.log('вызов успешно завершен с результатом:', result) },
                   function(error, message) { console.log('при вызове произошла ошибка', error, 'сообщение:', message) })
     }

     // Локальная функция для вызова дистанционного метода Update
     function update() {
         call('Update', undefined)
     }
 }

Описание свойств

bus : enum

Определяет разновидность используемой шины D-Bus. Свойство может принимать одно из следующих значений:

  • DBus.SessionBus — сессионная шина D-Bus;
  • DBus.SystemBus — системная шина D-Bus.

iface : string

Содержит интерфейс.

path : string

Содержит путь, по которому можно получить доступ к объекту.

service : string

Содержит имя службы для подключения.

signalsEnabled : bool

Определяет, будет ли данный объект прослушивать сигналы, испускаемые дистанционным объектом D-Bus. Подробнее см. раздел Обработка сигналов D-Bus.

Описание сигналов

propertiesChanged()

Испускается при изменении свойств объекта D-Bus (только при условии, что сам объект D-Bus испускает сигналы при изменении значений своих свойств). В настоящий момент сигнал не уточняет, какие именно свойства изменились и каковы их новые значения.

Данный QML-сигнал был представлен в версии 2.0.8.

Описание методов

void call(string method, variant arguments, variant callback, variant errorCallback)

Вызывает метод D-Bus с именем method применительно к объекту с аргументами arguments, заданными либо как отдельное значение, либо как массив. Для метода без аргументов в качестве значения этого параметра передается константа undefined.

После возврата значения вызванного метода это значение можно передать в качестве единственного параметра функции обратного вызова с именем callback. Аргумент callback является необязательным. При значении undefined (по умолчанию) возвращаемое значение не будет учитываться. Если вызываемый метод завершился неудачей, будет вызвана функция обратного вызова с именем errorCallback при условии, что значением этого параметра не является константа undefined (по умолчанию).

Примечание: данный метод поддерживает простые типы данных; если сигнатура дистанционного метода не соответствует сигнатуре, указанной в параметре arguments, вызов метода завершится неудачей. Используя метод typedCall() можно явным образом указать тип каждого элемента в параметре arguments.

void setProperty(string name, variant value)

Устанавливает свойству D-Bus с именем name значение value.

Данный QML-метод был представлен в версии 2.0.0.

bool typedCall(string method, variant arguments, variant callback, variant errorCallback)

Вызывает метод D-Bus с именем method применительно к объекту с аргументами arguments. Каждый параметр описывается в виде объекта:

 {
     'type': 'o'
     'value': '/org/example'
 }

Здесь type — это объект типа D-Bus, значение value которого должно маршаллироваться. Значением параметра arguments может быть как одиночный объект, описывающий параметр, так и массив объектов.

После возврата значения вызванного метода это значение можно передать в качестве единственного параметра функции обратного вызова с именем callback. Аргумент callback является необязательным. При значении undefined (по умолчанию) возвращаемое значение не будет учитываться. Если вызываемый метод завершился неудачей, будет вызвана функция обратного вызова с именем errorCallback при условии, что значением этого параметра не является константа undefined (по умолчанию).