fetchControlUrls function

Future<List<String?>> fetchControlUrls(
  1. String descriptionUrl
)

Implementation

Future<List<String?>> fetchControlUrls(String descriptionUrl) async {
  final output = <String?>[null, null];
  try {
    final client = HttpClient();
    final request = await client.getUrl(Uri.parse(descriptionUrl));
    final response = await request.close();
    if (response.statusCode != 200) return [];
    final body = await response.transform(utf8.decoder).join();
    final document = XmlDocument.parse(body);

    final services = document.findAllElements('service');
    for (final service in services) {
      final serviceType = service.getElement('serviceType')?.value ?? '';
      final controlUrl = service.getElement('controlURL')?.value;
      if (controlUrl != null && controlUrl.isNotEmpty) {
        final uri = Uri.parse(descriptionUrl);
        if (serviceType.contains('AVTransport')) {
          output[0] = uri.resolve(controlUrl).toString();
        }
        if (serviceType.contains('RenderingControl')) {
          output[1] = uri.resolve(controlUrl).toString();
        }
      }
    }
  } catch (e) {
    print('[DLNA] fetchControlUrls error: $e');
  }
  return output;
}