/**<summary>Saves the settings to the config file.</summary>*/ public static bool Save() { try { XmlElement element; XmlDocument doc = new XmlDocument(); doc.AppendChild(doc.CreateXmlDeclaration("1.0", "UTF-8", null)); XmlElement midiPlayer = doc.CreateElement("TerrariaMidiPlayer"); doc.AppendChild(midiPlayer); XmlElement version = doc.CreateElement("Version"); version.AppendChild(doc.CreateTextNode(ConfigVersion.ToString())); midiPlayer.AppendChild(version); #region Settings XmlElement setting = doc.CreateElement("Settings"); midiPlayer.AppendChild(setting); element = doc.CreateElement("ExecutableName"); element.AppendChild(doc.CreateTextNode(ExecutableNames)); setting.AppendChild(element); element = doc.CreateElement("UseTime"); element.AppendChild(doc.CreateTextNode(UseTime.ToString())); setting.AppendChild(element); element = doc.CreateElement("ClickTime"); element.AppendChild(doc.CreateTextNode(ClickTime.ToString())); setting.AppendChild(element); element = doc.CreateElement("ChecksEnabled"); element.AppendChild(doc.CreateTextNode(ChecksEnabled.ToString())); setting.AppendChild(element); element = doc.CreateElement("CheckFrequency"); element.AppendChild(doc.CreateTextNode(CheckFrequency.ToString())); setting.AppendChild(element); element = doc.CreateElement("Mount"); element.AppendChild(doc.CreateTextNode(Mount.Name)); setting.AppendChild(element); element = doc.CreateElement("ProjectileAngle"); element.AppendChild(doc.CreateTextNode(ProjectileAngle.ToString())); setting.AppendChild(element); element = doc.CreateElement("ProjectileRange"); element.AppendChild(doc.CreateTextNode(ProjectileRange.ToString())); setting.AppendChild(element); element = doc.CreateElement("CloseNoFocus"); element.AppendChild(doc.CreateTextNode(CloseNoFocus.ToString())); setting.AppendChild(element); element = doc.CreateElement("PlaybackNoFocus"); element.AppendChild(doc.CreateTextNode(PlaybackNoFocus.ToString())); setting.AppendChild(element); element = doc.CreateElement("DisableMountWhenTalking"); element.AppendChild(doc.CreateTextNode(DisableMountWhenTalking.ToString())); setting.AppendChild(element); element = doc.CreateElement("UseTrackNames"); element.AppendChild(doc.CreateTextNode(UseTrackNames.ToString())); setting.AppendChild(element); element = doc.CreateElement("WrapPianoMode"); element.AppendChild(doc.CreateTextNode(WrapPianoMode.ToString())); setting.AppendChild(element); element = doc.CreateElement("SkipPianoMode"); element.AppendChild(doc.CreateTextNode(SkipPianoMode.ToString())); setting.AppendChild(element); #endregion //-------------------------------- #region Keybinds XmlElement keybinds = doc.CreateElement("Keybinds"); setting.AppendChild(keybinds); element = doc.CreateElement("Play"); element.AppendChild(doc.CreateTextNode(Keybinds.Play.ToString())); keybinds.AppendChild(element); element = doc.CreateElement("Pause"); element.AppendChild(doc.CreateTextNode(Keybinds.Pause.ToString())); keybinds.AppendChild(element); element = doc.CreateElement("Stop"); element.AppendChild(doc.CreateTextNode(Keybinds.Stop.ToString())); keybinds.AppendChild(element); element = doc.CreateElement("Close"); element.AppendChild(doc.CreateTextNode(Keybinds.Close.ToString())); keybinds.AppendChild(element); element = doc.CreateElement("Mount"); element.AppendChild(doc.CreateTextNode(Keybinds.Mount.ToString())); keybinds.AppendChild(element); #endregion //-------------------------------- #region Syncing XmlElement syncing = doc.CreateElement("Syncing"); setting.AppendChild(syncing); element = doc.CreateElement("SyncType"); element.AppendChild(doc.CreateTextNode(Syncing.SyncType.ToString())); syncing.AppendChild(element); element = doc.CreateElement("ClientIPAddress"); element.AppendChild(doc.CreateTextNode(Syncing.ClientIPAddress)); syncing.AppendChild(element); element = doc.CreateElement("ClientPort"); element.AppendChild(doc.CreateTextNode(Syncing.ClientPort.ToString())); syncing.AppendChild(element); element = doc.CreateElement("ClientUsername"); element.AppendChild(doc.CreateTextNode(Syncing.ClientUsername)); syncing.AppendChild(element); element = doc.CreateElement("ClientPassword"); element.AppendChild(doc.CreateTextNode(Syncing.ClientPassword)); syncing.AppendChild(element); element = doc.CreateElement("ClientTimeOffset"); element.AppendChild(doc.CreateTextNode(Syncing.ClientTimeOffset.ToString())); syncing.AppendChild(element); element = doc.CreateElement("HostPort"); element.AppendChild(doc.CreateTextNode(Syncing.HostPort.ToString())); syncing.AppendChild(element); element = doc.CreateElement("HostPassword"); element.AppendChild(doc.CreateTextNode(Syncing.HostPassword)); syncing.AppendChild(element); element = doc.CreateElement("HostWait"); element.AppendChild(doc.CreateTextNode(Syncing.HostWait.ToString())); syncing.AppendChild(element); #endregion //-------------------------------- #region Midis XmlElement midiList = doc.CreateElement("Midis"); midiPlayer.AppendChild(midiList); for (int i = 0; i < Midis.Count; i++) { Midi midi = Midis[i]; XmlElement midiElement = doc.CreateElement("Midi"); midiList.AppendChild(midiElement); if (midi == Midi) { midiElement.SetAttribute("Selected", true.ToString()); } element = doc.CreateElement("FilePath"); element.AppendChild(doc.CreateTextNode(midi.Path)); midiElement.AppendChild(element); if (midi.Name != "") { element = doc.CreateElement("Name"); element.AppendChild(doc.CreateTextNode(midi.Name)); midiElement.AppendChild(element); } if (midi.NoteOffset != 0) { element = doc.CreateElement("NoteOffset"); element.AppendChild(doc.CreateTextNode(midi.NoteOffset.ToString())); midiElement.AppendChild(element); } if (midi.Speed != 100) { element = doc.CreateElement("Speed"); element.AppendChild(doc.CreateTextNode(midi.Speed.ToString())); midiElement.AppendChild(element); } if (midi.Keybind != Keybind.None) { element = doc.CreateElement("Keybind"); element.AppendChild(doc.CreateTextNode(midi.Keybind.ToString())); midiElement.AppendChild(element); } XmlElement tracks = doc.CreateElement("Tracks"); midiElement.AppendChild(tracks); for (int j = 0; j < midi.TrackCount; j++) { Midi.TrackSettings trackSettings = midi.GetTrackSettingsAt(j); XmlElement track = doc.CreateElement("Track"); tracks.AppendChild(track); if (trackSettings.Name != "") { track.SetAttribute("Name", trackSettings.Name); } track.SetAttribute("Enabled", trackSettings.Enabled.ToString()); track.SetAttribute("OctaveOffset", trackSettings.OctaveOffset.ToString()); } } #endregion doc.Save(ConfigPath); } catch (Exception ex) { LastException = ex; return(false); } return(true); }
/**<summary>Loads the settings from the config file.</summary>*/ public static bool Load() { try { XmlNode node; XmlElement element; XmlAttribute attribute; XmlDocument doc = new XmlDocument(); bool deleteOldConfig = false; if (File.Exists(ConfigPath)) { doc.Load(ConfigPath); } else { doc.Load(OldConfigPath); if (doc.SelectSingleNode("TerrariaMidiPlayer") != null) { deleteOldConfig = true; } } int intValue; ushort ushortValue; bool boolValue; double doubleValue; Keybind keybindValue; node = doc.SelectSingleNode("TerrariaMidiPlayer/Version"); if (node == null || !int.TryParse(node.InnerText, out intValue) || intValue > ConfigVersion || intValue <= 0) { return(false); } #region Settings node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/ExecutableName"); if (node != null) { ExecutableNames = node.InnerText; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/UseTime"); if (node != null && int.TryParse(node.InnerText, out intValue)) { UseTime = intValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/ClickTime"); if (node != null && int.TryParse(node.InnerText, out intValue)) { ClickTime = intValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/ChecksEnabled"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { ChecksEnabled = boolValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/CheckFrequency"); if (node != null && int.TryParse(node.InnerText, out intValue)) { CheckFrequency = intValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Mount"); if (node != null) { for (int i = 0; i < Mount.Mounts.Length; i++) { if (string.Compare(node.InnerText, Mount.Mounts[i].Name, true) == 0) { MountIndex = i; break; } } } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/ProjectileAngle"); if (node != null && double.TryParse(node.InnerText, out doubleValue)) { ProjectileAngle = doubleValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/ProjectileRange"); if (node != null && double.TryParse(node.InnerText, out doubleValue)) { ProjectileRange = doubleValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/CloseNoFocus"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { CloseNoFocus = boolValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/PlaybackNoFocus"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { PlaybackNoFocus = boolValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/DisableMountWhenTalking"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { DisableMountWhenTalking = boolValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/UseTrackNames"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { UseTrackNames = boolValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/WrapPianoMode"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { WrapPianoMode = boolValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/SkipPianoMode"); if (node != null && bool.TryParse(node.InnerText, out boolValue)) { SkipPianoMode = boolValue; } #endregion //-------------------------------- #region Keybinds node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Keybinds/Play"); if (node != null && Keybind.TryParse(node.InnerText, out keybindValue)) { Keybinds.Play = keybindValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Keybinds/Pause"); if (node != null && Keybind.TryParse(node.InnerText, out keybindValue)) { Keybinds.Pause = keybindValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Keybinds/Stop"); if (node != null && Keybind.TryParse(node.InnerText, out keybindValue)) { Keybinds.Stop = keybindValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Keybinds/Close"); if (node != null && Keybind.TryParse(node.InnerText, out keybindValue)) { Keybinds.Close = keybindValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Keybinds/Mount"); if (node != null && Keybind.TryParse(node.InnerText, out keybindValue)) { Keybinds.Mount = keybindValue; } #endregion //-------------------------------- #region Syncing node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/SyncType"); if (node != null) { Syncing.SyncType = ((string.Compare(node.InnerText, "Host", true) == 0) ? SyncTypes.Host : SyncTypes.Client); } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/ClientIPAddress"); if (node != null) { Syncing.ClientIPAddress = node.InnerText; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/ClientPort"); if (node != null && ushort.TryParse(node.InnerText, out ushortValue)) { Syncing.ClientPort = ushortValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/ClientUsername"); if (node != null) { Syncing.ClientUsername = node.InnerText; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/ClientPassword"); if (node != null) { Syncing.ClientPassword = node.InnerText; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/ClientTimeOffset"); if (node != null && int.TryParse(node.InnerText, out intValue)) { Syncing.ClientTimeOffset = intValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/HostPort"); if (node != null && ushort.TryParse(node.InnerText, out ushortValue)) { Syncing.HostPort = ushortValue; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/HostPassword"); if (node != null) { Syncing.HostPassword = node.InnerText; } node = doc.SelectSingleNode("TerrariaMidiPlayer/Settings/Syncing/HostWait"); if (node != null && int.TryParse(node.InnerText, out intValue)) { Syncing.HostWait = intValue; } #endregion //-------------------------------- #region Midis XmlNodeList midiList = doc.SelectNodes("TerrariaMidiPlayer/Midis/Midi"); for (int i = 0; i < midiList.Count; i++) { node = midiList[i]; Midi midi = new Midi(); element = node["FilePath"]; if (element != null) { if (midi.Load(element.InnerText)) { element = node["Name"]; if (element != null) { midi.Name = element.InnerText; } element = node["NoteOffset"]; if (element != null && int.TryParse(element.InnerText, out intValue)) { midi.NoteOffset = Math.Max(-11, Math.Min(11, intValue)); } element = node["Speed"]; if (element != null && int.TryParse(element.InnerText, out intValue)) { midi.Speed = intValue; } element = node["Keybind"]; if (element != null && Keybind.TryParse(element.InnerText, out keybindValue)) { midi.Keybind = keybindValue; } if (node.Attributes["Selected"] != null && bool.TryParse(midiList[i].Attributes["Selected"].Value, out boolValue) && boolValue) { MidiIndex = i; } element = node["Tracks"]; if (element != null) { XmlNodeList trackList = element.SelectNodes("Track"); for (int j = 0; j < trackList.Count && trackList.Count == midi.TrackCount; j++) { node = trackList[j]; attribute = node.Attributes["Name"]; if (attribute != null) { midi.GetTrackSettingsAt(j).Name = attribute.Value; } attribute = node.Attributes["Enabled"]; if (attribute != null && bool.TryParse(attribute.Value, out boolValue)) { midi.GetTrackSettingsAt(j).Enabled = boolValue; } attribute = node.Attributes["OctaveOffset"]; if (attribute != null && int.TryParse(attribute.Value, out intValue)) { midi.GetTrackSettingsAt(j).OctaveOffset = Math.Max(-1, Math.Min(8, intValue)); } } } Midis.Add(midi); } else { // Error } } } if (Midis.Count > 0 && MidiIndex == -1) { MidiIndex = 0; } #endregion if (deleteOldConfig && Save()) { try { File.Delete(OldConfigPath); } catch { } } } catch (Exception ex) { LastException = ex; return(false); } return(true); }