Skip to content

Commit 883a771

Browse files
Implement GetStringListValue and rework get list values from IniFile class (CnCNet#749)
* Implement `GetListValue` and rework get list values from IniFile class * Rename `GetListValue` to `GetStringListValue` * Update ClientCore/Extensions/IniFileExtensions.cs Co-authored-by: Kerbiter <crabiter@vivaldi.net> * Rework `GetStringListValue` * Refactor `Updater.cs` Co-authored-by: Kerbiter <crabiter@vivaldi.net> --------- Co-authored-by: Kerbiter <crabiter@vivaldi.net>
1 parent a2eb9cd commit 883a771

File tree

12 files changed

+46
-36
lines changed

12 files changed

+46
-36
lines changed

ClientCore/ClientConfiguration.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
using System;
22
using System.Collections.Generic;
3-
using Rampastring.Tools;
43
using System.IO;
54
using System.Linq;
65
using System.Runtime.InteropServices;
7-
using ClientCore.I18N;
8-
using ClientCore.Extensions;
6+
97
using ClientCore.Enums;
8+
using ClientCore.Extensions;
9+
using ClientCore.I18N;
10+
11+
using Rampastring.Tools;
1012

1113
namespace ClientCore
1214
{
@@ -212,8 +214,8 @@ public void RefreshSettings()
212214

213215
public int MaximumRenderHeight => clientDefinitionsIni.GetIntValue(SETTINGS, "MaximumRenderHeight", 800);
214216

215-
public string[] RecommendedResolutions => clientDefinitionsIni.GetStringValue(SETTINGS, "RecommendedResolutions",
216-
$"{MinimumRenderWidth}x{MinimumRenderHeight},{MaximumRenderWidth}x{MaximumRenderHeight}").Split(',');
217+
public string[] RecommendedResolutions => clientDefinitionsIni.GetStringListValue(SETTINGS, "RecommendedResolutions",
218+
$"{MinimumRenderWidth}x{MinimumRenderHeight},{MaximumRenderWidth}x{MaximumRenderHeight}");
217219

218220
public string WindowTitle => clientDefinitionsIni.GetStringValue(SETTINGS, "WindowTitle", string.Empty)
219221
.L10N("INI:ClientDefinitions:WindowTitle");
@@ -260,7 +262,7 @@ public void RefreshSettings()
260262

261263
public string StatisticsLogFileName => clientDefinitionsIni.GetStringValue(SETTINGS, "StatisticsLogFileName", "DTA.LOG");
262264

263-
public string[] TrustedDomains => clientDefinitionsIni.GetStringValue(SETTINGS, "TrustedDomains", string.Empty).Split(',');
265+
public string[] TrustedDomains => clientDefinitionsIni.GetStringListValue(SETTINGS, "TrustedDomains", string.Empty);
264266

265267
public string[] AlwaysTrustedDomains = {"cncnet.org", "gamesurge.net", "dronebl.org", "discord.com", "discord.gg", "youtube.com", "youtu.be"};
266268

@@ -324,7 +326,7 @@ private List<TranslationGameFile> ParseTranslationGameFiles()
324326
continue;
325327

326328
string value = clientDefinitionsIni.GetStringValue(TRANSLATIONS, key, string.Empty);
327-
string[] parts = value.Split(',');
329+
string[] parts = clientDefinitionsIni.GetStringListValue(TRANSLATIONS, key, string.Empty);
328330

329331
// fail explicitly if the syntax is wrong
330332
if (parts.Length is < 2 or > 3
@@ -372,7 +374,7 @@ private List<TranslationGameFile> ParseTranslationGameFiles()
372374

373375
public string GetGameExecutableName()
374376
{
375-
string[] exeNames = clientDefinitionsIni.GetStringValue(SETTINGS, "GameExecutableNames", "Game.exe").Split(',');
377+
string[] exeNames = clientDefinitionsIni.GetStringListValue(SETTINGS, "GameExecutableNames", "Game.exe");
376378

377379
return exeNames[0];
378380
}
@@ -405,12 +407,12 @@ public string GetGameExecutableName()
405407
/// <summary>
406408
/// List of files that are not distributed but required to play.
407409
/// </summary>
408-
public string[] RequiredFiles => clientDefinitionsIni.GetStringValue(SETTINGS, "RequiredFiles", String.Empty).Split(',');
410+
public string[] RequiredFiles => clientDefinitionsIni.GetStringListValue(SETTINGS, "RequiredFiles", String.Empty);
409411

410412
/// <summary>
411413
/// List of files that can interfere with the mod functioning.
412414
/// </summary>
413-
public string[] ForbiddenFiles => clientDefinitionsIni.GetStringValue(SETTINGS, "ForbiddenFiles", String.Empty).Split(',');
415+
public string[] ForbiddenFiles => clientDefinitionsIni.GetStringListValue(SETTINGS, "ForbiddenFiles", String.Empty);
414416

415417
/// <summary>
416418
/// The main map file extension that is read by the client.

ClientCore/Extensions/IniFileExtensions.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Runtime.CompilerServices;
4+
25
using Rampastring.Tools;
36

47
namespace ClientCore.Extensions
@@ -22,5 +25,18 @@ public static void RemoveAllKeys(this IniSection iniSection)
2225
foreach (KeyValuePair<string, string> iniSectionKey in keys)
2326
iniSection.RemoveKey(iniSectionKey.Key);
2427
}
28+
29+
public static string[] GetStringListValue(this IniFile iniFile, string section, string key, string defaultValue, char[] separators = null)
30+
{
31+
separators ??= [','];
32+
IniSection iniSection = iniFile.GetSection(section);
33+
34+
return (iniSection?.GetStringValue(key, defaultValue) ?? defaultValue)
35+
.Split(separators)
36+
.ToList()
37+
.Select(s => s.Trim())
38+
.Where(s => !string.IsNullOrEmpty(s))
39+
.ToArray();
40+
}
2541
}
2642
}

ClientCore/INIProcessing/IniPreprocessInfoStore.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System;
33
using System.Collections.Generic;
44
using System.IO;
5+
using ClientCore.Extensions;
56

67
namespace ClientCore.INIProcessing
78
{
@@ -50,8 +51,7 @@ public void Load()
5051
var keys = iniFile.GetSectionKeys(ProcessedINIsSection);
5152
foreach (string key in keys)
5253
{
53-
string[] values = iniFile.GetStringValue(ProcessedINIsSection, key, string.Empty).Split(
54-
new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
54+
string[] values = iniFile.GetStringListValue(ProcessedINIsSection, key, string.Empty);
5555

5656
if (values.Length != 3)
5757
{

ClientUpdater/CustomComponent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private async Task DoDownloadComponentAsync(CancellationToken cancellationToken)
212212
}
213213

214214
var version = new IniFile(versionFileName);
215-
string[] tmp = version.GetStringValue("AddOns", ININame, string.Empty).Split(',');
215+
string[] tmp = version.GetStringListValue("AddOns", ININame, string.Empty);
216216
Updater.GetArchiveInfo(version, LocalPath, out string archiveID, out int archiveSize);
217217
UpdaterFileInfo info = Updater.CreateFileInfo(finalFileName, tmp[0], Conversions.IntFromString(tmp[1], 0), archiveID, archiveSize);
218218

ClientUpdater/Updater.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ namespace ClientUpdater;
3232
using System.Threading.Tasks;
3333

3434
using ClientUpdater.Compression;
35+
using ClientCore.Extensions;
3536

3637
using Rampastring.Tools;
3738

@@ -257,11 +258,11 @@ public static void CheckLocalFileVersions()
257258

258259
if (sectionKeys != null)
259260
{
261+
char[] separator = new char[] { ',' };
260262
foreach (string str in sectionKeys)
261263
{
262-
char[] separator = new char[] { ',' };
263-
string[] strArray = file.GetStringValue("FileVersions", str, string.Empty).Split(separator);
264-
string[] strArrayArch = file.GetStringValue("ArchivedFiles", str, string.Empty).Split(separator);
264+
string[] strArray = file.GetStringListValue("FileVersions", str, string.Empty, separator);
265+
string[] strArrayArch = file.GetStringListValue("ArchivedFiles", str, string.Empty, separator);
265266
bool archiveAvailable = strArrayArch is { Length: >= 2 };
266267

267268
if (strArray.Length >= 2)

DXMainClient/DXGUI/Generic/LoadingScreen.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,7 @@ protected override void GetINIAttributes(IniFile iniFile)
8282
{
8383
base.GetINIAttributes(iniFile);
8484

85-
randomTextures = iniFile.GetStringValue(Name, "RandomBackgroundTextures", string.Empty)
86-
.Split(',')
87-
.Select(s => s.Trim())
88-
.Where(s => !string.IsNullOrEmpty(s))
89-
.ToList();
85+
randomTextures = iniFile.GetStringListValue(Name, "RandomBackgroundTextures", string.Empty).ToList();
9086

9187
if (randomTextures.Count == 0)
9288
return;

DXMainClient/DXGUI/Multiplayer/GameLobby/GameLobbyBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,7 @@ private void GetRandomSelectors(List<string> selectorNames, List<int[]> selector
10471047
List<int> randomSides = new List<int>();
10481048
try
10491049
{
1050-
string[] tmp = GameOptionsIni.GetStringValue("RandomSelectors", randomSelector, string.Empty).Split(',');
1050+
string[] tmp = GameOptionsIni.GetStringListValue("RandomSelectors", randomSelector, string.Empty);
10511051
randomSides = Array.ConvertAll(tmp, int.Parse).Distinct().ToList();
10521052
randomSides.RemoveAll(x => (x >= SideCount || x < 0));
10531053
}

DXMainClient/DXGUI/Multiplayer/GameLobby/GameLobbyDropDown.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static string Localize(XNAControl control, string attributeName, string defaultV
6161
{
6262
case "Items":
6363
string[] items = value.Split(',');
64-
string[] itemLabels = iniFile.GetStringValue(Name, "ItemLabels", "").Split(',');
64+
string[] itemLabels = iniFile.GetStringListValue(Name, "ItemLabels", "");
6565
for (int i = 0; i < items.Length; i++)
6666
{
6767
bool hasLabel = itemLabels.Length > i && !string.IsNullOrEmpty(itemLabels[i]);

DXMainClient/Domain/Multiplayer/GameMode.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,19 @@ public void Initialize()
104104
forcedOptionsSection = forcedOptionsIni.GetStringValue(Name, "ForcedOptions", string.Empty);
105105
mapCodeININame = forcedOptionsIni.GetStringValue(Name, "MapCodeININame", Name + ".ini");
106106

107-
string[] disallowedSides = forcedOptionsIni
108-
.GetStringValue(Name, "DisallowedPlayerSides", string.Empty)
109-
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
107+
string[] disallowedSides = forcedOptionsIni.GetStringListValue(Name, "DisallowedPlayerSides", string.Empty);
110108

111109
foreach (string sideIndex in disallowedSides)
112110
DisallowedPlayerSides.Add(int.Parse(sideIndex));
113111

114112
disallowedSides = forcedOptionsIni
115-
.GetStringValue(Name, "DisallowedHumanPlayerSides", string.Empty)
116-
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
113+
.GetStringListValue(Name, "DisallowedHumanPlayerSides", string.Empty);
117114

118115
foreach (string sideIndex in disallowedSides)
119116
DisallowedHumanPlayerSides.Add(int.Parse(sideIndex));
120117

121118
disallowedSides = forcedOptionsIni
122-
.GetStringValue(Name, "DisallowedComputerPlayerSides", string.Empty)
123-
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
119+
.GetStringListValue(Name, "DisallowedComputerPlayerSides", string.Empty);
124120

125121
foreach (string sideIndex in disallowedSides)
126122
DisallowedComputerPlayerSides.Add(int.Parse(sideIndex));

DXMainClient/Domain/Multiplayer/Map.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -586,14 +586,12 @@ public bool SetInfoFromCustomMap()
586586
if (IsCoop)
587587
{
588588
CoopInfo = new CoopMapInfo();
589-
string[] disallowedSides = iniFile.GetStringValue("Basic", "DisallowedPlayerSides", string.Empty).Split(
590-
new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
589+
string[] disallowedSides = iniFile.GetStringListValue("Basic", "DisallowedPlayerSides", string.Empty);
591590

592591
foreach (string sideIndex in disallowedSides)
593592
CoopInfo.DisallowedPlayerSides.Add(int.Parse(sideIndex, CultureInfo.InvariantCulture));
594593

595-
string[] disallowedColors = iniFile.GetStringValue("Basic", "DisallowedPlayerColors", string.Empty).Split(
596-
new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
594+
string[] disallowedColors = iniFile.GetStringListValue("Basic", "DisallowedPlayerColors", string.Empty);
597595

598596
foreach (string colorIndex in disallowedColors)
599597
CoopInfo.DisallowedPlayerColors.Add(int.Parse(colorIndex, CultureInfo.InvariantCulture));

0 commit comments

Comments
 (0)