Add EnvironmentTags property to connection info

Co-authored-by: Kvarkas <3611964+Kvarkas@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-10-18 22:50:02 +00:00
parent 54492bedfb
commit 49bd76f197
13 changed files with 99 additions and 2 deletions

View File

@@ -168,6 +168,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
? connectionCsv[headers.IndexOf("UserField")]
: "";
connectionRecord.EnvironmentTags =
headers.Contains("EnvironmentTags")
? connectionCsv[headers.IndexOf("EnvironmentTags")]
: "";
connectionRecord.ExtApp = headers.Contains("ExtApp")
? connectionCsv[headers.IndexOf("ExtApp")] : "";
@@ -777,6 +782,12 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
connectionRecord.Inheritance.UserField = value;
}
if (headers.Contains("InheritEnvironmentTags"))
{
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritEnvironmentTags")], out bool value))
connectionRecord.Inheritance.EnvironmentTags = value;
}
if (headers.Contains("InheritFavorite"))
{
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritFavorite")], out bool value))

View File

@@ -61,7 +61,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
sb.Append("Hostname;Port;VmId;Protocol;SSHTunnelConnectionName;OpeningCommand;SSHOptions;PuttySession;ConnectToConsole;UseCredSsp;UseRestrictedAdmin;UseRCG;UseVmId;UseEnhancedMode;RenderingEngine;RDPAuthenticationLevel;" +
"LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;DisableFullWindowDrag;DisableMenuAnimations;DisableCursorShadow;DisableCursorBlinking;" +
"CacheBitmaps;RedirectDiskDrives;RedirectDiskDrivesCustomRedirectPorts;RedirectPrinters;RedirectClipboard;RedirectSmartCards;RedirectSound;RedirectKeys;" +
"PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;Favorite;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;" +
"PreExtApp;PostExtApp;MacAddress;UserField;EnvironmentTags;ExtApp;Favorite;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;" +
"VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;" +
"RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;RDGatewayExternalCredentialProvider;RDGatewayUserViaAPI;RedirectAudioCapture;RdpVersion;RDPStartProgram;RDPStartProgramWorkDir;UserViaAPI;EC2InstanceId;EC2Region;ExternalCredentialProvider;ExternalAddressProvider;");
@@ -72,7 +72,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
"InheritRedirectClipboard;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;" +
"InheritUseConsoleSession;InheritUseCredSsp;InheritUseRestrictedAdmin;InheritUseRCG;InheritUseVmId;InheritUseEnhancedMode;InheritVmId;InheritRenderingEngine;InheritUsername;" +
"InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;" +
"InheritFavorite;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;" +
"InheritEnvironmentTags;InheritFavorite;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;" +
"InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;" +
"InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;" +
"InheritRDGatewayPassword;InheritRDGatewayDomain;InheritRDGatewayExternalCredentialProvider;InheritRDGatewayUserViaAPI;InheritRDPAlertIdleTimeout;InheritRDPMinutesToIdleTimeout;InheritSoundQuality;InheritUserViaAPI;" +
@@ -161,6 +161,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
.Append(FormatForCsv(con.PostExtApp))
.Append(FormatForCsv(con.MacAddress))
.Append(FormatForCsv(con.UserField))
.Append(FormatForCsv(con.EnvironmentTags))
.Append(FormatForCsv(con.ExtApp))
.Append(FormatForCsv(con.Favorite))
.Append(FormatForCsv(con.VNCCompression))
@@ -245,6 +246,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
.Append(FormatForCsv(con.Inheritance.PostExtApp))
.Append(FormatForCsv(con.Inheritance.MacAddress))
.Append(FormatForCsv(con.Inheritance.UserField))
.Append(FormatForCsv(con.Inheritance.EnvironmentTags))
.Append(FormatForCsv(con.Inheritance.Favorite))
.Append(FormatForCsv(con.Inheritance.ExtApp))
.Append(FormatForCsv(con.Inheritance.VNCCompression))

View File

@@ -145,6 +145,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
connectionInfo.UseRCG = MiscTools.GetBooleanValue(dataRow["UseRCG"]);
connectionInfo.UseRestrictedAdmin = MiscTools.GetBooleanValue(dataRow["UseRestrictedAdmin"]);
connectionInfo.UserField = (string)dataRow["UserField"];
connectionInfo.EnvironmentTags = dataRow.Table.Columns.Contains("EnvironmentTags") ? (string)dataRow["EnvironmentTags"] : "";
connectionInfo.Username = (string)dataRow["Username"];
connectionInfo.UseVmId = MiscTools.GetBooleanValue(dataRow["UseVmId"]);
connectionInfo.VmId = (string)dataRow["VmId"];
@@ -224,6 +225,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
connectionInfo.Inheritance.UseRCG = MiscTools.GetBooleanValue(dataRow["InheritUseRCG"]);
connectionInfo.Inheritance.UseRestrictedAdmin = MiscTools.GetBooleanValue(dataRow["InheritUseRestrictedAdmin"]);
connectionInfo.Inheritance.UserField = MiscTools.GetBooleanValue(dataRow["InheritUserField"]);
if (dataRow.Table.Columns.Contains("InheritEnvironmentTags"))
connectionInfo.Inheritance.EnvironmentTags = MiscTools.GetBooleanValue(dataRow["InheritEnvironmentTags"]);
connectionInfo.Inheritance.Username = MiscTools.GetBooleanValue(dataRow["InheritUsername"]);
connectionInfo.Inheritance.UseVmId = MiscTools.GetBooleanValue(dataRow["InheritUseVmId"]);
connectionInfo.Inheritance.VmId = MiscTools.GetBooleanValue(dataRow["InheritVmId"]);

View File

@@ -177,6 +177,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
dataTable.Columns.Add("InheritUseRestrictedAdmin", typeof(bool));
dataTable.Columns.Add("InheritUseVmId", typeof(bool));
dataTable.Columns.Add("InheritUserField", typeof(bool));
dataTable.Columns.Add("InheritEnvironmentTags", typeof(bool));
dataTable.Columns.Add("InheritUserViaAPI", typeof(bool));
dataTable.Columns.Add("InheritUsername", typeof(bool));
dataTable.Columns.Add("InheritVNCAuthMode", typeof(bool));
@@ -240,6 +241,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
dataTable.Columns.Add("UseRestrictedAdmin", typeof(bool));
dataTable.Columns.Add("UseVmId", typeof(bool));
dataTable.Columns.Add("UserField", typeof(string));
dataTable.Columns.Add("EnvironmentTags", typeof(string));
dataTable.Columns.Add("UserViaAPI", typeof(string));
dataTable.Columns.Add("Username", typeof(string));
dataTable.Columns.Add("VNCAuthMode", typeof(string));
@@ -612,6 +614,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
dataRow["UseRestrictedAdmin"] = connectionInfo.UseRestrictedAdmin;
dataRow["UseVmId"] = connectionInfo.UseVmId;
dataRow["UserField"] = connectionInfo.UserField;
dataRow["EnvironmentTags"] = connectionInfo.EnvironmentTags;
dataRow["Username"] = _saveFilter.SaveUsername ? connectionInfo.Username : "";
dataRow["VNCAuthMode"] = connectionInfo.VNCAuthMode;
dataRow["VNCColors"] = connectionInfo.VNCColors;
@@ -690,6 +693,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
dataRow["InheritUseRestrictedAdmin"] = connectionInfo.Inheritance.UseRestrictedAdmin;
dataRow["InheritUseVmId"] = connectionInfo.Inheritance.UseVmId;
dataRow["InheritUserField"] = connectionInfo.Inheritance.UserField;
dataRow["InheritEnvironmentTags"] = connectionInfo.Inheritance.EnvironmentTags;
dataRow["InheritUserViaAPI"] = connectionInfo.Inheritance.UserViaAPI;
dataRow["InheritUsername"] = connectionInfo.Inheritance.Username;
dataRow["InheritVNCAuthMode"] = connectionInfo.Inheritance.VNCAuthMode;
@@ -767,6 +771,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql
dataRow["InheritUseRCG"] = false;
dataRow["InheritUseRestrictedAdmin"] = false;
dataRow["InheritUserField"] = false;
dataRow["InheritEnvironmentTags"] = false;
dataRow["InheritUserViaAPI"] = false;
dataRow["InheritUsername"] = false;
dataRow["InheritVNCAuthMode"] = false;

View File

@@ -105,6 +105,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
element.Add(new XAttribute("PostExtApp", connectionInfo.PostExtApp));
element.Add(new XAttribute("MacAddress", connectionInfo.MacAddress));
element.Add(new XAttribute("UserField", connectionInfo.UserField));
element.Add(new XAttribute("EnvironmentTags", connectionInfo.EnvironmentTags));
element.Add(new XAttribute("Favorite", connectionInfo.Favorite));
element.Add(new XAttribute("ExtApp", connectionInfo.ExtApp));
element.Add(new XAttribute("StartProgram", connectionInfo.RDPStartProgram));
@@ -262,6 +263,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
element.Add(new XAttribute("InheritMacAddress", inheritance.MacAddress.ToString().ToLowerInvariant()));
if (inheritance.UserField)
element.Add(new XAttribute("InheritUserField", inheritance.UserField.ToString().ToLowerInvariant()));
if (inheritance.EnvironmentTags)
element.Add(new XAttribute("InheritEnvironmentTags", inheritance.EnvironmentTags.ToString().ToLowerInvariant()));
if (inheritance.Favorite)
element.Add(new XAttribute("InheritFavorite", inheritance.Favorite.ToString().ToLowerInvariant()));
if (inheritance.ExtApp)

View File

@@ -539,6 +539,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
connectionInfo.RedirectDiskDrives = xmlnode.GetAttributeAsEnum<RDPDiskDrives>("RedirectDiskDrives");
connectionInfo.RedirectDiskDrivesCustom = xmlnode.GetAttributeAsString("RedirectDiskDrivesCustom");
connectionInfo.Inheritance.RedirectDiskDrivesCustom = xmlnode.GetAttributeAsBool("InheritRedirectDiskDrivesCustom");
connectionInfo.EnvironmentTags = xmlnode.GetAttributeAsString("EnvironmentTags");
connectionInfo.Inheritance.EnvironmentTags = xmlnode.GetAttributeAsBool("InheritEnvironmentTags");
break;
case >= 0.5:

View File

@@ -101,6 +101,7 @@ namespace mRemoteNG.Connection
private string _macAddress;
private string _openingCommand;
private string _userField;
private string _environmentTags = "";
private string _rdpStartProgram;
private string _rdpStartProgramWorkDir;
private bool _favorite;
@@ -938,6 +939,15 @@ namespace mRemoteNG.Connection
set => SetField(ref _userField, value, "UserField");
}
[LocalizedAttributes.LocalizedCategory(nameof(Language.Miscellaneous), 7),
LocalizedAttributes.LocalizedDisplayName(nameof(Language.EnvironmentTags)),
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionEnvironmentTags))]
public virtual string EnvironmentTags
{
get => GetPropertyValue("EnvironmentTags", _environmentTags);
set => SetField(ref _environmentTags, value, "EnvironmentTags");
}
[LocalizedAttributes.LocalizedCategory(nameof(Language.Miscellaneous), 7),
LocalizedAttributes.LocalizedDisplayName(nameof(Language.Favorite)),
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionFavorite)),

View File

@@ -379,6 +379,7 @@ namespace mRemoteNG.Connection
PostExtApp = Settings.Default.ConDefaultPostExtApp;
MacAddress = Settings.Default.ConDefaultMacAddress;
UserField = Settings.Default.ConDefaultUserField;
EnvironmentTags = Settings.Default.ConDefaultEnvironmentTags;
Favorite = Settings.Default.ConDefaultFavorite;
RDPStartProgram = Settings.Default.ConDefaultRDPStartProgram;
RDPStartProgramWorkDir = Settings.Default.ConDefaultRDPStartProgramWorkDir;

View File

@@ -457,6 +457,12 @@ namespace mRemoteNG.Connection
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
public bool UserField { get; set; }
[LocalizedAttributes.LocalizedCategory(nameof(Language.Miscellaneous), 8),
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.EnvironmentTags)),
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionEnvironmentTags)),
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
public bool EnvironmentTags { get; set; }
[LocalizedAttributes.LocalizedCategory(nameof(Language.Miscellaneous), 8),
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.Favorite)),
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionFavorite)),

View File

@@ -6820,6 +6820,24 @@ namespace mRemoteNG.Resources.Language {
}
}
/// <summary>
/// Looks up a localized string similar to Environment Tags.
/// </summary>
internal static string EnvironmentTags {
get {
return ResourceManager.GetString("EnvironmentTags", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Tags to categorize the environment (e.g., #PROD, #UAT, #TEST, #BETA, #FINDEPARTMENT).
/// </summary>
internal static string PropertyDescriptionEnvironmentTags {
get {
return ResourceManager.GetString("PropertyDescriptionEnvironmentTags", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Username.
/// </summary>

View File

@@ -1272,6 +1272,12 @@ If you run into such an error, please create a new connection file!</value>
<data name="UserField" xml:space="preserve">
<value>User Field</value>
</data>
<data name="EnvironmentTags" xml:space="preserve">
<value>Environment Tags</value>
</data>
<data name="PropertyDescriptionEnvironmentTags" xml:space="preserve">
<value>Tags to categorize the environment (e.g., #PROD, #UAT, #TEST, #BETA, #FINDEPARTMENT)</value>
</data>
<data name="ProxyAddress" xml:space="preserve">
<value>Proxy Address</value>
</data>

View File

@@ -1058,6 +1058,30 @@ namespace mRemoteNG.Properties {
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ConDefaultEnvironmentTags {
get {
return ((string)(this["ConDefaultEnvironmentTags"]));
}
set {
this["ConDefaultEnvironmentTags"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool InhDefaultEnvironmentTags {
get {
return ((bool)(this["InhDefaultEnvironmentTags"]));
}
set {
this["InhDefaultEnvironmentTags"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]

View File

@@ -257,6 +257,12 @@
<Setting Name="InhDefaultUserField" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConDefaultEnvironmentTags" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InhDefaultEnvironmentTags" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConDefaultExtApp" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>