diff options
author | Dimitrij <kvarkas@gmail.com> | 2022-07-30 20:48:35 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-30 20:48:35 +0300 |
commit | 82a4fdd662b36af0a4486f04c9a921c6658cc04e (patch) | |
tree | e0f62a4203306b13ca867b3d7c1cfbc2662858dd | |
parent | eac4d966d9673cf9e05526d464683f58d4486529 (diff) | |
parent | 8ae75ec5d2012a91457c3d210a2a7e97724feda6 (diff) |
Merge pull request #2268 from s-laffont/postgresqldevelop
Postgresql
23 files changed, 343 insertions, 51 deletions
diff --git a/ExternalConnectors/ExternalConnectors.csproj b/ExternalConnectors/ExternalConnectors.csproj index 7e9f5b98..9b4b3236 100644 --- a/ExternalConnectors/ExternalConnectors.csproj +++ b/ExternalConnectors/ExternalConnectors.csproj @@ -11,8 +11,8 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="AWSSDK.Core" Version="3.7.12.9" /> - <PackageReference Include="AWSSDK.EC2" Version="3.7.78.1" /> + <PackageReference Include="AWSSDK.Core" Version="3.7.12.15" /> + <PackageReference Include="AWSSDK.EC2" Version="3.7.79.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> </ItemGroup> diff --git a/mRemoteNG/Config/DataProviders/SqlDataProvider.cs b/mRemoteNG/Config/DataProviders/SqlDataProvider.cs index 96f0b43b..820e5f31 100644 --- a/mRemoteNG/Config/DataProviders/SqlDataProvider.cs +++ b/mRemoteNG/Config/DataProviders/SqlDataProvider.cs @@ -5,6 +5,7 @@ using mRemoteNG.App; using mRemoteNG.Properties; using MySql.Data.MySqlClient; using System.Data.SqlClient; +using Npgsql; namespace mRemoteNG.Config.DataProviders { @@ -95,6 +96,28 @@ namespace mRemoteNG.Config.DataProviders } } } + else if (DatabaseConnector.GetType() == typeof(PostgreSQLDatabaseConnector)) + { + var dbConnection = (NpgsqlConnection)DatabaseConnector.DbConnection(); + using (NpgsqlTransaction transaction = dbConnection.BeginTransaction(System.Data.IsolationLevel.Serializable)) + { + using (NpgsqlCommand sqlCommand = new NpgsqlCommand()) + { + sqlCommand.Connection = dbConnection; + sqlCommand.Transaction = transaction; + sqlCommand.CommandText = "SELECT * FROM tblCons"; + using (NpgsqlDataAdapter dataAdapter = new NpgsqlDataAdapter(sqlCommand)) + { + //dataAdapter.UpdateBatchSize = 1000; + using (NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(dataAdapter)) + { + dataAdapter.Update(dataTable); + transaction.Commit(); + } + } + } + } + } } public void OpenConnection() diff --git a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs index ee20e559..d10633bc 100644 --- a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs +++ b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs @@ -22,6 +22,8 @@ namespace mRemoteNG.Config.DatabaseConnectors { switch (type) { + case "postgresql": + return new PostgreSQLDatabaseConnector(server, database, username, password); case "mysql": return new MySqlDatabaseConnector(server, database, username, password); case "mssql": diff --git a/mRemoteNG/Config/DatabaseConnectors/PostgreSQLDatabaseConnector.cs b/mRemoteNG/Config/DatabaseConnectors/PostgreSQLDatabaseConnector.cs new file mode 100644 index 00000000..0a064f6c --- /dev/null +++ b/mRemoteNG/Config/DatabaseConnectors/PostgreSQLDatabaseConnector.cs @@ -0,0 +1,84 @@ +using System.Data; +using System.Data.Common; +using System.Threading.Tasks; +using Npgsql; + + +namespace mRemoteNG.Config.DatabaseConnectors +{ + public class PostgreSQLDatabaseConnector : IDatabaseConnector + { + private DbConnection _dbConnection { get; set; } = default(NpgsqlConnection); + private string _dbConnectionString = ""; + private readonly string _dbHost; + private readonly string _dbPort; + private readonly string _dbName; + private readonly string _dbUsername; + private readonly string _dbPassword; + + public DbConnection DbConnection() + { + return _dbConnection; + } + + public DbCommand DbCommand(string dbCommand) + { + return new NpgsqlCommand(dbCommand, (NpgsqlConnection)_dbConnection); + } + + public bool IsConnected => (_dbConnection.State == ConnectionState.Open); + + public PostgreSQLDatabaseConnector(string host, string database, string username, string password) + { + string[] hostParts = host.Split(new char[] { ':' }, 2); + _dbHost = hostParts[0]; + _dbPort = (hostParts.Length == 2) ? hostParts[1] : "5432"; + _dbName = database; + _dbUsername = username; + _dbPassword = password; + Initialize(); + } + + private void Initialize() + { + BuildSqlConnectionString(); + _dbConnection = new NpgsqlConnection(_dbConnectionString); + } + + private void BuildSqlConnectionString() + { + _dbConnectionString = $"Server={_dbHost};User Id={_dbUsername};Database={_dbName};Port={_dbPort};Password={_dbPassword}"; + } + + public void Connect() + { + _dbConnection.Open(); + } + + public async Task ConnectAsync() + { + await _dbConnection.OpenAsync(); + } + + public void Disconnect() + { + _dbConnection.Close(); + } + + public void AssociateItemToThisConnector(DbCommand dbCommand) + { + dbCommand.Connection = (NpgsqlConnection)_dbConnection; + } + + public void Dispose() + { + Dispose(true); + } + private void Dispose(bool itIsSafeToFreeManagedObjects) + { + if (!itIsSafeToFreeManagedObjects) return; + _dbConnection.Close(); + _dbConnection.Dispose(); + } + } +}
\ No newline at end of file diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/SqlDatabaseMetaDataRetriever.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/SqlDatabaseMetaDataRetriever.cs index 1252fb28..7cb2c40f 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/SqlDatabaseMetaDataRetriever.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/SqlDatabaseMetaDataRetriever.cs @@ -34,7 +34,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql { Name = dbDataReader["Name"] as string ?? "", Protected = dbDataReader["Protected"] as string ?? "", - Export = (bool)dbDataReader["Export"], + Export = Convert.ToBoolean(dbDataReader["Export"]), ConfVersion = new Version(Convert.ToString(dbDataReader["confVersion"], CultureInfo.InvariantCulture)) }; diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs index f0e01ed2..83ca03fa 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs @@ -151,6 +151,9 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml ? new XAttribute("RDGatewayDomain", connectionInfo.RDGatewayDomain) : new XAttribute("RDGatewayDomain", "")); + element.Add(new XAttribute("UseRCG", connectionInfo.UseRCG)); + element.Add(new XAttribute("UseRestrictedAdmin", connectionInfo.UseRestrictedAdmin)); + element.Add(new XAttribute("UserViaAPI", connectionInfo.UserViaAPI)); element.Add(new XAttribute("EC2InstanceId", connectionInfo.EC2InstanceId)); element.Add(new XAttribute("EC2Region", connectionInfo.EC2Region)); @@ -298,6 +301,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml element.Add(new XAttribute("InheritUseEnhancedMode", inheritance.UseEnhancedMode.ToString().ToLowerInvariant())); if (inheritance.UserViaAPI) element.Add(new XAttribute("InheritUserViaAPI", inheritance.UserViaAPI.ToString().ToLowerInvariant())); + if (inheritance.UseRCG) + element.Add(new XAttribute("InheritUseRCG", inheritance.UseRCG.ToString().ToLowerInvariant())); + if (inheritance.UseRestrictedAdmin) + element.Add(new XAttribute("InheritUseRestrictedAdmin", inheritance.UseRestrictedAdmin.ToString().ToLowerInvariant())); } } } diff --git a/mRemoteNG/Config/Settings/SettingsSaver.cs b/mRemoteNG/Config/Settings/SettingsSaver.cs index 26937498..ff31d23f 100644 --- a/mRemoteNG/Config/Settings/SettingsSaver.cs +++ b/mRemoteNG/Config/Settings/SettingsSaver.cs @@ -47,6 +47,21 @@ namespace mRemoteNG.Config.Settings SaveQuickConnectToolbarLocation(quickConnectToolStrip); SaveMultiSshToolbarLocation(multiSshToolStrip); + Properties.App.Default.Save(); + Properties.AppUI.Default.Save(); + Properties.OptionsAdvancedPage.Default.Save(); + Properties.OptionsAppearancePage.Default.Save(); + Properties.OptionsBackupPage.Default.Save(); + Properties.OptionsConnectionsPage.Default.Save(); + Properties.OptionsCredentialsPage.Default.Save(); + Properties.OptionsDBsPage.Default.Save(); + Properties.OptionsNotificationsPage.Default.Save(); + Properties.OptionsSecurityPage.Default.Save(); + Properties.OptionsStartupExitPage.Default.Save(); + Properties.OptionsTabsPanelsPage.Default.Save(); + Properties.OptionsThemePage.Default.Save(); + Properties.OptionsUpdatesPage.Default.Save(); + Properties.Settings.Default.Save(); SaveDockPanelLayout(); diff --git a/mRemoteNG/Language/Language.Designer.cs b/mRemoteNG/Language/Language.Designer.cs index 6b753d3c..3d7dad16 100644 --- a/mRemoteNG/Language/Language.Designer.cs +++ b/mRemoteNG/Language/Language.Designer.cs @@ -1042,6 +1042,17 @@ namespace mRemoteNG.Resources.Language { } /// <summary> + /// Looks up a localized string similar to Are you sure you want to reset the panels to their default layout?. + /// </summary> + internal static string FileMenuWillBeHiddenNow + { + get + { + return ResourceManager.GetString("FileMenuWillBeHiddenNow", resourceCulture); + } + } + + /// <summary> /// Looks up a localized string similar to Connect. /// </summary> internal static string Connect { @@ -3151,6 +3162,17 @@ namespace mRemoteNG.Resources.Language { } /// <summary> + /// Looks up a localized string similar to FileMenu. + /// </summary> + internal static string FileMenu + { + get + { + return ResourceManager.GetString("FileMenu", resourceCulture); + } + } + + /// <summary> /// Looks up a localized string similar to No update available. /// </summary> internal static string NoUpdateAvailable { diff --git a/mRemoteNG/Language/Language.cs-CZ.resx b/mRemoteNG/Language/Language.cs-CZ.resx index 41f1d16e..283c8879 100644 --- a/mRemoteNG/Language/Language.cs-CZ.resx +++ b/mRemoteNG/Language/Language.cs-CZ.resx @@ -163,7 +163,7 @@ <value>Poměr stran</value> </data> <data name="AutoSaveEvery" xml:space="preserve"> - <value>Automaticky ukládat každých:</value> + <value>Automatické uložení v minutách (0 znamená vypnuto):</value> </data> <data name="AvailableVersion" xml:space="preserve"> <value>Poslední verze</value> @@ -265,7 +265,7 @@ <value>Pro spojení použít proxy server</value> </data> <data name="Username" xml:space="preserve"> - <value>Login</value> + <value>Přihlašovací jméno</value> </data> <data name="WaitForExit" xml:space="preserve"> <value>Čekat na logout</value> @@ -376,7 +376,7 @@ <value>Protokol událostí připojen</value> </data> <data name="ConnectionEventConnectedDetail" xml:space="preserve"> - <value>Připojení k "{0}" přes "{1}" bylo provedeno uživatelem "{2}" (Popis: "{3}"; Login: "{4}")</value> + <value>Připojení k "{0}" přes "{1}" bylo provedeno uživatelem "{2}" (Popis: "{3}"; Přihlašovací jméno: "{4}")</value> </data> <data name="ConnectionFailed" xml:space="preserve"> <value>Připojení selhalo!</value> @@ -410,7 +410,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value> <value>Nepovedlo se uložit soubor seznamu spojení "{0}"!</value> </data> <data name="ConnectNoCredentials" xml:space="preserve"> - <value>Připojit bez loginu</value> + <value>Připojit bez přihlašovacích údajů</value> </data> <data name="ConnectToConsoleSession" xml:space="preserve"> <value>Připojit k otevřenému sezení konzole</value> @@ -455,7 +455,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value> <value>Přejete si pokračovat bez hesla?</value> </data> <data name="EmptyUsernamePasswordDomainFields" xml:space="preserve"> - <value>Pro prázdná políčka Login, Heslo nebo Doména použít:</value> + <value>Pro prázdná políčka Přihlašovací jméno, Heslo nebo Doména použít:</value> </data> <data name="EncryptCompleteConnectionFile" xml:space="preserve"> <value>Zakódovat celý soubor seznamu připojení</value> @@ -593,7 +593,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value> <value>Spojení HTTP selhalo!</value> </data> <data name="HttpConnectionFailed" xml:space="preserve"> - <value>Nezdařilo se vytvoření noebého spojení HTTP!</value> + <value>Nezdařilo se vytvoření nového spojení HTTP!</value> </data> <data name="HttpDocumentTileChangeFailed" xml:space="preserve"> <value>Změna nadpisu dokumentu HTTP selhala!</value> @@ -740,7 +740,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value> <value>Klonovat záložku tabu</value> </data> <data name="Exit" xml:space="preserve"> - <value>Exit</value> + <value>Ukončit</value> </data> <data name="ExternalToolsToolbar" xml:space="preserve"> <value>Nástrojová lišta externích nástrojů</value> @@ -1002,7 +1002,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen <value>Pokud se využívá v externím nástroji, zadejte sem MAC adresu vzdáleného hostitele.</value> </data> <data name="PropertyDescriptionName" xml:space="preserve"> - <value>Toto jméno bude zobrazeno ve stromě seznamu spojení a jejich složek.</value> + <value>Toto jméno bude zobrazeno v seznamu spojení a jejich složek.</value> </data> <data name="PropertyDescriptionPanel" xml:space="preserve"> <value>Zadaný název určí panel, ve kterém se má spojení otevřít.</value> @@ -1149,7 +1149,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen <value>Adresa MAC</value> </data> <data name="Name" xml:space="preserve"> - <value>Jméno</value> + <value>Název</value> </data> <data name="Panel" xml:space="preserve"> <value>Panel</value> @@ -1179,7 +1179,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen <value>Přihl. údaje brány</value> </data> <data name="RdpGatewayUsername" xml:space="preserve"> - <value>Login brány</value> + <value>Přihlašovací jméno brány</value> </data> <data name="DiskDrives" xml:space="preserve"> <value>Připojit lok. disky</value> @@ -1227,7 +1227,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen <value>Typ proxy</value> </data> <data name="ProxyUsername" xml:space="preserve"> - <value>Login k proxy</value> + <value>Přihlašovací jméno k proxy</value> </data> <data name="ProtocolEventDisconnected" xml:space="preserve"> <value>Událost prokolu Odpojeno. @@ -1497,7 +1497,7 @@ Zpráva: <value>V názvu okna zobrazovat úplnou cestu k souboru seznamu spojení</value> </data> <data name="ShowLogonInfoOnTabs" xml:space="preserve"> - <value>Zobrazovat v názvu záložek (tabech) informace o loginu</value> + <value>Zobrazovat v názvu záložek (tabech) informace o uživateli</value> </data> <data name="ShowProtocolOnTabs" xml:space="preserve"> <value>Zobrazovat v názvu záložek (tabech) protokol (typ spojení)</value> @@ -1648,7 +1648,7 @@ mRemoteNG se nyní ukončí a zahájí instalaci.</value> <value>Použít čipovou kartu</value> </data> <data name="UseSQLServer" xml:space="preserve"> - <value>Použít SQL Server ke stažení && uloženho seznamu spojení</value> + <value>Použít SQL Server ke stažení && uloženého seznamu spojení</value> </data> <data name="Version" xml:space="preserve"> <value>Verze</value> @@ -1804,4 +1804,81 @@ mRemoteNG se nyní ukončí a zahájí instalaci.</value> + + <data name="AssignedCredential" xml:space="preserve"> <value>Přiřazené přihlašovací informace</value> - </data></root>
\ No newline at end of file + </data> + <data name="StartMinimized" xml:space="preserve"> + <value>Po spuštění minimalizovat</value> + </data><data name="CreateEmptyPanelOnStartUp" xml:space="preserve"> + <value>Otevřít prázdný panel při startu aplikace</value> + </data> + <data name="IdentifyQuickConnectTabs" xml:space="preserve"> + <value>Zavřít záložku dvojklikem na ní</value> + </data> + <data name="CloseToSysTray" xml:space="preserve"> + <value>Zavřít do oznamovací oblasti</value> + </data> + <data name="OptionsThemeNewThemeCaption" xml:space="preserve"> + <value>Nový název šablony</value> + </data> + <data name="OptionsThemeNewThemeText" xml:space="preserve"> + <value>Zadejte nový název šablony</value> + </data> + <data name="OptionsThemeNewThemeError" xml:space="preserve"> + <value>Nepodařilo se vytvořit šablonu, buď již existuje šablona se stejným názvem nebo vámi zadaný název obsahuje speciální znaky.</value> + </data> + <data name="SetHostnameLikeDisplayNameNewConnection" xml:space="preserve"> + <value>Při vytváření nového připojení nastaví stejný název zobrazení jako je název počítače</value> + </data> + <data name="RdpReconnectionCount" xml:space="preserve"> + <value>Počet opětovných připojení k RDP</value> + </data> + <data name="RdpConnectionTimeout" xml:space="preserve"> + <value>Časová prodleva připojení k RDP</value> + </data> + <data name="WhenClosingConnections" xml:space="preserve"> + <value>Když se ukončí připojení:</value> + </data> + <data name="WarnMeWhenClosingConnections" xml:space="preserve"> + <value>Upozornit mě na ukončení připojení</value> + </data> + <data name="WarnMeOnlyWhenClosingMultipleConnections" xml:space="preserve"> + <value>Upozornit mě pouze při ukončení několika připojení</value> + </data> + <data name="WarnMeOnlyWhenExitingProgram" xml:space="preserve"> + <value>Upozornit mě pouze při ukončení programu</value> + </data> + <data name="DoNotWarnMeWhenClosingConnections" xml:space="preserve"> + <value>Neupozorňovat na ukončení připojení</value> + </data> + <data name="SaveConnectionsAfterEveryEdit" xml:space="preserve"> + <value>Uložit připojení při každé úpravě</value> + </data> + <data name="StartFullScreen" xml:space="preserve"> + <value>Při spuštění zobrazit na celou obrazovku</value> + </data> + <data name="FilterSearchMatchesInConnectionTree" xml:space="preserve"> + <value>Filtrovat shody vyhledávání v seznamu připojení</value> + </data> + <data name="ReconnectToPreviouslyOpenedSessionsOnStartup" xml:space="preserve"> + <value>Obnovit dříve spuštěná připojení po startu</value> + </data> + <data name="SaveConnectionsOnExit" xml:space="preserve"> + <value>Uložit připojení při ukončení programu</value> + </data> + <data name="PlaceSearchBarAboveConnectionTree" xml:space="preserve"> + <value>Umístit vyhledávací pole nad seznam připojení</value> + </data> + <data name="TrackActiveConnectionInTheConnectionTree" xml:space="preserve"> + <value>Označovat aktivní připojení v seznamu</value> + </data> + <data name="DoNotTrimUsername" xml:space="preserve"> + <value>Nezkracovat uživatelské jméno</value> + </data> + <data name="AutoSaveInMinutes" xml:space="preserve"> + <value>Kliknutím na již otevřené připojení v seznamu otevře jeho záložku</value> + </data> + <data name="LoadBalanceInfoUseUtf8" xml:space="preserve"> + <value>Použít kódování UTF8 pro vlastnost RDP "Load Balance Info"</value> + </data> + <data name="TestConnection" xml:space="preserve"> + <value>Test spojení</value> + </data></root> diff --git a/mRemoteNG/Language/Language.resx b/mRemoteNG/Language/Language.resx index 639fdd7f..a11591d5 100644 --- a/mRemoteNG/Language/Language.resx +++ b/mRemoteNG/Language/Language.resx @@ -2280,4 +2280,10 @@ Nightly Channel includes Alphas, Betas & Release Candidates.</value> <data name="FiltermRemoteRemoteDesktopManagerCSV" xml:space="preserve"> <value>Remote Desktop Manager Files (*.csv)</value> </data> + <data name="FileMenu" xml:space="preserve"> + <value>File menu</value> + </data> + <data name="FileMenuWillBeHiddenNow" xml:space="preserve"> + <value>File menu is hidded now. Press Alt button to peek</value> + </data> </root>
\ No newline at end of file diff --git a/mRemoteNG/Properties/Settings.Designer.cs b/mRemoteNG/Properties/Settings.Designer.cs index 75f6bcae..7a76e94d 100644 --- a/mRemoteNG/Properties/Settings.Designer.cs +++ b/mRemoteNG/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.2.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -1405,7 +1405,7 @@ namespace mRemoteNG.Properties { [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("True")]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool ConDefaultUseRestrictedAdmin {
get {
return ((bool)(this["ConDefaultUseRestrictedAdmin"]));
@@ -1429,7 +1429,7 @@ namespace mRemoteNG.Properties { [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("True")]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool ConDefaultUseRCG {
get {
return ((bool)(this["ConDefaultUseRCG"]));
diff --git a/mRemoteNG/Properties/Settings.settings b/mRemoteNG/Properties/Settings.settings index f75b9d31..93ba8b49 100644 --- a/mRemoteNG/Properties/Settings.settings +++ b/mRemoteNG/Properties/Settings.settings @@ -348,13 +348,13 @@ <Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConDefaultUseRestrictedAdmin" Type="System.Boolean" Scope="User">
- <Value Profile="(Default)">True</Value>
+ <Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InhDefaultUseRCG" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConDefaultUseRCG" Type="System.Boolean" Scope="User">
- <Value Profile="(Default)">True</Value>
+ <Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConDefaultUseVmId" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
diff --git a/mRemoteNG/Schemas/mremoteng_confcons_v2_7.xsd b/mRemoteNG/Schemas/mremoteng_confcons_v2_7.xsd index 7305756b..aef6fcb6 100644 --- a/mRemoteNG/Schemas/mremoteng_confcons_v2_7.xsd +++ b/mRemoteNG/Schemas/mremoteng_confcons_v2_7.xsd @@ -175,5 +175,10 @@ <xs:attribute name="UserViaAPI" type="xs:string" use="optional" /> <xs:attribute name="EC2InstanceId" type="xs:string" use="optional" /> <xs:attribute name="EC2Region" type="xs:string" use="optional" /> + <xs:attribute name="UseRCG" type="xs:boolean" use="optional" /> + <xs:attribute name="UseRestrictedAdmin" type="xs:boolean" use="optional" /> + <xs:attribute name="InheritUseRCG" type="xs:boolean" use="optional" /> + <xs:attribute name="InheritUseRestrictedAdmin" type="xs:boolean" use="optional" /> + </xs:complexType> </xs:schema>
\ No newline at end of file diff --git a/mRemoteNG/Tools/MiscTools.cs b/mRemoteNG/Tools/MiscTools.cs index bd1ba250..17b3e9f4 100644 --- a/mRemoteNG/Tools/MiscTools.cs +++ b/mRemoteNG/Tools/MiscTools.cs @@ -68,7 +68,9 @@ namespace mRemoteNG.Tools { switch (Properties.OptionsDBsPage.Default.SQLServerType) { - case "mysql": + case "postgresql": + return Dt.ToString("yyyy-MM-dd HH:mm:ss.fff"); + case "mysql": return Dt.ToString("yyyy/MM/dd HH:mm:ss"); case "mssql": default: @@ -80,7 +82,9 @@ namespace mRemoteNG.Tools { switch (Properties.OptionsDBsPage.Default.SQLServerType) { - case "mysql": + case "postgresql": + return typeof(DateTime); + case "mysql": return typeof(MySqlDateTime); case "mssql": default: @@ -95,7 +99,8 @@ namespace mRemoteNG.Tools case "mysql": return new MySqlDateTime(DateTime.Now); case "mssql": - default: + case "postgresql": + default: return DateTime.Now; } } diff --git a/mRemoteNG/UI/Forms/FrmAbout.Designer.cs b/mRemoteNG/UI/Forms/FrmAbout.Designer.cs index 698e8275..813a1790 100644 --- a/mRemoteNG/UI/Forms/FrmAbout.Designer.cs +++ b/mRemoteNG/UI/Forms/FrmAbout.Designer.cs @@ -1,11 +1,11 @@ namespace mRemoteNG.UI.Forms { - public partial class FrmAbout + public partial class frmAbout { #region Windows Form Designer generated code private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAbout)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAbout)); this.pbLogo = new System.Windows.Forms.PictureBox(); this.pnlBottom = new System.Windows.Forms.Panel(); this.llCredits = new System.Windows.Forms.LinkLabel(); @@ -133,7 +133,7 @@ this.lblCopyright.Text = "Copyright"; this.lblCopyright.UseCompatibleTextRendering = true; // - // FrmAbout + // frmAbout // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; @@ -147,7 +147,7 @@ this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(20000, 10000); this.MinimizeBox = false; - this.Name = "FrmAbout"; + this.Name = "frmAbout"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "About"; this.TopMost = true; diff --git a/mRemoteNG/UI/Forms/FrmAbout.cs b/mRemoteNG/UI/Forms/FrmAbout.cs index 6e02b9a2..e5738f12 100644 --- a/mRemoteNG/UI/Forms/FrmAbout.cs +++ b/mRemoteNG/UI/Forms/FrmAbout.cs @@ -9,11 +9,11 @@ using System.Runtime.InteropServices; namespace mRemoteNG.UI.Forms { - public partial class FrmAbout : Form + public partial class frmAbout : Form { - public static FrmAbout Instance { get; set; } = new FrmAbout(); + public static frmAbout Instance { get; set; } = new frmAbout(); - private FrmAbout() + private frmAbout() { InitializeComponent(); Icon = Resources.ImageConverter.GetImageAsIcon(Properties.Resources.UIAboutBox_16x); diff --git a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.Designer.cs b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.Designer.cs index 123b1d76..73345587 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.Designer.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.Designer.cs @@ -247,7 +247,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtSQLType.FormattingEnabled = true; this.txtSQLType.Items.AddRange(new object[] { "mssql", - "mysql"}); + "mysql", + "postgresql"}); this.txtSQLType.Location = new System.Drawing.Point(163, 3); this.txtSQLType.Name = "txtSQLType"; this.txtSQLType.Size = new System.Drawing.Size(235, 21); diff --git a/mRemoteNG/UI/Forms/frmMain.Designer.cs b/mRemoteNG/UI/Forms/frmMain.Designer.cs index 3b6580ed..9df0696d 100644 --- a/mRemoteNG/UI/Forms/frmMain.Designer.cs +++ b/mRemoteNG/UI/Forms/frmMain.Designer.cs @@ -1,4 +1,6 @@ -namespace mRemoteNG.UI.Forms +using System.Windows.Forms; + +namespace mRemoteNG.UI.Forms { public partial class FrmMain : System.Windows.Forms.Form { @@ -39,7 +41,6 @@ this.viewMenu = new mRemoteNG.UI.Menu.ViewMenu(); this.toolsMenu = new mRemoteNG.UI.Menu.ToolsMenu(); this.helpMenu = new mRemoteNG.UI.Menu.HelpMenu(); - this.modeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.mMenSep3 = new System.Windows.Forms.ToolStripSeparator(); this.tsContainer = new System.Windows.Forms.ToolStripContainer(); this._quickConnectToolStrip = new mRemoteNG.UI.Controls.QuickConnectToolStrip(); @@ -47,7 +48,6 @@ this._externalToolsToolStrip = new mRemoteNG.UI.Controls.ExternalToolsToolStrip(); this.tmrAutoSave = new System.Windows.Forms.Timer(this.components); this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components); - this.modeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tsModeAdmin = new System.Windows.Forms.ToolStripMenuItem(); this.tsModeUser = new System.Windows.Forms.ToolStripMenuItem(); this.msMain.SuspendLayout(); @@ -77,8 +77,7 @@ this.fileMenu, this.viewMenu, this.toolsMenu, - this.helpMenu, - this.modeToolStripMenuItem}); + this.helpMenu}); this.msMain.Location = new System.Drawing.Point(3, 0); this.msMain.Name = "msMain"; this.msMain.Padding = new System.Windows.Forms.Padding(0, 0, 1, 0); @@ -125,11 +124,6 @@ this.helpMenu.Text = "&Help"; this.helpMenu.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal; // - // modeToolStripMenuItem - // - this.modeToolStripMenuItem.Name = "modeToolStripMenuItem"; - this.modeToolStripMenuItem.Size = new System.Drawing.Size(12, 25); - // // mMenSep3 // this.mMenSep3.Name = "mMenSep3"; @@ -237,9 +231,22 @@ this.tsContainer.ResumeLayout(false); this.tsContainer.PerformLayout(); this.ResumeLayout(false); - } - internal WeifenLuo.WinFormsUI.Docking.DockPanel pnlDock; + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if (keyData == (Keys.Alt | Keys.Menu)) + { + if(!msMain.Visible) + { + msMain.Visible = true; + } + } + + return base.ProcessCmdKey(ref msg, keyData); + } + + internal WeifenLuo.WinFormsUI.Docking.DockPanel pnlDock; internal System.Windows.Forms.MenuStrip msMain; internal System.Windows.Forms.ToolStripContainer tsContainer; internal System.Windows.Forms.Timer tmrAutoSave; @@ -254,7 +261,6 @@ internal mRemoteNG.UI.Controls.MultiSshToolStrip _multiSshToolStrip; //theming support private WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender vsToolStripExtender; - private System.Windows.Forms.ToolStripMenuItem modeToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem tsModeAdmin; private System.Windows.Forms.ToolStripMenuItem tsModeUser; } diff --git a/mRemoteNG/UI/Forms/frmMain.cs b/mRemoteNG/UI/Forms/frmMain.cs index 4e1277d2..aa1cc45e 100644 --- a/mRemoteNG/UI/Forms/frmMain.cs +++ b/mRemoteNG/UI/Forms/frmMain.cs @@ -727,9 +727,24 @@ namespace mRemoteNG.UI.Forms Windows.ErrorsForm.Show(pnlDock, DockState.DockBottomAutoHide); viewMenu._mMenViewErrorsAndInfos.Checked = true; + ShowFileMenu(); + pnlDock.Visible = true; } + public void ShowFileMenu() + { + msMain.Visible = true; + viewMenu._mMenViewFileMenu.Checked = true; + } + + public void HideFileMenu() + { + msMain.Visible = false; + viewMenu._mMenViewFileMenu.Checked = false; + MessageBox.Show(Language.FileMenuWillBeHiddenNow, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + public void SetLayout() { pnlDock.Visible = false; diff --git a/mRemoteNG/UI/Menu/msMain/HelpMenu.cs b/mRemoteNG/UI/Menu/msMain/HelpMenu.cs index 5c78cdeb..85f2f263 100644 --- a/mRemoteNG/UI/Menu/msMain/HelpMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/HelpMenu.cs @@ -150,7 +150,7 @@ namespace mRemoteNG.UI.Menu private void mMenInfoDonate_Click(object sender, EventArgs e) => Process.Start("explorer.exe", GeneralAppInfo.UrlDonate); - private void mMenInfoAbout_Click(object sender, EventArgs e) => FrmAbout.Instance.Show(); + private void mMenInfoAbout_Click(object sender, EventArgs e) => frmAbout.Instance.Show(); #endregion } diff --git a/mRemoteNG/UI/Menu/msMain/ViewMenu.cs b/mRemoteNG/UI/Menu/msMain/ViewMenu.cs index 533aee41..248b4863 100644 --- a/mRemoteNG/UI/Menu/msMain/ViewMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/ViewMenu.cs @@ -1,12 +1,11 @@ using System; using System.Windows.Forms; using mRemoteNG.App; -using mRemoteNG.Connection; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; using mRemoteNG.UI.Forms; using mRemoteNG.UI.Panels; using mRemoteNG.UI.Window; -using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { @@ -16,6 +15,7 @@ namespace mRemoteNG.UI.Menu private ToolStripMenuItem _mMenReconnectAll; private ToolStripSeparator _mMenViewSep1; public ToolStripMenuItem _mMenViewErrorsAndInfos; + public ToolStripMenuItem _mMenViewFileMenu; private ToolStripMenuItem _mMenViewAddConnectionPanel; private ToolStripSeparator _mMenViewSep2; private ToolStripMenuItem _mMenViewFullscreen; @@ -45,6 +45,7 @@ namespace mRemoteNG.UI.Menu _mMenViewAddConnectionPanel = new ToolStripMenuItem(); _mMenViewConnectionPanels = new ToolStripMenuItem(); _mMenViewSep1 = new ToolStripSeparator(); + _mMenViewFileMenu = new ToolStripMenuItem(); _mMenViewErrorsAndInfos = new ToolStripMenuItem(); _mMenViewResetLayout = new ToolStripMenuItem(); _mMenViewLockToolbars = new ToolStripMenuItem(); @@ -60,6 +61,7 @@ namespace mRemoteNG.UI.Menu // DropDownItems.AddRange(new ToolStripItem[] { + _mMenViewFileMenu, _mMenViewErrorsAndInfos, _mMenViewQuickConnectToolbar, _mMenViewExtAppsToolbar, @@ -106,6 +108,15 @@ namespace mRemoteNG.UI.Menu _mMenViewSep1.Name = "mMenViewSep1"; _mMenViewSep1.Size = new System.Drawing.Size(225, 6); // + // mMenViewFile + // + _mMenViewFileMenu.Checked = true; + _mMenViewFileMenu.CheckState = CheckState.Checked; + _mMenViewFileMenu.Name = "mMenViewFile"; + _mMenViewFileMenu.Size = new System.Drawing.Size(228, 22); + _mMenViewFileMenu.Text = Language.FileMenu; + _mMenViewFileMenu.Click += mMenViewFileMenu_Click; + // // mMenViewErrorsAndInfos // _mMenViewErrorsAndInfos.Checked = true; @@ -224,6 +235,18 @@ namespace mRemoteNG.UI.Menu } } + private void mMenViewFileMenu_Click(object sender, EventArgs e) + { + if (_mMenViewFileMenu.Checked == false) + { + MainForm.ShowFileMenu(); + } + else + { + MainForm.HideFileMenu(); + } + } + private void mMenViewResetLayout_Click(object sender, EventArgs e) { var msgBoxResult = MessageBox.Show(Language.ConfirmResetLayout, string.Empty, MessageBoxButtons.YesNo, MessageBoxIcon.Question); diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index 37edcc16..38992579 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -79,8 +79,9 @@ <PackageReference Include="log4net" Version="2.0.14" /> <PackageReference Include="Microsoft-WindowsAPICodePack-Shell" Version="1.1.4" /> <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.1264.42" /> - <PackageReference Include="MySql.Data" Version="8.0.29" /> + <PackageReference Include="MySql.Data" Version="8.0.30" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> + <PackageReference Include="Npgsql" Version="7.0.0-preview.6" /> <PackageReference Include="ObjectListView.Official" Version="2.9.1" /> <PackageReference Include="OpenCover" Version="4.7.1221" /> <PackageReference Include="Portable.BouncyCastle" Version="1.9.0" /> diff --git a/mRemoteNGSpecs/mRemoteNGSpecs.csproj b/mRemoteNGSpecs/mRemoteNGSpecs.csproj index 15c5cac1..f6c7ed0b 100644 --- a/mRemoteNGSpecs/mRemoteNGSpecs.csproj +++ b/mRemoteNGSpecs/mRemoteNGSpecs.csproj @@ -18,7 +18,7 @@ <ItemGroup> <PackageReference Include="Cucumber.Messages" Version="16.0.1" /> - <PackageReference Include="Google.Protobuf" Version="3.21.2" /> + <PackageReference Include="Google.Protobuf" Version="3.21.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="NUnit.Runners" Version="3.12.0" /> |