Action.fromXml constructor

Action.fromXml(
  1. XmlElement e
)

Implementation

Action.fromXml(XmlElement e) {
  name = XmlUtils.getTextSafe(e, 'name');

  void addArgDef(XmlElement argdef, [bool stripPrefix = false]) {
    var name = XmlUtils.getTextSafe(argdef, 'name');

    if (name == null) {
      return;
    }

    final direction = XmlUtils.getTextSafe(argdef, 'direction');
    final relatedStateVariable =
        XmlUtils.getTextSafe(argdef, 'relatedStateVariable');
    var isRetVal = direction == 'out';

    if (this.name!.startsWith('Get')) {
      final of = this.name!.substring(3);
      if (of == name) {
        isRetVal = true;
      }
    }

    if (name.startsWith('Get') && stripPrefix) {
      name = name.substring(3);
    }

    arguments.add(ActionArgument(
        this, name, direction, relatedStateVariable, isRetVal));
  }

  final argumentLists = e.findElements('argumentList');
  if (argumentLists.isNotEmpty) {
    final argList = argumentLists.first;
    if (argList.children
        .any((x) => x is XmlElement && x.name.local == 'name')) {
      // Bad UPnP Implementation fix for WeMo
      addArgDef(argList, true);
    } else {
      for (var argdef in argList.children.whereType<XmlElement>()) {
        addArgDef(argdef);
      }
    }
  }
}