Skip to content

Commit

Permalink
Move inline scripts path to where it should be (IO layer)
Browse files Browse the repository at this point in the history
  • Loading branch information
bcssov committed Oct 30, 2024
1 parent 7662095 commit a6966f4
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// Created : 04-02-2020
//
// Last Modified By : Mario
// Last Modified On : 10-21-2024
// Last Modified On : 10-30-2024
// ***********************************************************************
// <copyright file="IDefinitionInfoProvider.cs" company="Mario">
// Mario
Expand Down Expand Up @@ -33,6 +33,12 @@ public interface IDefinitionInfoProvider
/// <value>The fios paths.</value>
IReadOnlyCollection<string> FIOSPaths { get; }

/// <summary>
/// Gets the inline scripts path.
/// </summary>
/// <value>The inline scripts path.</value>
string InlineScriptsPath { get; }

/// <summary>
/// Gets a value indicating whether this instance is fully implemented.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// Created : 04-04-2020
//
// Last Modified By : Mario
// Last Modified On : 10-21-2024
// Last Modified On : 10-30-2024
// ***********************************************************************
// <copyright file="BaseDefinitionInfoProvider.cs" company="Mario">
// Mario
Expand Down Expand Up @@ -68,6 +68,12 @@ public abstract class BaseDefinitionInfoProvider : IDefinitionInfoProvider
/// <value>The fios paths.</value>
public abstract IReadOnlyCollection<string> FIOSPaths { get; }

/// <summary>
/// Gets the inline scripts path.
/// </summary>
/// <value>The inline scripts path.</value>
public abstract string InlineScriptsPath { get; }

/// <summary>
/// Gets a value indicating whether this instance is fully implemented.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// Created : 07-18-2022
//
// Last Modified By : Mario
// Last Modified On : 10-21-2024
// Last Modified On : 10-30-2024
// ***********************************************************************
// <copyright file="HOI4DefinitionInfoProvider.cs" company="Mario">
// Mario
Expand Down Expand Up @@ -35,6 +35,12 @@ public class HOI4DefinitionInfoProvider : BaseDefinitionInfoProvider
/// <exception cref="System.NotImplementedException"></exception>
public override IReadOnlyCollection<string> FIOSPaths => throw new NotImplementedException();

/// <summary>
/// Gets the inline scripts path.
/// </summary>
/// <value>The inline scripts path.</value>
public override string InlineScriptsPath => string.Empty;

/// <summary>
/// Gets a value indicating whether this instance is fully implemented.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// Created : 04-02-2020
//
// Last Modified By : Mario
// Last Modified On : 10-21-2024
// Last Modified On : 10-30-2024
// ***********************************************************************
// <copyright file="StellarisDefinitionInfoProvider.cs" company="Mario">
// Mario
Expand Down Expand Up @@ -56,6 +56,12 @@ public class StellarisDefinitionInfoProvider : BaseDefinitionInfoProvider
"solar_system_initializers", "traits", "start_screen_messages"
];

/// <summary>
/// Gets the inline scripts path.
/// </summary>
/// <value>The inline scripts path.</value>
public override string InlineScriptsPath => "common\\inline_scripts".StandardizeDirectorySeparator();

/// <summary>
/// Gets a value indicating whether this instance is fully implemented.
/// </summary>
Expand Down
42 changes: 23 additions & 19 deletions src/IronyModManager.Services/GameIndexService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,6 @@ public class GameIndexService(
/// </summary>
private readonly IParametrizedParser parametrizedParser = parametrizedParser;

/// <summary>
/// The inline scripts folder
/// </summary>
private readonly string inlineScriptsFolder = "common\\inline_scripts".StandardizeDirectorySeparator();

#endregion Fields

#region Methods
Expand Down Expand Up @@ -129,8 +124,13 @@ public virtual async Task<bool> IndexDefinitionsAsync(IGame game, IEnumerable<st
{
var provider = DefinitionInfoProviders.FirstOrDefault(p => p.CanProcess(game.Type));
files = files.Where(p => game.GameFolders.Any(p.StartsWith));
var gameInlineScriptFiles = files.Where(p => p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase));
var gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
var gameInlineFolders = new List<string>();
if (provider!.SupportsInlineScripts)
{
var gameInlineScriptFiles = files.Where(p => p.StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase));
gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
}

var indexedFolders = (await indexedDefinitions.GetAllDirectoryKeysAsync()).Select(p => p.ToLowerInvariant());
var validFolders = files.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).Where(p => indexedFolders.Any(a => a.ToLowerInvariant().Equals(p!.ToLowerInvariant())));
var folders = new List<string>();
Expand All @@ -142,7 +142,7 @@ public virtual async Task<bool> IndexDefinitionsAsync(IGame game, IEnumerable<st
}
}

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

// First index inline scripts folder
if (provider is { SupportsInlineScripts: true })
if (provider.SupportsInlineScripts)
{
total += gameInlineFolders.Count;
var inlineFolders = folders.Where(p => p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase)).ToList();
var inlineFolders = folders.Where(p => p.StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase)).ToList();
var inlineTasks = inlineFolders.AsParallel().Select(async folder =>
{
await semaphore.WaitAsync();
Expand Down Expand Up @@ -204,7 +204,7 @@ await Task.Run(async () =>
});
await Task.WhenAll(inlineTasks);

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

var loadTasks = gameInlineFolders.Select(async directory =>
{
Expand Down Expand Up @@ -326,13 +326,17 @@ protected virtual async Task<IIndexedDefinitions> LoadDefinitionsInternalAsync(I
// No directory override this means we want to ensure inline directories are loaded even if not requested
if (string.IsNullOrWhiteSpace(directoryOverride))
{
var gamePath = PathResolver.GetPath(game);
var files = Reader.GetFiles(gamePath);
files = files.Where(p => game.GameFolders.Any(p.StartsWith));
var gameInlineScriptFiles = files.Where(p => p.StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase));
var gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
directories.AddRange(gameInlineFolders);
directories = directories.Distinct().ToList();
var provider = DefinitionInfoProviders.FirstOrDefault(p => p.CanProcess(game.Type));
if (provider!.SupportsInlineScripts)
{
var gamePath = PathResolver.GetPath(game);
var files = Reader.GetFiles(gamePath);
files = files.Where(p => game.GameFolders.Any(p.StartsWith));
var gameInlineScriptFiles = files.Where(p => p.StartsWith(provider!.InlineScriptsPath, StringComparison.OrdinalIgnoreCase));
var gameInlineFolders = gameInlineScriptFiles.Select(Path.GetDirectoryName).GroupBy(p => p).Select(p => p.FirstOrDefault()).ToList();
directories.AddRange(gameInlineFolders);
directories = directories.Distinct().ToList();
}
}

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

List<IDefinition> prunedInlineDefinitions = null;
if (provider!.SupportsInlineScripts && !folder.StandardizeDirectorySeparator().StartsWith(inlineScriptsFolder, StringComparison.OrdinalIgnoreCase))
if (provider!.SupportsInlineScripts && !folder.StandardizeDirectorySeparator().StartsWith(provider.InlineScriptsPath, StringComparison.OrdinalIgnoreCase))
{
inlineDefinitions ??= DIResolver.Get<IIndexedDefinitions>();
prunedInlineDefinitions = [];
Expand Down

0 comments on commit a6966f4

Please sign in to comment.