connect method

Future<void> connect()

Connects to the UDisks D-Bus objects. Must be called before accessing methods and properties.

Implementation

Future<void> connect() async {
  // Already connected
  if (_objectManagerSubscription != null) {
    return;
  }

  // Subscribe to changes
  _objectManagerSubscription = _root.signals.listen((signal) {
    if (signal is DBusObjectManagerInterfacesAddedSignal) {
      var object = _objects[signal.changedPath];
      if (object != null) {
        object.updateInterfaces(signal.interfacesAndProperties);
      } else {
        object = _UDisksObject(
            _bus, signal.changedPath, signal.interfacesAndProperties);
        _objects[signal.changedPath] = object;
        if (_isDrive(object)) {
          _driveAddedStreamController.add(UDisksDrive(object));
        } else if (_isBlockDevice(object)) {
          _blockDeviceAddedStreamController
              .add(UDisksBlockDevice(this, object));
        }
      }
    } else if (signal is DBusObjectManagerInterfacesRemovedSignal) {
      var object = _objects[signal.changedPath];
      if (object != null) {
        // If all the interface are removed, then this object has been removed.
        // Keep the previous values around for the client to use.
        if (object.wouldRemoveAllInterfaces(signal.interfaces)) {
          _objects.remove(signal.changedPath);
        } else {
          object.removeInterfaces(signal.interfaces);
        }

        if (signal.interfaces.contains('org.freedesktop.UDisks2.Drive')) {
          _driveRemovedStreamController.add(UDisksDrive(object));
        } else if (signal.interfaces
            .contains('org.freedesktop.UDisks2.Block')) {
          _blockDeviceRemovedStreamController
              .add(UDisksBlockDevice(this, object));
        }
      }
    } else if (signal is DBusPropertiesChangedSignal) {
      var object = _objects[signal.path];
      if (object != null) {
        object.updateProperties(
            signal.propertiesInterface, signal.changedProperties);
      }
    }
  });

  // Find all the objects exported.
  var objects = await _root.getManagedObjects();
  objects.forEach((objectPath, interfacesAndProperties) {
    _objects[objectPath] =
        _UDisksObject(_bus, objectPath, interfacesAndProperties);
  });

  var managerObject =
      _objects[DBusObjectPath('/org/freedesktop/UDisks2/Manager')];
  if (managerObject != null) {
    _manager = _UDisksManager(managerObject);
  }
}