diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 3a3f075fe..832aff55b 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,4 +1,12 @@ -1.76.7 (2018-xx-xx): +1.76.8 (2018-xx-xx): + +Fixes: +------ +#1088: Delete and Launch buttons are not disabled when last external tool deleted +#1087: 'Save connections after every edit' setting not honored + + +1.76.7 (2018-08-22): Fixes: ------ diff --git a/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs b/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs index 53f74739a..4bcb698d9 100644 --- a/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs +++ b/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs @@ -1,4 +1,6 @@ -using System.Linq; +using System; +using System.Linq; +using System.Xml.Linq; using mRemoteNG.Config.Serializers; using mRemoteNG.Config.Serializers.Xml; using mRemoteNG.Connection; @@ -29,20 +31,19 @@ namespace mRemoteNGTests.IntegrationTests _originalModel.RootNodes.OfType().First().PasswordString.ConvertToSecureString(), new SaveFilter()); _serializer = new XmlConnectionsSerializer(cryptoProvider, nodeSerializer); + _deserializer = new XmlConnectionsDeserializer(); } [TearDown] public void Teardown() { _serializer = null; - _deserializer = null; } [Test] public void SerializeThenDeserialize() { var serializedContent = _serializer.Serialize(_originalModel); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name); var nodeNamesFromOriginalModel = _originalModel.GetRecursiveChildList().Select(node => node.Name); @@ -54,7 +55,6 @@ namespace mRemoteNGTests.IntegrationTests { _serializer.UseFullEncryption = true; var serializedContent = _serializer.Serialize(_originalModel); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name); var nodeNamesFromOriginalModel = _originalModel.GetRecursiveChildList().Select(node => node.Name); @@ -66,7 +66,6 @@ namespace mRemoteNGTests.IntegrationTests { var originalConnectionInfo = new ConnectionInfo {Name = "con1", Description = "£°úg¶┬ä" }; var serializedContent = _serializer.Serialize(originalConnectionInfo); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var deserializedConnectionInfo = deserializedModel.GetRecursiveChildList().First(node => node.Name == originalConnectionInfo.Name); Assert.That(deserializedConnectionInfo.Description, Is.EqualTo(originalConnectionInfo.Description)); @@ -84,13 +83,26 @@ namespace mRemoteNGTests.IntegrationTests new SaveFilter()); _serializer = new XmlConnectionsSerializer(cryptoProvider, nodeSerializer); var serializedContent = _serializer.Serialize(_originalModel); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name); var nodeNamesFromOriginalModel = _originalModel.GetRecursiveChildList().Select(node => node.Name); Assert.That(nodeNamesFromDeserializedModel, Is.EquivalentTo(nodeNamesFromOriginalModel)); } + [Test] + public void GuidCreatedIfNonExistedInXml() + { + var originalConnectionInfo = new ConnectionInfo { Name = "con1" }; + var serializedContent = _serializer.Serialize(originalConnectionInfo); + + // remove GUID from connection xml + serializedContent = serializedContent.Replace(originalConnectionInfo.ConstantID, ""); + + var deserializedModel = _deserializer.Deserialize(serializedContent); + var deserializedConnectionInfo = deserializedModel.GetRecursiveChildList().First(node => node.Name == originalConnectionInfo.Name); + Assert.That(Guid.TryParse(deserializedConnectionInfo.ConstantID, out var guid)); + } + private ConnectionTreeModel SetupConnectionTreeModel() { diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs index 71919e638..f4b2620e1 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs @@ -205,7 +205,9 @@ namespace mRemoteNG.Config.Serializers.Xml { if (xmlnode.Attributes == null) return null; - var connectionId = xmlnode.Attributes["Id"]?.Value ?? Guid.NewGuid().ToString(); + var connectionId = xmlnode.Attributes["Id"]?.Value; + if (string.IsNullOrWhiteSpace(connectionId)) + connectionId = Guid.NewGuid().ToString(); var connectionInfo = new ConnectionInfo(connectionId); try diff --git a/mRemoteV1/Properties/AssemblyInfo.cs b/mRemoteV1/Properties/AssemblyInfo.cs index 2d2f304f2..27014a274 100644 --- a/mRemoteV1/Properties/AssemblyInfo.cs +++ b/mRemoteV1/Properties/AssemblyInfo.cs @@ -33,5 +33,5 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: // -[assembly: AssemblyVersion("1.76.6.*")] +[assembly: AssemblyVersion("1.76.7.*")] [assembly: NeutralResourcesLanguage("en")] \ No newline at end of file diff --git a/mRemoteV1/Tools/IeBrowserEmulation.cs b/mRemoteV1/Tools/IeBrowserEmulation.cs index b7e9fba87..ad6c85ca5 100644 --- a/mRemoteV1/Tools/IeBrowserEmulation.cs +++ b/mRemoteV1/Tools/IeBrowserEmulation.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Linq; using System.Security.AccessControl; using Microsoft.Win32; using mRemoteNG.App; @@ -38,14 +39,16 @@ namespace mRemoteNG.Tools { using (var key = Registry.CurrentUser.OpenSubKey(string.Concat("Software\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree)) { - key?.DeleteValue(appName); + if (key?.GetValueNames().Contains(appName) ?? false) + key.DeleteValue(appName); } } using (var key = Registry.CurrentUser.CreateSubKey(string.Concat("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree)) { - key?.DeleteValue(appName); + if (key?.GetValueNames().Contains(appName) ?? false) + key.DeleteValue(appName); } } #endif diff --git a/mRemoteV1/UI/Window/ConfigWindow.cs b/mRemoteV1/UI/Window/ConfigWindow.cs index fd1c82442..f6591cca6 100644 --- a/mRemoteV1/UI/Window/ConfigWindow.cs +++ b/mRemoteV1/UI/Window/ConfigWindow.cs @@ -706,7 +706,6 @@ namespace mRemoteNG.UI.Window UpdateRootInfoNode(e); UpdateInheritanceNode(); ShowHideGridItems(); - Runtime.ConnectionsService.SaveConnectionsAsync(); } catch (Exception ex) { diff --git a/mRemoteV1/UI/Window/ExternalToolsWindow.cs b/mRemoteV1/UI/Window/ExternalToolsWindow.cs index 9618fb6e1..968bcedf0 100644 --- a/mRemoteV1/UI/Window/ExternalToolsWindow.cs +++ b/mRemoteV1/UI/Window/ExternalToolsWindow.cs @@ -134,6 +134,19 @@ namespace mRemoteNG.UI.Window RunElevatedCheckBox.Checked = selectedTool?.RunElevated ?? false; WaitForExitCheckBox.Enabled = !TryToIntegrateCheckBox.Checked; } + + private void UpdateToolstipControls() + { + _currentlySelectedExternalTools.Clear(); + _currentlySelectedExternalTools.AddRange(ToolsListObjView.SelectedObjects.OfType()); + PropertiesGroupBox.Enabled = _currentlySelectedExternalTools.Count == 1; + + var atleastOneToolSelected = _currentlySelectedExternalTools.Count > 0; + DeleteToolMenuItem.Enabled = atleastOneToolSelected; + DeleteToolToolstripButton.Enabled = atleastOneToolSelected; + LaunchToolMenuItem.Enabled = atleastOneToolSelected; + LaunchToolToolstripButton.Enabled = atleastOneToolSelected; + } #endregion #region Event Handlers @@ -193,6 +206,8 @@ namespace mRemoteNG.UI.Window ToolsListObjView.SelectedIndex = oldSelectedIndex <= maxIndex ? oldSelectedIndex : maxIndex; + + UpdateToolstipControls(); } catch (Exception ex) { @@ -209,15 +224,7 @@ namespace mRemoteNG.UI.Window { try { - _currentlySelectedExternalTools.Clear(); - _currentlySelectedExternalTools.AddRange(ToolsListObjView.SelectedObjects.OfType()); - PropertiesGroupBox.Enabled = _currentlySelectedExternalTools.Count == 1; - - var atleastOneToolSelected = _currentlySelectedExternalTools.Count > 0; - DeleteToolMenuItem.Enabled = atleastOneToolSelected; - DeleteToolToolstripButton.Enabled = atleastOneToolSelected; - LaunchToolMenuItem.Enabled = atleastOneToolSelected; - LaunchToolToolstripButton.Enabled = atleastOneToolSelected; + UpdateToolstipControls(); } catch (Exception ex) {