Esempio n. 1
0
        /**<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);
        }
Esempio n. 2
0
        /**<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);
        }