diff --git a/mRemoteNG/App/Import.cs b/mRemoteNG/App/Import.cs index 245653f1..3050c18c 100644 --- a/mRemoteNG/App/Import.cs +++ b/mRemoteNG/App/Import.cs @@ -143,6 +143,21 @@ namespace mRemoteNG.App } } + internal static void ImportFromPutty(ContainerInfo selectedNodeAsContainer) + { + try + { + using (Runtime.ConnectionsService.BatchedSavingContext()) + { + RegistryImporter.Import("Software\\SimonTatham\\PuTTY\\Sessions", selectedNodeAsContainer); + } + } + catch (Exception ex) + { + Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromPutty() failed.", ex); + } + } + private static IConnectionImporter BuildConnectionImporterFromFileExtension(string fileName) { // TODO: Use the file contents to determine the file type instead of trusting the extension diff --git a/mRemoteNG/Config/Import/RegistryImporter.cs b/mRemoteNG/Config/Import/RegistryImporter.cs index d02eb473..45945e29 100644 --- a/mRemoteNG/Config/Import/RegistryImporter.cs +++ b/mRemoteNG/Config/Import/RegistryImporter.cs @@ -28,13 +28,12 @@ namespace mRemoteNG.Config.Import { if (key != null) { - int i = 0; foreach (string sub in key.GetSubKeyNames()) { if (sub.EndsWith("Default%20Settings")) continue; using RegistryKey subkey = key.OpenSubKey(sub); string Hostname = subkey.GetValue("HostName") as string; - + string connName = subkey.Name[(key.Name.Length + 1)..]; if (!string.IsNullOrEmpty(Hostname)) { int Port = 22; @@ -60,20 +59,13 @@ namespace mRemoteNG.Config.Import importedNode.AddChild(new Connection.ConnectionInfo() { - Name = Hostname, + Name = connName, Hostname = Hostname, + Port = Port == 0 ? 22 : Port, Protocol = Protocol, - Parent = destinationContainer + Parent = destinationContainer, + Username = string.IsNullOrEmpty(Username) ? string.Empty : Username }); - if (Port > 0) - { - importedNode.Children[i].Port = Port; - } - if (string.IsNullOrEmpty(Username)) - { - importedNode.Children[i].Username = Username; - } - i++; } } } diff --git a/mRemoteNG/UI/Controls/ConnectionContextMenu.cs b/mRemoteNG/UI/Controls/ConnectionContextMenu.cs index a90deb0f..dccb95f2 100644 --- a/mRemoteNG/UI/Controls/ConnectionContextMenu.cs +++ b/mRemoteNG/UI/Controls/ConnectionContextMenu.cs @@ -55,6 +55,7 @@ namespace mRemoteNG.UI.Controls private ToolStripMenuItem _cMenTreeImportFromRemoteDesktopManager; private ToolStripMenuItem _cMenTreeImportActiveDirectory; private ToolStripMenuItem _cMenTreeImportPortScan; + private ToolStripMenuItem _cMenTreeImportPutty; private ToolStripMenuItem _cMenTreeApplyInheritanceToChildren; private ToolStripMenuItem _cMenTreeApplyDefaultInheritance; private readonly ConnectionTree.ConnectionTree _connectionTree; @@ -104,6 +105,7 @@ namespace mRemoteNG.UI.Controls _cMenTreeImportFromRemoteDesktopManager = new ToolStripMenuItem(); _cMenTreeImportActiveDirectory = new ToolStripMenuItem(); _cMenTreeImportPortScan = new ToolStripMenuItem(); + _cMenTreeImportPutty = new ToolStripMenuItem(); _cMenInheritanceSubMenu = new ToolStripMenuItem(); _cMenTreeApplyInheritanceToChildren = new ToolStripMenuItem(); _cMenTreeApplyDefaultInheritance = new ToolStripMenuItem(); @@ -303,6 +305,7 @@ namespace mRemoteNG.UI.Controls _cMenTreeImportFile, _cMenTreeImportFromRemoteDesktopManager, _cMenTreeImportActiveDirectory, + _cMenTreeImportPutty, _cMenTreeImportPortScan }); _cMenTreeImport.Name = "_cMenTreeImport"; @@ -336,6 +339,13 @@ namespace mRemoteNG.UI.Controls _cMenTreeImportPortScan.Text = "Import from &Port Scan..."; _cMenTreeImportPortScan.Click += OnImportPortScanClicked; // + // cMenTreeImportPutty + // + _cMenTreeImportPutty.Name = "_cMenTreeImportPutty"; + _cMenTreeImportPutty.Size = new System.Drawing.Size(226, 22); + _cMenTreeImportPutty.Text = "Import from &Putty..."; + _cMenTreeImportPutty.Click += OnImportPuttyClicked; + // // cMenTreeExportFile // _cMenTreeExportFile.Name = "_cMenTreeExportFile"; @@ -864,6 +874,17 @@ namespace mRemoteNG.UI.Controls Import.ImportFromFile(selectedNodeAsContainer); } + private void OnImportPuttyClicked(object sender, EventArgs e) + { + ContainerInfo selectedNodeAsContainer; + if (_connectionTree.SelectedNode == null) + selectedNodeAsContainer = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes.First(); + else + selectedNodeAsContainer = + _connectionTree.SelectedNode as ContainerInfo ?? _connectionTree.SelectedNode.Parent; + Import.ImportFromPutty(selectedNodeAsContainer); + } + private void OnImportRemoteDesktopManagerClicked(object sender, EventArgs e) { ContainerInfo selectedNodeAsContainer;