public CMidiXMLSchema() { MidiActions = new List <SMidiOBSAction>(); MidiMapData = new SMidiXMLData(); MidiMapInfo = new SMidiXMLInfo(); Loaded = false; ParsedRules = 0; }
public SMidiXMLInfo?LoadHeaders(string filename, string preferred_lang = null) { XDocument schemaXML; var filepath = System.IO.Path.Combine(Program.GetMapsDir(), filename); if (File.Exists(filepath)) { schemaXML = XDocument.Load(filepath); SMidiXMLInfo info = new SMidiXMLInfo(); if (schemaXML != null) { if (_parseHeaders(schemaXML, ref info, preferred_lang)) { info.Filename = filename; info.FileMTime = File.GetLastWriteTime(filepath); return(info); } } } return(null); }
public bool LoadSchema(string filename, string preferred_lang = null) { MidiActions = new List <SMidiOBSAction>(); var mapInfo = new SMidiXMLInfo(); var mapData = new SMidiXMLData(); midimapFile = filename; XDocument schemaXML; Loaded = false; ParsedRules = 0; try { schemaXML = XDocument.Load(System.IO.Path.Combine(Program.GetMapsDir(), filename)); mapInfo.Filename = filename; if (!_parseHeaders(schemaXML, ref mapInfo, preferred_lang)) { return(false); } MidiMapInfo = mapInfo; var maproot = schemaXML.XPathSelectElement("OBSDeviceMap/Map"); if (maproot != null) { if (maproot.Attribute("max-packet") != null) { mapData.PacketCount = (int)maproot.Attribute("max-packet"); } if (maproot.Attribute("packet-interval") != null) { var iv = (int)maproot.Attribute("packet-interval"); if (iv > 0) { mapData.PacketInterval = iv; } else { mapData.PacketInterval = 0; } } if (maproot.Attribute("baudrate") != null) { mapData.BaudRate = (int)maproot.Attribute("baudrate"); } MidiMapData = mapData; //check modifiers var mapmods = maproot.XPathSelectElement("Modifiers"); if (mapmods != null) { int _mi = 1; foreach (XElement item in mapmods.Descendants("Modifier")) { SMidiOBSAction action = new SMidiOBSAction(); action.Modifier = _mi; if (item.Attribute("index") != null) { action.Modifier = (int)item.Attribute("index"); if (action.Modifier < 1 || action.Modifier > 20) { action.Modifier = _mi; } } action.Index = _mi - 1; action.Type = EMidiOBSItemType.Modifier; if (item.Attribute("obsmode") != null) { action.ObsMode = (int)item.Attribute("obsmode"); } action.InActions = new List <SMidiInput>(); action.OutActions = new List <SMidiOutput>(); _parseXMLInAndOutput(ref action, item, 0); MidiActions.Add(action); _mi++; } } var items = maproot.XPathSelectElement("Items"); if (items != null) { foreach (XElement item in items.Descendants("Item")) { _parseItemfromXElement(item); } ParsedRules = MidiActions.Count(); Loaded = true; return(true); } } } catch (System.Xml.XmlException e) { Console.WriteLine(e.Message); } return(false); }
private bool _parseHeaders(XDocument doc, ref SMidiXMLInfo mapInfo, string preferred_lang = null) { var info = doc.XPathSelectElement("OBSDeviceMap/MapInfo"); if (info != null) { foreach (XElement item in info.Nodes()) { switch (item.Name.LocalName) { case "Name": mapInfo.Name = item.FirstNode != null?item.FirstNode.ToString() : null; break; case "DeviceName": mapInfo.DeviceName = item.FirstNode != null?item.FirstNode.ToString() : null; break; case "Author": mapInfo.Author = item.FirstNode != null?item.FirstNode.ToString() : null; break; case "Version": if (item.FirstNode != null) { mapInfo.Version = Version.Parse(item.FirstNode.ToString()); } break; case "Website": mapInfo.Website = item.FirstNode != null?item.FirstNode.ToString() : null; break; } } if (mapInfo.Name == null || String.IsNullOrEmpty(mapInfo.Name)) { return(false); } if (info.Descendants("Description").Count() > 0) { var desc = new List <SMidiXMLInfoDescription>(); foreach (XElement item in info.Descendants("Description")) { var descitem = new SMidiXMLInfoDescription(); descitem.Lang = (string)item.Attribute("lang"); if (item.FirstNode.NodeType == XmlNodeType.CDATA) { XCData xcdata = (XCData)item.FirstNode; descitem.Text = xcdata.Value; } else if (item.FirstNode.NodeType == XmlNodeType.Text) { descitem.Text = item.Value; } desc.Add(descitem); } mapInfo.Description = desc; } if (preferred_lang == null) { preferred_lang = Program.lang; } return(true); } return(false); }
public void SetMidiInfo(SMidiXMLInfo info) { MidiMapInfo = info; }