[Hosts]Add setting to select the file encoding (#26495)

This commit is contained in:
Davide Giacometti
2023-06-06 17:11:37 +02:00
committed by GitHub
parent 177c58f494
commit 9960d2d536
10 changed files with 68 additions and 13 deletions

View File

@@ -168,7 +168,7 @@ namespace Hosts.Tests
var fileSystem = new CustomMockFileSystem();
var userSettings = new Mock<IUserSettings>();
userSettings.Setup(m => m.AdditionalLinesPosition).Returns(AdditionalLinesPosition.Top);
userSettings.Setup(m => m.AdditionalLinesPosition).Returns(HostsAdditionalLinesPosition.Top);
var service = new HostsService(fileSystem, userSettings.Object, _elevationHelper.Object);
fileSystem.AddFile(service.HostsFilePath, new MockFileData(content));
@@ -200,7 +200,7 @@ namespace Hosts.Tests
var fileSystem = new CustomMockFileSystem();
var userSettings = new Mock<IUserSettings>();
userSettings.Setup(m => m.AdditionalLinesPosition).Returns(AdditionalLinesPosition.Bottom);
userSettings.Setup(m => m.AdditionalLinesPosition).Returns(HostsAdditionalLinesPosition.Bottom);
var service = new HostsService(fileSystem, userSettings.Object, _elevationHelper.Object);
fileSystem.AddFile(service.HostsFilePath, new MockFileData(content));

View File

@@ -38,6 +38,8 @@ namespace Hosts.Helpers
public event EventHandler FileChanged;
public Encoding Encoding => _userSettings.Encoding == HostsEncoding.Utf8 ? new UTF8Encoding(false) : new UTF8Encoding(true);
public HostsService(
IFileSystem fileSystem,
IUserSettings userSettings,
@@ -72,7 +74,7 @@ namespace Hosts.Helpers
return (unparsedBuilder.ToString(), entries);
}
var lines = await _fileSystem.File.ReadAllLinesAsync(HostsFilePath);
var lines = await _fileSystem.File.ReadAllLinesAsync(HostsFilePath, Encoding);
for (var i = 0; i < lines.Length; i++)
{
@@ -153,11 +155,11 @@ namespace Hosts.Helpers
if (!string.IsNullOrWhiteSpace(additionalLines))
{
if (_userSettings.AdditionalLinesPosition == AdditionalLinesPosition.Top)
if (_userSettings.AdditionalLinesPosition == HostsAdditionalLinesPosition.Top)
{
lines.Insert(0, additionalLines);
}
else if (_userSettings.AdditionalLinesPosition == AdditionalLinesPosition.Bottom)
else if (_userSettings.AdditionalLinesPosition == HostsAdditionalLinesPosition.Bottom)
{
lines.Add(additionalLines);
}
@@ -174,7 +176,7 @@ namespace Hosts.Helpers
_backupDone = true;
}
await _fileSystem.File.WriteAllLinesAsync(HostsFilePath, lines);
await _fileSystem.File.WriteAllLinesAsync(HostsFilePath, lines, Encoding);
}
catch (Exception ex)
{

View File

@@ -13,7 +13,9 @@ namespace Hosts.Settings
public bool LoopbackDuplicates { get; }
public AdditionalLinesPosition AdditionalLinesPosition { get; }
public HostsAdditionalLinesPosition AdditionalLinesPosition { get; }
public HostsEncoding Encoding { get; }
event EventHandler LoopbackDuplicatesChanged;
}

View File

@@ -38,14 +38,17 @@ namespace Hosts.Settings
}
}
public AdditionalLinesPosition AdditionalLinesPosition { get; private set; }
public HostsAdditionalLinesPosition AdditionalLinesPosition { get; private set; }
public HostsEncoding Encoding { get; set; }
public UserSettings()
{
_settingsUtils = new SettingsUtils();
ShowStartupWarning = true;
LoopbackDuplicates = false;
AdditionalLinesPosition = AdditionalLinesPosition.Top;
AdditionalLinesPosition = HostsAdditionalLinesPosition.Top;
Encoding = HostsEncoding.Utf8;
LoadSettingsFromJson();
@@ -79,6 +82,7 @@ namespace Hosts.Settings
{
ShowStartupWarning = settings.Properties.ShowStartupWarning;
AdditionalLinesPosition = settings.Properties.AdditionalLinesPosition;
Encoding = settings.Properties.Encoding;
LoopbackDuplicates = settings.Properties.LoopbackDuplicates;
}