code: async def add(self, device, recursive=None):
          
          device, created = await self._find_device_losetup(device)
          if created and recursive is False:
              return device
          if device.is_filesystem:
              success = await self.mount(device)
          elif device.is_crypto:
              success = await self.unlock(device)
              if success and recursive:
                  await self.udisks._sync()
                  device = self.udisks[device.object_path]
                  success = await self.add(
                      device.luks_cleartext_holder,
                      recursive=True)
          elif (recursive
                and device.is_partition_table
                and self.is_handleable(device)):
              tasks = [
                  self.add(dev, recursive=True)
                  for dev in self.get_all_handleable()
                  if dev.is_partition and dev.partition_slave == device
              ]
              results = await gather(*tasks)
              success = all(results)
          else:
              self._log.info(_('not adding {0}: unhandled device', device))
              return False
          return success
docs: Mount or unlock the device depending on its type.
  
          :param device: device object, block device path or mount path
          :param bool recursive: recursively mount and unlock child devices
          :returns: whether all attempted operations succeeded