diff --git a/mRemoteV1/Config/Settings/Providers/ChooseProvider.cs b/mRemoteV1/Config/Settings/Providers/ChooseProvider.cs index 5edbde037..4300be4eb 100644 --- a/mRemoteV1/Config/Settings/Providers/ChooseProvider.cs +++ b/mRemoteV1/Config/Settings/Providers/ChooseProvider.cs @@ -1,6 +1,4 @@ -using System.Configuration; - -namespace mRemoteNG.Config.Settings.Providers +namespace mRemoteNG.Config.Settings.Providers { #if PORTABLE public class ChooseProvider : PortableSettingsProvider diff --git a/mRemoteV1/Config/Settings/Providers/PortableSettingsProvider.cs b/mRemoteV1/Config/Settings/Providers/PortableSettingsProvider.cs index 3e42acfe7..a3aa1490b 100644 --- a/mRemoteV1/Config/Settings/Providers/PortableSettingsProvider.cs +++ b/mRemoteV1/Config/Settings/Providers/PortableSettingsProvider.cs @@ -1,37 +1,37 @@ -/// The MIT License (MIT) -/// -/// Copyright(c) crdx -/// -/// Permission is hereby granted, free of charge, to any person obtaining -/// a copy of this software and associated documentation files (the -/// "Software"), to deal in the Software without restriction, including -/// without limitation the rights to use, copy, modify, merge, publish, -/// distribute, sublicense, and/or sell copies of the Software, and to -/// permit persons to whom the Software is furnished to do so, subject to -/// the following conditions: -/// -/// The above copyright notice and this permission notice shall be -/// included in all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -/// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -/// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -/// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -/// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -/// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -/// -/// https://raw.githubusercontent.com/crdx/PortableSettingsProvider -/// -using System.Linq; +// The MIT License (MIT) +// +// Copyright(c) crdx +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// https://raw.githubusercontent.com/crdx/PortableSettingsProvider +// + using System; using System.Collections; -using System.Collections.Generic; using System.Configuration; using System.Windows.Forms; using System.Collections.Specialized; using System.Xml; using System.IO; +using mRemoteNG.App; namespace mRemoteNG.Config.Settings.Providers { @@ -43,63 +43,46 @@ namespace mRemoteNG.Config.Settings.Providers private const string _className = "PortableSettingsProvider"; private XmlDocument _xmlDocument; - private string _filePath - { - get - { - return Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), - string.Format("{0}.settings", ApplicationName)); - } - } + private string _filePath => Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) ?? throw new InvalidOperationException(), $"{ApplicationName}.settings"); private XmlNode _localSettingsNode { get { - XmlNode settingsNode = GetSettingsNode(_localSettingsNodeName); - XmlNode machineNode = settingsNode.SelectSingleNode(Environment.MachineName.ToLowerInvariant()); + var settingsNode = GetSettingsNode(_localSettingsNodeName); + var machineNode = settingsNode.SelectSingleNode(Environment.MachineName.ToLowerInvariant()); - if (machineNode == null) - { - machineNode = _rootDocument.CreateElement(Environment.MachineName.ToLowerInvariant()); - settingsNode.AppendChild(machineNode); - } + if (machineNode != null) return machineNode; + machineNode = _rootDocument.CreateElement(Environment.MachineName.ToLowerInvariant()); + settingsNode.AppendChild(machineNode); return machineNode; } } - private XmlNode _globalSettingsNode - { - get { return GetSettingsNode(_globalSettingsNodeName); } - } + private XmlNode _globalSettingsNode => GetSettingsNode(_globalSettingsNodeName); - private XmlNode _rootNode - { - get { return _rootDocument.SelectSingleNode(_rootNodeName); } - } + private XmlNode _rootNode => _rootDocument.SelectSingleNode(_rootNodeName); private XmlDocument _rootDocument { get { - if (_xmlDocument == null) + if (_xmlDocument != null) return _xmlDocument; + try { - try - { - _xmlDocument = new XmlDocument(); - _xmlDocument.Load(_filePath); - } - catch (Exception) - { - - } - - if (_xmlDocument.SelectSingleNode(_rootNodeName) != null) - return _xmlDocument; - - _xmlDocument = GetBlankXmlDocument(); + _xmlDocument = new XmlDocument(); + _xmlDocument.Load(_filePath); } + catch (Exception ex) + { + Runtime.MessageCollector?.AddExceptionStackTrace("PortableSettingsProvider: Error getting XML", ex); + } + + if (_xmlDocument?.SelectSingleNode(_rootNodeName) != null) + return _xmlDocument; + + _xmlDocument = GetBlankXmlDocument(); return _xmlDocument; } @@ -107,14 +90,11 @@ namespace mRemoteNG.Config.Settings.Providers public override string ApplicationName { - get { return Path.GetFileNameWithoutExtension(Application.ExecutablePath); } + get => Path.GetFileNameWithoutExtension(Application.ExecutablePath); set { } } - public override string Name - { - get { return _className; } - } + public override string Name => _className; public override void Initialize(string name, NameValueCollection config) { @@ -143,7 +123,7 @@ namespace mRemoteNG.Config.Settings.Providers public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection) { - SettingsPropertyValueCollection values = new SettingsPropertyValueCollection(); + var values = new SettingsPropertyValueCollection(); foreach (SettingsProperty property in collection) { @@ -158,11 +138,11 @@ namespace mRemoteNG.Config.Settings.Providers private void SetValue(SettingsPropertyValue propertyValue) { - XmlNode targetNode = IsGlobal(propertyValue.Property) + var targetNode = IsGlobal(propertyValue.Property) ? _globalSettingsNode : _localSettingsNode; - XmlNode settingNode = targetNode.SelectSingleNode(string.Format("setting[@name='{0}']", propertyValue.Name)); + var settingNode = targetNode.SelectSingleNode($"setting[@name='{propertyValue.Name}']"); if (settingNode != null) settingNode.InnerText = propertyValue.SerializedValue.ToString(); @@ -170,10 +150,10 @@ namespace mRemoteNG.Config.Settings.Providers { settingNode = _rootDocument.CreateElement("setting"); - XmlAttribute nameAttribute = _rootDocument.CreateAttribute("name"); + var nameAttribute = _rootDocument.CreateAttribute("name"); nameAttribute.Value = propertyValue.Name; - settingNode.Attributes.Append(nameAttribute); + settingNode.Attributes?.Append(nameAttribute); settingNode.InnerText = propertyValue.SerializedValue.ToString(); targetNode.AppendChild(settingNode); @@ -182,8 +162,8 @@ namespace mRemoteNG.Config.Settings.Providers private string GetValue(SettingsProperty property) { - XmlNode targetNode = IsGlobal(property) ? _globalSettingsNode : _localSettingsNode; - XmlNode settingNode = targetNode.SelectSingleNode(string.Format("setting[@name='{0}']", property.Name)); + var targetNode = IsGlobal(property) ? _globalSettingsNode : _localSettingsNode; + var settingNode = targetNode.SelectSingleNode($"setting[@name='{property.Name}']"); if (settingNode == null) return property.DefaultValue != null ? property.DefaultValue.ToString() : string.Empty; @@ -191,7 +171,7 @@ namespace mRemoteNG.Config.Settings.Providers return settingNode.InnerText; } - private bool IsGlobal(SettingsProperty property) + private static bool IsGlobal(SettingsProperty property) { foreach (DictionaryEntry attribute in property.Attributes) { @@ -204,20 +184,18 @@ namespace mRemoteNG.Config.Settings.Providers private XmlNode GetSettingsNode(string name) { - XmlNode settingsNode = _rootNode.SelectSingleNode(name); + var settingsNode = _rootNode.SelectSingleNode(name); - if (settingsNode == null) - { - settingsNode = _rootDocument.CreateElement(name); - _rootNode.AppendChild(settingsNode); - } + if (settingsNode != null) return settingsNode; + settingsNode = _rootDocument.CreateElement(name); + _rootNode.AppendChild(settingsNode); return settingsNode; } - public XmlDocument GetBlankXmlDocument() + private static XmlDocument GetBlankXmlDocument() { - XmlDocument blankXmlDocument = new XmlDocument(); + var blankXmlDocument = new XmlDocument(); blankXmlDocument.AppendChild(blankXmlDocument.CreateXmlDeclaration("1.0", "utf-8", string.Empty)); blankXmlDocument.AppendChild(blankXmlDocument.CreateElement(_rootNodeName));