void AddParentPathsToPath(MixerPath path, IEnumerable <XElement> pathElements) { var xElements = pathElements as XElement[] ?? pathElements.ToArray(); foreach (var pathElement in xElements) { var name = pathElement.Attribute("name")?.Value; if (string.IsNullOrWhiteSpace(name)) { _logger.LogWarning("parent path with no name in path {PathName}, skipping", path.Name); continue; } if (!MixerPaths.ContainsKey(name)) { _logger.LogWarning("Path {PathName} uses undefined path {ParentPathName}", path.Name, name); continue; } var value = pathElement.Attribute("value")?.Value; path.MixerPaths.Add(new MixerPath(name)); _logger.LogDebug("Path {PathName} uses path {ParentPathName}", path.Name, name); } }
void PopulateMixerPaths(IEnumerable <XElement> pathElements) { var xElements = pathElements as XElement[] ?? pathElements.ToArray(); for (var i = 0; i < xElements.Length; i++) { var pathElement = xElements[i]; var name = pathElement.Attribute("name")?.Value; if (string.IsNullOrWhiteSpace(name)) { _logger.LogWarning("ctl with no name at index {CtlIndex}, skipping", i); continue; } if (MixerPaths.ContainsKey(name)) { _logger.LogWarning("Duplicate path {PathName}, skipping", name); continue; } var path = new MixerPath(name); AddControlsToPath(path, pathElement.Elements("ctl")); AddParentPathsToPath(path, pathElement.Elements("path")); MixerPaths[name] = path; } }
void AddControlsToPath(MixerPath path, IEnumerable <XElement> ctlElements) { var xElements = ctlElements as XElement[] ?? ctlElements.ToArray(); for (var i = 0; i < xElements.Length; i++) { var ctlElement = xElements[i]; var name = ctlElement.Attribute("name")?.Value; if (string.IsNullOrWhiteSpace(name)) { _logger.LogWarning("ctl with no name in path {PathName} at index {CtlIndex}, skipping", path.Name, i); continue; } var id = ctlElement.Attribute("id")?.Value; var ctlKey = $"{name}:{id ?? ""}"; if (!MixerControls.TryGetValue(ctlKey, out var ctl)) { if (string.IsNullOrWhiteSpace(id)) { _logger.LogWarning("Path {PathName} uses undefined control {CtlName}", path.Name, name); } else { _logger.LogWarning("Path {PathName} uses undefined control {CtlName}, id {CtlId}", path.Name, name, id); } continue; } var value = ctlElement.Attribute("value")?.Value; path.MixerControls.Add(new MixerControl(name, id, value)); if (string.IsNullOrWhiteSpace(id)) { _logger.LogDebug("Path {PathName} uses control {CtlName}", path.Name, name); } else { _logger.LogDebug("Path {PathName} uses control {CtlName} id {CtlId}, value {CtlDefaultValue} => {CtlValue}", path.Name, name, id, ctl.Value, value); } } }