From 457e715188bff482ea9eb15bd7aa4f79d713722a Mon Sep 17 00:00:00 2001 From: David Sparer Date: Wed, 22 Aug 2018 10:59:45 -0500 Subject: [PATCH 1/6] set assembly version to 1.76.7 and set release date in changelog --- CHANGELOG.TXT | 2 +- mRemoteV1/Properties/AssemblyInfo.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 3a3f075f..e3a59699 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,4 +1,4 @@ -1.76.7 (2018-xx-xx): +1.76.7 (2018-08-22): Fixes: ------ diff --git a/mRemoteV1/Properties/AssemblyInfo.cs b/mRemoteV1/Properties/AssemblyInfo.cs index 2d2f304f..27014a27 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 From 8f8492b0bef80d83e90154c7ae274032b76fa53f Mon Sep 17 00:00:00 2001 From: David Sparer Date: Fri, 24 Aug 2018 10:37:54 -0500 Subject: [PATCH 2/6] xml deserializer now gives connections an ID if the ID string in xml is empty fixes #1082 --- .../XmlSerializationLifeCycleTests.cs | 24 ++++++++++++++----- .../Xml/XmlConnectionsDeserializer.cs | 4 +++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs b/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs index 53f74739..4bcb698d 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 71919e63..f4b2620e 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 From 507cdf75a55b775424b2d4c8c2c8007a8e9cdec9 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Fri, 24 Aug 2018 13:23:02 -0500 Subject: [PATCH 3/6] fixes #1087 --- mRemoteV1/UI/Window/ConfigWindow.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/mRemoteV1/UI/Window/ConfigWindow.cs b/mRemoteV1/UI/Window/ConfigWindow.cs index fd1c8244..f6591cca 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) { From b0dbc9dc18f341ea4b805dfec810c551e658b6e5 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Fri, 24 Aug 2018 13:23:52 -0500 Subject: [PATCH 4/6] only delete reg key value if the value exists --- mRemoteV1/Tools/IeBrowserEmulation.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mRemoteV1/Tools/IeBrowserEmulation.cs b/mRemoteV1/Tools/IeBrowserEmulation.cs index b7e9fba8..ad6c85ca 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 From ebfc2715e7cc9e760f8af25010b548cf376d97c8 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Fri, 24 Aug 2018 13:24:23 -0500 Subject: [PATCH 5/6] updated changelog --- CHANGELOG.TXT | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index e3a59699..71c1630f 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,3 +1,10 @@ +1.76.8 (2018-xx-xx): + +Fixes: +------ +#1087: 'Save connections after every edit' setting not honored + + 1.76.7 (2018-08-22): Fixes: From 0c79a9acdef3a7699e872158037d6220bffb8f8d Mon Sep 17 00:00:00 2001 From: David Sparer Date: Fri, 24 Aug 2018 14:43:08 -0500 Subject: [PATCH 6/6] fixes #1088 --- CHANGELOG.TXT | 1 + mRemoteV1/UI/Window/ExternalToolsWindow.cs | 25 ++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 71c1630f..832aff55 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -2,6 +2,7 @@ Fixes: ------ +#1088: Delete and Launch buttons are not disabled when last external tool deleted #1087: 'Save connections after every edit' setting not honored diff --git a/mRemoteV1/UI/Window/ExternalToolsWindow.cs b/mRemoteV1/UI/Window/ExternalToolsWindow.cs index 9618fb6e..968bcedf 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) {