Skip to content

Commit 9ff72d5

Browse files
committed
added support for multiple grpinfo files
1 parent ac461d4 commit 9ff72d5

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

src/Addons/Providers/GrpInfoProvider.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Common.Enums;
44
using Common.Enums.Versions;
55
using Common.Interfaces;
6+
using CommunityToolkit.Diagnostics;
67

78
namespace Addons.Providers;
89

@@ -11,15 +12,22 @@ public static class GrpInfoProvider
1112
/// <summary>
1213
/// Get list of addons from grpinfo file
1314
/// </summary>
14-
/// <param name="foldersGrpInfos">Folders to search for grpinfo and grps</param>
15-
public static List<IAddon> GetAddonsFromGrpInfo(List<string> foldersGrpInfos)
15+
public static List<IAddon>? GetAddonsFromGrpInfo(string campaignsFolder)
1616
{
1717
List<IAddon> newAddons = [];
1818

19-
foreach (var folder in foldersGrpInfos)
19+
var grpInfos = Directory.GetFiles(campaignsFolder, "*.grpinfo", SearchOption.AllDirectories);
20+
21+
if (grpInfos.Length == 0)
2022
{
21-
var grpInfo = Path.Combine(folder, "addons.grpinfo");
22-
var grps = Directory.GetFiles(folder, "*.grp");
23+
return null;
24+
}
25+
26+
foreach (var grpInfo in grpInfos)
27+
{
28+
var grpInfoFolder = Path.GetDirectoryName(grpInfo) ?? ThrowHelper.ThrowInvalidOperationException<string>();
29+
30+
var grps = Directory.GetFiles(grpInfoFolder, "*.grp", SearchOption.TopDirectoryOnly);
2331

2432
if (grps.Length == 0)
2533
{
@@ -33,9 +41,9 @@ public static List<IAddon> GetAddonsFromGrpInfo(List<string> foldersGrpInfos)
3341
{
3442
var fileSize = new FileInfo(grp).Length;
3543

36-
var addon = addons.Find(x => x.Size == fileSize);
44+
var addon = addons.FirstOrDefault(x => x.Size == fileSize);
3745

38-
if (addon.Name is null)
46+
if (addon.Equals(default(GrpInfo)) || addon.Name is null)
3947
{
4048
continue;
4149
}

src/Addons/Providers/InstalledAddonsProvider.cs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -160,26 +160,17 @@ await Task.Run(async () =>
160160
_campaignsCache.AddRange(tcs);
161161

162162
//grpinfo
163-
List<string> foldersWithGrpInfos = [];
164-
dirs = Directory.GetDirectories(_game.CampaignsFolderPath, "*", SearchOption.TopDirectoryOnly);
163+
var grpInfoAddons = GrpInfoProvider.GetAddonsFromGrpInfo(_game.CampaignsFolderPath);
165164

166-
foreach (var dir in dirs)
165+
if (grpInfoAddons?.Count > 0)
167166
{
168-
if (File.Exists(Path.Combine(dir, "addons.grpinfo")))
167+
foreach (var addon in grpInfoAddons)
169168
{
170-
foldersWithGrpInfos.Add(dir);
171-
}
172-
}
169+
var result = _campaignsCache.TryAdd(new(addon.AddonId.Id, null), addon);
173170

174-
if (foldersWithGrpInfos.Count > 0)
175-
{
176-
var grpInfoAddons = GrpInfoProvider.GetAddonsFromGrpInfo(foldersWithGrpInfos);
177-
178-
if (grpInfoAddons.Count > 0)
179-
{
180-
foreach (var addon in grpInfoAddons)
171+
if (!result)
181172
{
182-
_campaignsCache.Add(new(addon.AddonId.Id, null), addon);
173+
_logger.LogError($"Failed to add {addon.FileName} to the campaigns list.");
183174
}
184175
}
185176
}

0 commit comments

Comments
 (0)