Merge branch 'develop' of https://github.com/mRemoteNG/mRemoteNG into develop

This commit is contained in:
Sean Kaim
2017-11-20 14:36:33 -05:00
14 changed files with 165 additions and 31 deletions

View File

@@ -2,16 +2,43 @@
Features/Enhancements:
----------------------
Added more logging/notifications options
#429: Added Czech translation
#799: Added option to save connections on every edit
#798: Added button to test SQL database connections on SQL options page
#784: Rearranged some settings in the Options pages to prevent overlap with some translations
#704: Portable version now saves settings in application directory
#671: Revamped UI theme system
#611: Added multi-ssh toolbar for sending commands to many SSH clients at once
#558: Connection tree now shows customizable icons instead of play/pause icon
#504: Added Korean translation
#208: Added credential repository feature
#485: The Domain field is now visible/editable for connection with the IntApp protocol
#468: Default connection info Panel property is now saved
#429: Added Czech translation
#421: When a connection file cannot be loaded, we will now prompt for how to proceed rather than always exiting.
#338: Added option to filter connection tree when searching
#357: Updated GeckoFX to v45.45.0.32
#225: Added support for importing Remote Desktop Connection Manager v2.7 RDG files
#207: Can now specify a working directory for external tools
#197: Selecting a quick connect protocol will start a connection with that host
#184: Improve search to include description and hostname fields
#152: Added option "Show on Toolbar" to external tools
Added more logging/notifications options
Fixes:
------
#747: Fixed unnecessary "PuttySessions.Watcher.StartWatching" error message
#650: Fixed German translation typo
#639: Fixed Italian translation typo
#479: New connection tree nodes not starting in edit mode
#233: Fixed crash that can occur when disconnecting from VNC server
#195: Access to https with self-signed certificates not working
General Changes:
----------------
Improved compatability between environments when building mRemoteNG from source
#797: Removed duplicate translation strings
#608: The Help -> Support Forum menu item now directs users to our Reddit community
#493: Changed backup file name time stamp to use local system time rather than UTC
Improved compatability between environments when building mRemoteNG from source
1.75.7011 (2017-11-07):

View File

@@ -19,6 +19,8 @@ github.com/dekelMP
github.com/farosch
Bruce (github.com/brucetp)
Camilo Alvarez (github.com/jotatsu)
github.com/DamianBis
github.com/pfjason
Past Contributors
@@ -51,7 +53,7 @@ Robert Siwiec
Hayato Iriumi
Sebastien Thieury (github.com/SebThieu)
Riza Emet
Lukas Plachy
Lukas Plachy (github.com/rheingold)
Gyuha Shin
Stefan (github.com/polluks)
github.com/emazv72

View File

@@ -43,21 +43,21 @@ namespace mRemoteNG.Connection
LocalizedAttributes.LocalizedDisplayNameInheritAttribute("strPropertyNameUsername"),
LocalizedAttributes.LocalizedDescriptionInheritAttribute("strPropertyDescriptionUsername"),
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
[Browsable(false)]
[Browsable(true)]
public bool Username { get; set; }
[LocalizedAttributes.LocalizedCategory("strCategoryConnection", 3),
LocalizedAttributes.LocalizedDisplayNameInheritAttribute("strPropertyNamePassword"),
LocalizedAttributes.LocalizedDescriptionInheritAttribute("strPropertyDescriptionPassword"),
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
[Browsable(false)]
[Browsable(true)]
public bool Password { get; set; }
[LocalizedAttributes.LocalizedCategory("strCategoryConnection", 3),
LocalizedAttributes.LocalizedDisplayNameInheritAttribute("strPropertyNameDomain"),
LocalizedAttributes.LocalizedDescriptionInheritAttribute("strPropertyDescriptionDomain"),
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
[Browsable(false)]
[Browsable(true)]
public bool Domain { get; set; }
#endregion
#region Protocol

View File

@@ -12,7 +12,7 @@ namespace mRemoteNG {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -2614,5 +2614,17 @@ namespace mRemoteNG {
this["SaveConnectionsAfterEveryEdit"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool UseFilterSearch {
get {
return ((bool)(this["UseFilterSearch"]));
}
set {
this["UseFilterSearch"] = value;
}
}
}
}

View File

@@ -650,5 +650,8 @@
<Setting Name="SaveConnectionsAfterEveryEdit" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="UseFilterSearch" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -19,7 +19,7 @@ namespace mRemoteNG {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Language {
@@ -141,6 +141,15 @@ namespace mRemoteNG {
}
}
/// <summary>
/// Looks up a localized string similar to Filter search matches in connection tree.
/// </summary>
internal static string FilterSearchMatchesInConnectionTree {
get {
return ResourceManager.GetString("FilterSearchMatchesInConnectionTree", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Incorrect password.
/// </summary>
@@ -7462,6 +7471,15 @@ namespace mRemoteNG {
}
}
/// <summary>
/// Looks up a localized string similar to Test Connection.
/// </summary>
internal static string TestConnection {
get {
return ResourceManager.GetString("TestConnection", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Testing connection.
/// </summary>

View File

@@ -2619,4 +2619,10 @@ This page will walk you through the process of upgrading your connections file o
<data name="SaveConnectionsAfterEveryEdit" xml:space="preserve">
<value>Save connections after every edit</value>
</data>
<data name="FilterSearchMatchesInConnectionTree" xml:space="preserve">
<value>Filter search matches in connection tree</value>
</data>
<data name="TestConnection" xml:space="preserve">
<value>Test Connection</value>
</data>
</root>

View File

@@ -0,0 +1,26 @@
using BrightIdeasSoftware;
using mRemoteNG.Connection;
namespace mRemoteNG.UI.Controls
{
public class ConnectionTreeSearchTextFilter : IModelFilter
{
public string FilterText { get; set; } = "";
public bool Filter(object modelObject)
{
var objectAsConnectionInfo = modelObject as ConnectionInfo;
if (objectAsConnectionInfo == null)
return false;
var filterTextLower = FilterText.ToLowerInvariant();
if (objectAsConnectionInfo.Name.ToLowerInvariant().Contains(filterTextLower) ||
objectAsConnectionInfo.Hostname.ToLowerInvariant().Contains(filterTextLower) ||
objectAsConnectionInfo.Description.ToLowerInvariant().Contains(filterTextLower))
return true;
return false;
}
}
}

View File

@@ -50,6 +50,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.pnlRdpConnectionTimeout = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.chkSaveConnectionsAfterEveryEdit = new mRemoteNG.UI.Controls.Base.NGCheckBox();
this.chkUseFilterSearch = new mRemoteNG.UI.Controls.Base.NGCheckBox();
((System.ComponentModel.ISupportInitialize)(this.numRDPConTimeout)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numRdpReconnectionCount)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numAutoSave)).BeginInit();
@@ -183,7 +184,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.pnlConfirmCloseConnection.Controls.Add(this.radCloseWarnMultiple);
this.pnlConfirmCloseConnection.Controls.Add(this.radCloseWarnExit);
this.pnlConfirmCloseConnection.Controls.Add(this.radCloseWarnNever);
this.pnlConfirmCloseConnection.Location = new System.Drawing.Point(2, 191);
this.pnlConfirmCloseConnection.Location = new System.Drawing.Point(3, 214);
this.pnlConfirmCloseConnection.Name = "pnlConfirmCloseConnection";
this.pnlConfirmCloseConnection.Size = new System.Drawing.Size(595, 137);
this.pnlConfirmCloseConnection.TabIndex = 6;
@@ -248,7 +249,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.pnlRdpReconnectionCount.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F));
this.pnlRdpReconnectionCount.Controls.Add(this.lblRdpReconnectionCount, 0, 0);
this.pnlRdpReconnectionCount.Controls.Add(this.numRdpReconnectionCount, 1, 0);
this.pnlRdpReconnectionCount.Location = new System.Drawing.Point(3, 95);
this.pnlRdpReconnectionCount.Location = new System.Drawing.Point(4, 118);
this.pnlRdpReconnectionCount.Name = "pnlRdpReconnectionCount";
this.pnlRdpReconnectionCount.RowCount = 1;
this.pnlRdpReconnectionCount.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
@@ -263,7 +264,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.pnlRdpConnectionTimeout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F));
this.pnlRdpConnectionTimeout.Controls.Add(this.numRDPConTimeout, 1, 0);
this.pnlRdpConnectionTimeout.Controls.Add(this.lblRDPConTimeout, 0, 0);
this.pnlRdpConnectionTimeout.Location = new System.Drawing.Point(3, 127);
this.pnlRdpConnectionTimeout.Location = new System.Drawing.Point(4, 150);
this.pnlRdpConnectionTimeout.Name = "pnlRdpConnectionTimeout";
this.pnlRdpConnectionTimeout.RowCount = 1;
this.pnlRdpConnectionTimeout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
@@ -278,11 +279,11 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F));
this.tableLayoutPanel1.Controls.Add(this.numAutoSave, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.lblAutoSave1, 0, 0);
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 159);
this.tableLayoutPanel1.Location = new System.Drawing.Point(4, 182);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(595, 26);
this.tableLayoutPanel1.TabIndex = 5;
//
@@ -297,10 +298,22 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.chkSaveConnectionsAfterEveryEdit.Text = "Save connections after every edit";
this.chkSaveConnectionsAfterEveryEdit.UseVisualStyleBackColor = true;
//
// chkUseFilterSearch
//
this.chkUseFilterSearch._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
this.chkUseFilterSearch.AutoSize = true;
this.chkUseFilterSearch.Location = new System.Drawing.Point(4, 95);
this.chkUseFilterSearch.Name = "chkUseFilterSearch";
this.chkUseFilterSearch.Size = new System.Drawing.Size(214, 17);
this.chkUseFilterSearch.TabIndex = 8;
this.chkUseFilterSearch.Text = "Filter search matches in connection tree";
this.chkUseFilterSearch.UseVisualStyleBackColor = true;
//
// ConnectionsPage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.chkUseFilterSearch);
this.Controls.Add(this.chkSaveConnectionsAfterEveryEdit);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.pnlRdpConnectionTimeout);
@@ -343,5 +356,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
private System.Windows.Forms.TableLayoutPanel pnlRdpConnectionTimeout;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
internal Controls.Base.NGCheckBox chkSaveConnectionsAfterEveryEdit;
private Controls.Base.NGCheckBox chkUseFilterSearch;
}
}

View File

@@ -27,6 +27,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
chkSingleClickOnOpenedConnectionSwitchesToIt.Text = Language.strSingleClickOnOpenConnectionSwitchesToIt;
chkHostnameLikeDisplayName.Text = Language.strSetHostnameLikeDisplayName;
chkSaveConnectionsAfterEveryEdit.Text = Language.SaveConnectionsAfterEveryEdit;
chkUseFilterSearch.Text = Language.FilterSearchMatchesInConnectionTree;
lblRdpReconnectionCount.Text = Language.strRdpReconnectCount;
lblRDPConTimeout.Text = Language.strRDPOverallConnectionTimeout;
@@ -47,6 +48,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
chkSingleClickOnOpenedConnectionSwitchesToIt.Checked = Settings.Default.SingleClickSwitchesToOpenConnection;
chkHostnameLikeDisplayName.Checked = Settings.Default.SetHostnameLikeDisplayName;
chkSaveConnectionsAfterEveryEdit.Checked = Settings.Default.SaveConnectionsAfterEveryEdit;
chkUseFilterSearch.Checked = Settings.Default.UseFilterSearch;
numRdpReconnectionCount.Value = Convert.ToDecimal(Settings.Default.RdpReconnectionCount);
numRDPConTimeout.Value = Convert.ToDecimal(Settings.Default.ConRDPOverallConnectionTimeout);
@@ -75,6 +77,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
Settings.Default.SingleClickSwitchesToOpenConnection = chkSingleClickOnOpenedConnectionSwitchesToIt.Checked;
Settings.Default.SetHostnameLikeDisplayName = chkHostnameLikeDisplayName.Checked;
Settings.Default.SaveConnectionsAfterEveryEdit = chkSaveConnectionsAfterEveryEdit.Checked;
Settings.Default.UseFilterSearch = chkUseFilterSearch.Checked;
Settings.Default.RdpReconnectionCount = (int) numRdpReconnectionCount.Value;
Settings.Default.ConRDPOverallConnectionTimeout = (int) numRDPConTimeout.Value;

View File

@@ -36,7 +36,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
lblSQLDatabaseName.Text = Language.strLabelSQLServerDatabaseName;
lblSQLUsername.Text = Language.strLabelUsername;
lblSQLPassword.Text = Language.strLabelPassword;
btnTestConnection.Text = "Test Connection";
btnTestConnection.Text = Language.TestConnection;
}
public override void LoadSettings()
@@ -54,6 +54,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
public override void SaveSettings()
{
base.SaveSettings();
var sqlServerWasPreviouslyEnabled = Settings.Default.UseSQLServer;
Settings.Default.UseSQLServer = chkUseSQLServer.Checked;
Settings.Default.SQLHost = txtSQLServer.Text;
@@ -61,7 +62,11 @@ namespace mRemoteNG.UI.Forms.OptionsPages
Settings.Default.SQLUser = txtSQLUsername.Text;
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
Settings.Default.SQLPass = cryptographyProvider.Encrypt(txtSQLPassword.Text, Runtime.EncryptionKey);
ReinitializeSqlUpdater();
if (Settings.Default.UseSQLServer)
ReinitializeSqlUpdater();
else if (!Settings.Default.UseSQLServer && sqlServerWasPreviouslyEnabled)
DisableSql();
Settings.Default.Save();
}
@@ -69,18 +74,15 @@ namespace mRemoteNG.UI.Forms.OptionsPages
private static void ReinitializeSqlUpdater()
{
Runtime.ConnectionsService.RemoteConnectionsSyncronizer?.Dispose();
Runtime.ConnectionsService.RemoteConnectionsSyncronizer = new RemoteConnectionsSyncronizer(new SqlConnectionsUpdateChecker());
Runtime.ConnectionsService.RemoteConnectionsSyncronizer.Enable();
}
if (Settings.Default.UseSQLServer)
{
Runtime.ConnectionsService.RemoteConnectionsSyncronizer = new RemoteConnectionsSyncronizer(new SqlConnectionsUpdateChecker());
Runtime.ConnectionsService.RemoteConnectionsSyncronizer.Enable();
}
else
{
Runtime.ConnectionsService.RemoteConnectionsSyncronizer?.Dispose();
Runtime.ConnectionsService.RemoteConnectionsSyncronizer = null;
Runtime.LoadConnections(true);
}
private void DisableSql()
{
Runtime.ConnectionsService.RemoteConnectionsSyncronizer?.Dispose();
Runtime.ConnectionsService.RemoteConnectionsSyncronizer = null;
Runtime.LoadConnections(true);
}
private void chkUseSQLServer_CheckedChanged(object sender, EventArgs e)

View File

@@ -19,6 +19,7 @@ namespace mRemoteNG.UI.Window
private readonly ConnectionContextMenu _contextMenu;
private readonly IConnectionInitiator _connectionInitiator = new ConnectionInitiator();
private ThemeManager _themeManager;
private readonly ConnectionTreeSearchTextFilter _connectionTreeSearchTextFilter = new ConnectionTreeSearchTextFilter();
public ConnectionInfo SelectedNode => olvConnections.SelectedNode;
@@ -42,6 +43,7 @@ namespace mRemoteNG.UI.Window
SetMenuEventHandlers();
SetConnectionTreeEventHandlers();
Settings.Default.PropertyChanged += (sender, args) => SetConnectionTreeEventHandlers();
olvConnections.ModelFilter = _connectionTreeSearchTextFilter;
}
@@ -242,9 +244,24 @@ namespace mRemoteNG.UI.Window
private void txtSearch_TextChanged(object sender, EventArgs e)
{
if (txtSearch.Text == "") return;
olvConnections.NodeSearcher?.SearchByName(txtSearch.Text);
JumpToNode(olvConnections.NodeSearcher?.CurrentMatch);
if (Settings.Default.UseFilterSearch)
{
if (txtSearch.Text == "" || txtSearch.Text == Language.strSearchPrompt)
{
olvConnections.UseFiltering = false;
olvConnections.ResetColumnFiltering();
return;
}
olvConnections.UseFiltering = true;
_connectionTreeSearchTextFilter.FilterText = txtSearch.Text;
olvConnections.ModelFilter = _connectionTreeSearchTextFilter;
}
else
{
if (txtSearch.Text == "") return;
olvConnections.NodeSearcher?.SearchByName(txtSearch.Text);
JumpToNode(olvConnections.NodeSearcher?.CurrentMatch);
}
}
private void JumpToNode(ConnectionInfo connectionInfo)

View File

@@ -671,6 +671,9 @@
<setting name="SaveConnectionsAfterEveryEdit" serializeAs="String">
<value>True</value>
</setting>
<setting name="UseFilterSearch" serializeAs="String">
<value>False</value>
</setting>
</mRemoteNG.Settings>
</userSettings>
<applicationSettings>

View File

@@ -381,6 +381,7 @@
<Compile Include="UI\Controls\ConnectionTree\ConnectionTree.Designer.cs">
<DependentUpon>ConnectionTree.cs</DependentUpon>
</Compile>
<Compile Include="UI\Controls\ConnectionTree\ConnectionTreeSearchTextFilter.cs" />
<Compile Include="UI\Controls\CredentialRecordComboBox.cs">
<SubType>Component</SubType>
</Compile>