Skip to content

Commit

Permalink
Merge pull request #9082 from ivangrek/settings/cleanup_3
Browse files Browse the repository at this point in the history
Fix settings saving for "Detailed" section by selected setting source
  • Loading branch information
ivangrek committed May 3, 2021
2 parents d95b080 + 6d111c0 commit 5e0f6ed
Show file tree
Hide file tree
Showing 18 changed files with 399 additions and 137 deletions.
17 changes: 8 additions & 9 deletions GitCommands/Settings/AppSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
using System.Text.RegularExpressions;
using System.Windows.Forms;
using GitCommands.Settings;
using GitCommands.Utils;
using GitExtUtils;
using GitExtUtils.GitUI.Theming;
using GitUIPluginInterfaces;
Expand Down Expand Up @@ -890,20 +889,20 @@ public static PullAction FormPullAction

public static string SmtpServer
{
get => GetString("SmtpServer", "smtp.gmail.com");
set => SetString("SmtpServer", value);
get => SettingsContainer.Detailed().SmtpServer;
set => SettingsContainer.Detailed().SmtpServer = value;
}

public static int SmtpPort
{
get => GetInt("SmtpPort", 465);
set => SetInt("SmtpPort", value);
get => SettingsContainer.Detailed().SmtpPort;
set => SettingsContainer.Detailed().SmtpPort = value;
}

public static bool SmtpUseSsl
{
get => GetBool("SmtpUseSsl", true);
set => SetBool("SmtpUseSsl", value);
get => SettingsContainer.Detailed().SmtpUseSsl;
set => SettingsContainer.Detailed().SmtpUseSsl = value;
}

public static bool AutoStash
Expand Down Expand Up @@ -1082,8 +1081,8 @@ public static bool ShowSuperprojectRemoteBranches

public static string Dictionary
{
get => SettingsContainer.Dictionary;
set => SettingsContainer.Dictionary = value;
get => SettingsContainer.Detached().Dictionary;
set => SettingsContainer.Detached().Dictionary = value;
}

public static bool ShowGitCommandLine
Expand Down
63 changes: 63 additions & 0 deletions GitCommands/Settings/BuildServerSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using GitUIPluginInterfaces;
using GitUIPluginInterfaces.Settings;

namespace GitCommands.Settings
{
internal sealed class BuildServerSettings : IBuildServerSettings
{
private const string BuildServerGroupName = "BuildServer";

private const string? TypeDefault = null;
private const bool EnableIntegrationDefault = false;
private const bool ShowBuildResultPageDefault = true;

private readonly ISettingsSource _settingsSource;

public BuildServerSettings(ISettingsSource settingsSource)
{
_settingsSource = settingsSource;
}

public string? Type
{
get => _settingsSource.GetString($"{BuildServerGroupName}.{nameof(Type)}", TypeDefault);
set
{
if (Type == value)
{
return;
}

_settingsSource.SetString($"{BuildServerGroupName}.{nameof(Type)}", value);
}
}

public bool EnableIntegration
{
get => _settingsSource.GetBool($"{BuildServerGroupName}.{nameof(EnableIntegration)}", EnableIntegrationDefault);
set
{
if (EnableIntegration == value)
{
return;
}

_settingsSource.SetBool($"{BuildServerGroupName}.{nameof(EnableIntegration)}", value);
}
}

public bool ShowBuildResultPage
{
get => _settingsSource.GetBool($"{BuildServerGroupName}.{nameof(ShowBuildResultPage)}", ShowBuildResultPageDefault);
set
{
if (ShowBuildResultPage == value)
{
return;
}

_settingsSource.SetBool($"{BuildServerGroupName}.{nameof(ShowBuildResultPage)}", value);
}
}
}
}
46 changes: 46 additions & 0 deletions GitCommands/Settings/DetachedServerSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using GitUIPluginInterfaces;
using GitUIPluginInterfaces.Settings;

namespace GitCommands.Settings
{
internal sealed class DetachedSettings : IDetachedSettings
{
private const string DictionaryDefault = "en-US";
private const bool NoFastForwardMergeDefault = false;

private readonly ISettingsSource _settingsSource;

public DetachedSettings(ISettingsSource settingsSource)
{
_settingsSource = settingsSource;
}

public string Dictionary
{
get => _settingsSource.GetString(nameof(Dictionary).ToLower(), DictionaryDefault);
set
{
if (Dictionary == value)
{
return;
}

_settingsSource.SetString(nameof(Dictionary).ToLower(), value);
}
}

public bool NoFastForwardMerge
{
get => _settingsSource.GetBool(nameof(NoFastForwardMerge), NoFastForwardMergeDefault);
set
{
if (NoFastForwardMerge == value)
{
return;
}

_settingsSource.SetBool(nameof(NoFastForwardMerge), value);
}
}
}
}
108 changes: 108 additions & 0 deletions GitCommands/Settings/DetailedSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
using GitUIPluginInterfaces;
using GitUIPluginInterfaces.Settings;

namespace GitCommands.Settings
{
internal sealed class DetailedSettings : IDetailedSettings
{
private const string DetailedGroupName = "Detailed";

private const string SmtpServerDefault = "smtp.gmail.com";
private const int SmtpPortDefault = 465;
private const bool SmtpUseSslDefault = true;
private const bool GetRemoteBranchesDirectlyFromRemoteDefault = false;
private const bool AddMergeLogMessagesDefault = false;
private const int MergeLogMessagesCountDefault = 20;

private readonly ISettingsSource _settingsSource;

public DetailedSettings(ISettingsSource settingsSource)
{
_settingsSource = settingsSource;
}

public string SmtpServer
{
get => _settingsSource.GetString(nameof(SmtpServer), SmtpServerDefault);
set
{
if (SmtpServer == value)
{
return;
}

_settingsSource.SetString(nameof(SmtpServer), value);
}
}

public int SmtpPort
{
get => _settingsSource.GetInt(nameof(SmtpPort), SmtpPortDefault);
set
{
if (SmtpPort == value)
{
return;
}

_settingsSource.SetInt(nameof(SmtpPort), value);
}
}

public bool SmtpUseSsl
{
get => _settingsSource.GetBool(nameof(SmtpUseSsl), SmtpUseSslDefault);
set
{
if (SmtpUseSsl == value)
{
return;
}

_settingsSource.SetBool(nameof(SmtpUseSsl), value);
}
}

public bool GetRemoteBranchesDirectlyFromRemote
{
get => _settingsSource.GetBool($"{DetailedGroupName}.{nameof(GetRemoteBranchesDirectlyFromRemote)}", GetRemoteBranchesDirectlyFromRemoteDefault);
set
{
if (GetRemoteBranchesDirectlyFromRemote == value)
{
return;
}

_settingsSource.SetBool($"{DetailedGroupName}.{nameof(GetRemoteBranchesDirectlyFromRemote)}", value);
}
}

public bool AddMergeLogMessages
{
get => _settingsSource.GetBool($"{DetailedGroupName}.{nameof(AddMergeLogMessages)}", AddMergeLogMessagesDefault);
set
{
if (AddMergeLogMessages == value)
{
return;
}

_settingsSource.SetBool($"{DetailedGroupName}.{nameof(AddMergeLogMessages)}", value);
}
}

public int MergeLogMessagesCount
{
get => _settingsSource.GetInt($"{DetailedGroupName}.{nameof(MergeLogMessagesCount)}", MergeLogMessagesCountDefault);
set
{
if (MergeLogMessagesCount == value)
{
return;
}

_settingsSource.SetInt($"{DetailedGroupName}.{nameof(MergeLogMessagesCount)}", value);
}
}
}
}
49 changes: 0 additions & 49 deletions GitCommands/Settings/RepoDistSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ public class RepoDistSettings : SettingsContainer<RepoDistSettings, GitExtSettin
public RepoDistSettings(RepoDistSettings? lowerPriority, GitExtSettingsCache settingsCache, SettingLevel settingLevel)
: base(lowerPriority, settingsCache)
{
BuildServer = new BuildServer(this);
Detailed = new DetailedGroup(this);
SettingLevel = settingLevel;
}

Expand Down Expand Up @@ -98,52 +96,5 @@ public override void SetValue<T>(string name, T value, Func<T, string?> encode)
LowerPriority!.SetValue(name, value, encode);
}
}

public readonly BuildServer BuildServer;
public readonly DetailedGroup Detailed;

public bool NoFastForwardMerge
{
get => GetBool("NoFastForwardMerge", false);
set => SetBool("NoFastForwardMerge", value);
}

public string Dictionary
{
get => GetString("dictionary", "en-US");
set => SetString("dictionary", value);
}
}

public class BuildServer : SettingsPath
{
public readonly ISetting<string> Type;
public readonly ISetting<bool> EnableIntegration;
public readonly ISetting<bool> ShowBuildResultPage;

public BuildServer(RepoDistSettings container)
: base(container, "BuildServer")
{
Type = Setting.Create(this, nameof(Type), null);
EnableIntegration = Setting.Create(this, nameof(EnableIntegration), false);
ShowBuildResultPage = Setting.Create(this, nameof(ShowBuildResultPage), true);
}

public SettingsPath TypeSettings => new SettingsPath(this, Type.Value!);
}

public class DetailedGroup : SettingsPath
{
public readonly ISetting<bool> GetRemoteBranchesDirectlyFromRemote;
public readonly ISetting<bool> AddMergeLogMessages;
public readonly ISetting<int> MergeLogMessagesCount;

public DetailedGroup(RepoDistSettings container)
: base(container, "Detailed")
{
GetRemoteBranchesDirectlyFromRemote = Setting.Create(this, nameof(GetRemoteBranchesDirectlyFromRemote), false);
AddMergeLogMessages = Setting.Create(this, nameof(AddMergeLogMessages), false);
MergeLogMessagesCount = Setting.Create(this, nameof(MergeLogMessagesCount), 20);
}
}
}
20 changes: 20 additions & 0 deletions GitCommands/Settings/SettingsSourceExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using GitUIPluginInterfaces;
using GitUIPluginInterfaces.Settings;

namespace GitCommands.Settings
{
public static class SettingsSourceExtension
{
public static ISettingsSource ByPath(this ISettingsSource settingsSource, string pathName)
=> new SettingsPath(settingsSource, pathName);

public static IDetailedSettings Detailed(this ISettingsSource settingsSource)
=> new DetailedSettings(settingsSource);

public static IBuildServerSettings BuildServer(this ISettingsSource settingsSource)
=> new BuildServerSettings(settingsSource);

public static IDetachedSettings Detached(this ISettingsSource settingsSource)
=> new DetachedSettings(settingsSource);
}
}
11 changes: 7 additions & 4 deletions GitUI/BuildServerIntegration/BuildServerWatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@
using GitCommands;
using GitCommands.Config;
using GitCommands.Remotes;
using GitCommands.Settings;
using GitUI.CommandsDialogs.SettingsDialog.Pages;
using GitUI.HelperDialogs;
using GitUI.UserControls;
using GitUI.UserControls.RevisionGrid;
using GitUI.UserControls.RevisionGrid.Columns;
using GitUIPluginInterfaces;
using GitUIPluginInterfaces.BuildServerIntegration;
using GitUIPluginInterfaces.Settings;
using Microsoft.VisualStudio.Threading;

namespace GitUI.BuildServerIntegration
Expand Down Expand Up @@ -294,14 +296,15 @@ private void OnBuildInfoUpdate(BuildInfo buildInfo)
{
await TaskScheduler.Default;

var buildServerSettings = _module().EffectiveSettings.BuildServer;
IBuildServerSettings buildServerSettings = _module().GetEffectiveSettings()
.BuildServer();

if (!buildServerSettings.EnableIntegration.Value)
if (!buildServerSettings.EnableIntegration)
{
return null;
}

var buildServerType = buildServerSettings.Type.Value;
var buildServerType = buildServerSettings.Type;
if (string.IsNullOrEmpty(buildServerType))
{
return null;
Expand All @@ -323,7 +326,7 @@ private void OnBuildInfoUpdate(BuildInfo buildInfo)

var buildServerAdapter = export.Value;

buildServerAdapter.Initialize(this, buildServerSettings.TypeSettings,
buildServerAdapter.Initialize(this, _module().GetEffectiveSettings().ByPath(buildServerSettings.Type!),
() =>
{
// To run the `StartSettingsDialog()` in the UI Thread
Expand Down
Loading

0 comments on commit 5e0f6ed

Please sign in to comment.