Skip to content

Commit a6966f4

Browse files
committed
Move inline scripts path to where it should be (IO layer)
1 parent 7662095 commit a6966f4

File tree

5 files changed

+51
-23
lines changed

5 files changed

+51
-23
lines changed

src/IronyModManager.IO.Common/Mods/IDefinitionInfoProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created : 04-02-2020
55
//
66
// Last Modified By : Mario
7-
// Last Modified On : 10-21-2024
7+
// Last Modified On : 10-30-2024
88
// ***********************************************************************
99
// <copyright file="IDefinitionInfoProvider.cs" company="Mario">
1010
// Mario
@@ -33,6 +33,12 @@ public interface IDefinitionInfoProvider
3333
/// <value>The fios paths.</value>
3434
IReadOnlyCollection<string> FIOSPaths { get; }
3535

36+
/// <summary>
37+
/// Gets the inline scripts path.
38+
/// </summary>
39+
/// <value>The inline scripts path.</value>
40+
string InlineScriptsPath { get; }
41+
3642
/// <summary>
3743
/// Gets a value indicating whether this instance is fully implemented.
3844
/// </summary>

src/IronyModManager.IO/Mods/InfoProviders/BaseDefinitionInfoProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created : 04-04-2020
55
//
66
// Last Modified By : Mario
7-
// Last Modified On : 10-21-2024
7+
// Last Modified On : 10-30-2024
88
// ***********************************************************************
99
// <copyright file="BaseDefinitionInfoProvider.cs" company="Mario">
1010
// Mario
@@ -68,6 +68,12 @@ public abstract class BaseDefinitionInfoProvider : IDefinitionInfoProvider
6868
/// <value>The fios paths.</value>
6969
public abstract IReadOnlyCollection<string> FIOSPaths { get; }
7070

71+
/// <summary>
72+
/// Gets the inline scripts path.
73+
/// </summary>
74+
/// <value>The inline scripts path.</value>
75+
public abstract string InlineScriptsPath { get; }
76+
7177
/// <summary>
7278
/// Gets a value indicating whether this instance is fully implemented.
7379
/// </summary>

src/IronyModManager.IO/Mods/InfoProviders/HOI4DefinitionInfoProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created : 07-18-2022
55
//
66
// Last Modified By : Mario
7-
// Last Modified On : 10-21-2024
7+
// Last Modified On : 10-30-2024
88
// ***********************************************************************
99
// <copyright file="HOI4DefinitionInfoProvider.cs" company="Mario">
1010
// Mario
@@ -35,6 +35,12 @@ public class HOI4DefinitionInfoProvider : BaseDefinitionInfoProvider
3535
/// <exception cref="System.NotImplementedException"></exception>
3636
public override IReadOnlyCollection<string> FIOSPaths => throw new NotImplementedException();
3737

38+
/// <summary>
39+
/// Gets the inline scripts path.
40+
/// </summary>
41+
/// <value>The inline scripts path.</value>
42+
public override string InlineScriptsPath => string.Empty;
43+
3844
/// <summary>
3945
/// Gets a value indicating whether this instance is fully implemented.
4046
/// </summary>

src/IronyModManager.IO/Mods/InfoProviders/StellarisDefinitionInfoProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created : 04-02-2020
55
//
66
// Last Modified By : Mario
7-
// Last Modified On : 10-21-2024
7+
// Last Modified On : 10-30-2024
88
// ***********************************************************************
99
// <copyright file="StellarisDefinitionInfoProvider.cs" company="Mario">
1010
// Mario
@@ -56,6 +56,12 @@ public class StellarisDefinitionInfoProvider : BaseDefinitionInfoProvider
5656
"solar_system_initializers", "traits", "start_screen_messages"
5757
];
5858

59+
/// <summary>
60+
/// Gets the inline scripts path.
61+
/// </summary>
62+
/// <value>The inline scripts path.</value>
63+
public override string InlineScriptsPath => "common\\inline_scripts".StandardizeDirectorySeparator();
64+
5965
/// <summary>
6066
/// Gets a value indicating whether this instance is fully implemented.
6167
/// </summary>

src/IronyModManager.Services/GameIndexService.cs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,6 @@ public class GameIndexService(
9494
/// </summary>
9595
private readonly IParametrizedParser parametrizedParser = parametrizedParser;
9696

97-
/// <summary>
98-
/// The inline scripts folder
99-
/// </summary>
100-
private readonly string inlineScriptsFolder = "common\\inline_scripts".StandardizeDirectorySeparator();
101-
10297
#endregion Fields
10398

10499
#region Methods
@@ -129,8 +124,13 @@ public virtual async Task<bool> IndexDefinitionsAsync(IGame game, IEnumerable<st
129124
{
130125
var provider = DefinitionInfoProviders.FirstOrDefault(p => p.CanProcess(game.Type));
131126
files = files.Where(p => game.GameFolders.Any(p.StartsWith));
132-
var gameInlineScriptFiles = files.Where(p => p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase));
133-
var gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
127+
var gameInlineFolders = new List<string>();
128+
if (provider!.SupportsInlineScripts)
129+
{
130+
var gameInlineScriptFiles = files.Where(p => p.StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase));
131+
gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
132+
}
133+
134134
var indexedFolders = (await indexedDefinitions.GetAllDirectoryKeysAsync()).Select(p => p.ToLowerInvariant());
135135
var validFolders = files.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).Where(p => indexedFolders.Any(a => a.ToLowerInvariant().Equals(p!.ToLowerInvariant())));
136136
var folders = new List<string>();
@@ -142,7 +142,7 @@ public virtual async Task<bool> IndexDefinitionsAsync(IGame game, IEnumerable<st
142142
}
143143
}
144144

145-
if (provider is { SupportsInlineScripts: true })
145+
if (provider.SupportsInlineScripts)
146146
{
147147
// Inline scripts folders must always be indexed
148148
foreach (var folder in gameInlineFolders)
@@ -166,10 +166,10 @@ public virtual async Task<bool> IndexDefinitionsAsync(IGame game, IEnumerable<st
166166
var inlineDefinitions = DIResolver.Get<IIndexedDefinitions>();
167167

168168
// First index inline scripts folder
169-
if (provider is { SupportsInlineScripts: true })
169+
if (provider.SupportsInlineScripts)
170170
{
171171
total += gameInlineFolders.Count;
172-
var inlineFolders = folders.Where(p => p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase)).ToList();
172+
var inlineFolders = folders.Where(p => p.StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase)).ToList();
173173
var inlineTasks = inlineFolders.AsParallel().Select(async folder =>
174174
{
175175
await semaphore.WaitAsync();
@@ -204,7 +204,7 @@ await Task.Run(async () =>
204204
});
205205
await Task.WhenAll(inlineTasks);
206206

207-
folders = folders.Where(p => !p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase)).ToList();
207+
folders = folders.Where(p => !p.StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase)).ToList();
208208

209209
var loadTasks = gameInlineFolders.Select(async directory =>
210210
{
@@ -326,13 +326,17 @@ protected virtual async Task<IIndexedDefinitions> LoadDefinitionsInternalAsync(I
326326
// No directory override this means we want to ensure inline directories are loaded even if not requested
327327
if (string.IsNullOrWhiteSpace(directoryOverride))
328328
{
329-
var gamePath = PathResolver.GetPath(game);
330-
var files = Reader.GetFiles(gamePath);
331-
files = files.Where(p => game.GameFolders.Any(p.StartsWith));
332-
var gameInlineScriptFiles = files.Where(p => p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase));
333-
var gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
334-
directories.AddRange(gameInlineFolders);
335-
directories = directories.Distinct().ToList();
329+
var provider = DefinitionInfoProviders.FirstOrDefault(p => p.CanProcess(game.Type));
330+
if (provider!.SupportsInlineScripts)
331+
{
332+
var gamePath = PathResolver.GetPath(game);
333+
var files = Reader.GetFiles(gamePath);
334+
files = files.Where(p => game.GameFolders.Any(p.StartsWith));
335+
var gameInlineScriptFiles = files.Where(p => p.StartsWith(provider!.InlineScriptsPath, StringComparison.OrdinalIgnoreCase));
336+
var gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
337+
directories.AddRange(gameInlineFolders);
338+
directories = directories.Distinct().ToList();
339+
}
336340
}
337341

338342
if (gameLanguages != null && gameLanguages.Count != 0)
@@ -489,7 +493,7 @@ protected virtual async Task<IEnumerable<IDefinition>> ParseGameFiles(IGame game
489493
}
490494

491495
List<IDefinition> prunedInlineDefinitions = null;
492-
if (provider!.SupportsInlineScripts && !folder.StandardizeDirectorySeparator().StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase))
496+
if (provider!.SupportsInlineScripts && !folder.StandardizeDirectorySeparator().StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase))
493497
{
494498
inlineDefinitions ??= DIResolver.Get<IIndexedDefinitions>();
495499
prunedInlineDefinitions = [];

0 commit comments

Comments
 (0)