scanForAomucDevices method

Future<List<NASDeviceInfo>> scanForAomucDevices({
  1. int timeout = 20,
  2. int retryCount = 2,
})

Implementation

Future<List<NASDeviceInfo>> scanForAomucDevices({
  int timeout = 20,
  int retryCount = 2,
}) async {
  final List<NASDeviceInfo> foundDevices = [];
  final Completer<List<NASDeviceInfo>> completer = Completer();

  int attempts = 0;

  while (attempts < retryCount && foundDevices.isEmpty) {
    attempts++;
    print('开始第 $attempts 次扫描尝试...');

    try {
      await start(
        (devices) {
          foundDevices.clear();
          foundDevices.addAll(devices);

          // 过滤出_amc-connect相关的设备
          final aomucDevices = devices.where((device) =>
            device.serviceType.contains('_amc-connect') ||
            device.serviceName.toLowerCase().contains('aomuc')
          ).toList();

          if (aomucDevices.isNotEmpty && !completer.isCompleted) {
            completer.complete(aomucDevices);
          }
        },
        timeout: timeout,
      );

      if (!completer.isCompleted) {
        await Future.delayed(Duration(seconds: 1));
      }
    } catch (e) {
      print('第 $attempts 次扫描失败: $e');
    }
  }

  if (!completer.isCompleted) {
    completer.complete(foundDevices);
  }

  return completer.future;
}