invoke method
Implementation
Future<Map<String, String>> invoke(Map<String, dynamic> args) async {
final param =
' <u:$name xmlns:u="${service.type}">${args.keys.map((argumentName) {
String argument = args[argumentName].toString();
argument = argument.replaceAll('&', '&');
argument = argument.replaceAll('<', '<');
argument = argument.replaceAll('>', '>');
argument = argument.replaceAll('\'', ''');
argument = argument.replaceAll('"', '&qout;');
return '<$argumentName>$argument</$argumentName>';
}).join('\n')}</u:$name>\n';
final result = await service.sendToControlUrl(name, param);
final doc = XmlDocument.parse(result);
XmlElement response = doc.rootElement;
if (response.name.local != 'Body') {
response =
response.children.firstWhere((x) => x is XmlElement) as XmlElement;
}
if (const bool.fromEnvironment('upnp.action.show_response',
defaultValue: false)) {
print('Got Action Response: ${response.toXmlString()}');
}
if (!response.name.local.contains('Response') &&
response.children.length > 1) {
response = response.children[1] as XmlElement;
}
if (response.children.length == 1) {
final d = response.children[0];
if (d is XmlElement) {
if (d.name.local.contains('Response')) {
response = d;
}
}
}
if (const bool.fromEnvironment('upnp.action.show_response',
defaultValue: false)) {
print('Got Action Response (Real): ${response.toXmlString()}');
}
final List<XmlElement> results =
response.children.whereType<XmlElement>().toList();
final map = <String, String>{};
for (XmlElement r in results) {
map[r.name.local] = r.innerText;
}
return map;
}