Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
65facea
start creating a public testing framework
AnakinRaW Dec 15, 2025
80c2b32
allow all FS
AnakinRaW Dec 15, 2025
170804a
reorganize solution
AnakinRaW Dec 15, 2025
a819d70
disable on linux atm
AnakinRaW Dec 15, 2025
65e9d9b
try make test more stable
AnakinRaW Dec 15, 2025
85ddd21
to netstandard
AnakinRaW Dec 15, 2025
dc7349c
remove empty struct
AnakinRaW Dec 15, 2025
6a16791
start extracting to shared proj
AnakinRaW Dec 15, 2025
f9f48e7
try use shared proj
AnakinRaW Dec 16, 2025
a812603
explicit usings
AnakinRaW Dec 16, 2025
6e8cd98
move private project ref
AnakinRaW Dec 16, 2025
57fdda5
to own project
AnakinRaW Dec 16, 2025
26fba8c
own version
AnakinRaW Dec 16, 2025
4359b75
no own version
AnakinRaW Dec 16, 2025
013bfa1
to new namespace
AnakinRaW Dec 16, 2025
745d65a
start generalize tests
AnakinRaW Dec 17, 2025
3855950
containue refactor test bases
AnakinRaW Dec 17, 2025
549cb7c
using test bases
AnakinRaW Dec 17, 2025
7a767fc
use testing bases
AnakinRaW Dec 17, 2025
91576b0
Refactor Steam HTML downloader to return non-nullable doc
AnakinRaW Dec 17, 2025
584c8ac
start implementing new testing game installation api
AnakinRaW Dec 17, 2025
0eec09a
testing classes for game and registry
AnakinRaW Dec 18, 2025
fd44d68
start mod impl
AnakinRaW Dec 18, 2025
399455c
new gameinstallation api
AnakinRaW Dec 18, 2025
8e0f57f
mod testing wrappers
AnakinRaW Dec 19, 2025
f7262e2
enable tests again
AnakinRaW Dec 19, 2025
9c26a56
move code
AnakinRaW Dec 19, 2025
6a8c7b7
simplify further
AnakinRaW Dec 19, 2025
98757eb
move more code
AnakinRaW Dec 19, 2025
1425845
rename methods
AnakinRaW Dec 19, 2025
bc43818
move more code
AnakinRaW Dec 19, 2025
c96acd9
move namespace
AnakinRaW Dec 19, 2025
95ceb6d
remove method
AnakinRaW Dec 19, 2025
f5c9a1b
remove modinstallation
AnakinRaW Dec 19, 2025
afb279e
base classes
AnakinRaW Dec 19, 2025
a4b37e6
remove modinstallation
AnakinRaW Dec 19, 2025
92c2613
move langauge installtion
AnakinRaW Dec 19, 2025
5c959d7
some corrections
AnakinRaW Dec 19, 2025
d5e8619
start documenting code
AnakinRaW Dec 20, 2025
3f6b6a3
clean warnings
AnakinRaW Dec 20, 2025
8f06614
try test xuint 3
AnakinRaW Dec 22, 2025
e798ea3
test
AnakinRaW Dec 22, 2025
6172bfc
test
AnakinRaW Dec 22, 2025
e703e17
test
AnakinRaW Dec 22, 2025
c279c15
remove
AnakinRaW Dec 22, 2025
81fb90b
enable test
AnakinRaW Dec 22, 2025
7b84107
try enable logging
AnakinRaW Dec 22, 2025
5e2c33c
re-add tests
AnakinRaW Dec 22, 2025
98160f7
ignore no tests on linux
AnakinRaW Dec 22, 2025
f30f0bd
try fix linux
AnakinRaW Dec 22, 2025
dafbe2d
code documentation
AnakinRaW Dec 22, 2025
32ba00e
document code
AnakinRaW Dec 22, 2025
14a9c8f
resolve some warnings
AnakinRaW Dec 22, 2025
708c199
remove warning
AnakinRaW Dec 22, 2025
31c9bec
do not use async write line
AnakinRaW Dec 22, 2025
0249ec2
rename method
AnakinRaW Dec 22, 2025
c6e2f7d
test base with filesystem
AnakinRaW Dec 22, 2025
afce1c0
rename method
AnakinRaW Dec 22, 2025
646ba2d
add opposite extension method
AnakinRaW Dec 23, 2025
b209787
support vs testting
AnakinRaW Dec 23, 2025
65b307f
update logging
AnakinRaW Dec 23, 2025
d8407c6
prepare package
AnakinRaW Dec 23, 2025
a5b3776
nullable
AnakinRaW Dec 23, 2025
6f9125c
add copyright
AnakinRaW Dec 24, 2025
69a4da1
update deps
AnakinRaW Jan 16, 2026
ea0bb05
update to new CommonUtilities
AnakinRaW Jan 16, 2026
b364154
update deps
AnakinRaW Jan 24, 2026
f7b66aa
fix doc
AnakinRaW Jan 24, 2026
4a285c9
update deps
AnakinRaW Jan 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ jobs:
dotnet-version: '10.0.x'

- name: Build & Test in Release Mode
run: dotnet test --configuration Release --logger "GitHubActions"
run: dotnet test --configuration Release --report-github
# Ignore exit code 8 on Linux (zero tests are now allowed)
# TODO: Remove this when linux is supported
env:
TESTINGPLATFORM_EXITCODE_IGNORE: ${{ matrix.os == 'ubuntu-latest' && '8' || '' }}
5 changes: 2 additions & 3 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</PropertyGroup>
<PropertyGroup>
<Authors>Alamo Engine Tools and Contributors</Authors>
<Copyright>Copyright © 2025 Alamo Engine Tools and contributors. All rights reserved.</Copyright>
<Copyright>Copyright © 2026 Alamo Engine Tools and contributors. All rights reserved.</Copyright>
<Company>Alamo Engine Tools</Company>
<PackageTags>petroglyph, alamo, glyphx, foc, eaw</PackageTags>
<PackageProjectUrl>https://github.com/AlamoEngine-Tools/PetroglyphGameInfrastructure</PackageProjectUrl>
Expand All @@ -32,8 +32,7 @@
<Version>3.9.50</Version>
</PackageReference>
<PackageReference Include="SauceControl.InheritDoc" Version="2.0.2" PrivateAssets="all" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.102">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="" />
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 Alamo Engine Tools
Copyright (c) 2026 Alamo Engine Tools

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
5 changes: 3 additions & 2 deletions PetroGlyphGameInfrastructure.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
</Folder>
<Folder Name="/test/">
<Project Path="test/AET.SteamAbstraction.Test/AET.SteamAbstraction.Test.csproj" />
<Project Path="test/AET.SteamAbstraction.Testing/AET.SteamAbstraction.Testing.csproj" />
<Project Path="test/PG.StarWarsGame.Infrastructure.Clients.Steam.Test/PG.StarWarsGame.Infrastructure.Clients.Steam.Test.csproj" />
<Project Path="test/PG.StarWarsGame.Infrastructure.Test/PG.StarWarsGame.Infrastructure.Test.csproj" />
</Folder>
<Folder Name="/testing/">
<Project Path="test/AET.SteamAbstraction.Testing/AET.SteamAbstraction.Testing.csproj" />
<Project Path="test/PG.StarWarsGame.Infrastructure.Testing/PG.StarWarsGame.Infrastructure.Testing.csproj" />
<Project Path="test/PG.TestingUtilities/PG.TestingUtilities.csproj" />
</Folder>
<Project Path="sampleApp/SampleApplication.csproj" />
</Solution>
5 changes: 5 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
2 changes: 1 addition & 1 deletion sampleApp/SampleApplication.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.2" />
</ItemGroup>

<ItemGroup>
Expand Down
20 changes: 10 additions & 10 deletions src/AET.SteamAbstraction/AET.SteamAbstraction.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
<AssemblyName>AET.SteamAbstraction</AssemblyName>
</PropertyGroup>
<PropertyGroup>
Expand All @@ -21,16 +21,16 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AnakinRaW.CommonUtilities.Registry" Version="12.3.9" />
<PackageReference Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
<PackageReference Include="AnakinRaW.CommonUtilities" Version="12.3.9" />
<PackageReference Include="AnakinRaW.CommonUtilities.FileSystem" Version="12.3.9" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" />
<PackageReference Include="Nullable" Version="1.3.1">
<PackageReference Include="AnakinRaW.CommonUtilities.Registry" Version="13.0.1" />
<PackageReference Include="AnakinRaW.CommonUtilities" Version="13.0.1" />
<PackageReference Include="AnakinRaW.CommonUtilities.FileSystem" Version="13.0.1" />
<PackageReference Include="System.Text.Json" Version="10.0.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.2" />
<PackageReference Include="Microsoft.Bcl.HashCode" Version="6.0.0" Condition="$(TargetFramework) == 'netstandard2.0'" />
<PackageReference Include="Nullable" Version="1.3.1" Condition="$(TargetFramework) == 'netstandard2.0'">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Text.Json" Version="10.0.1" />
</ItemGroup>
</Project>
12 changes: 6 additions & 6 deletions src/AET.SteamAbstraction/Library/SteamLibrary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,19 @@ internal class SteamLibrary : ISteamLibrary
TrailingDirectorySeparatorBehavior = TrailingDirectorySeparatorBehavior.Trim
};

private readonly string _normalizedLocation;
private readonly ILogger? _logger;
private readonly ConcurrentDictionary<KnownLibraryLocations, IDirectoryInfo> _locations = new();

private protected readonly IFileSystem FileSystem;

private readonly Dictionary<KnownLibraryLocations, string[]> _locationsNames = new()
{
{ KnownLibraryLocations.SteamApps, ["steamapps"] },
{ KnownLibraryLocations.Common, ["steamapps", "common"] },
{ KnownLibraryLocations.Workshops, ["steamapps", "workshop"] }
};

private readonly string _normalizedLocation;
private readonly IFileSystem _fileSystem;

public IDirectoryInfo LibraryLocation { get; }

public IDirectoryInfo SteamAppsLocation => GetKnownLibraryLocation(KnownLibraryLocations.SteamApps);
Expand All @@ -46,9 +46,9 @@ public SteamLibrary(IDirectoryInfo libraryLocation, IServiceProvider serviceProv
throw new ArgumentNullException(nameof(libraryLocation));
if (serviceProvider == null)
throw new ArgumentNullException(nameof(serviceProvider));
_fileSystem = serviceProvider.GetRequiredService<IFileSystem>();
FileSystem = serviceProvider.GetRequiredService<IFileSystem>();
_logger = serviceProvider.GetService<ILoggerFactory>()?.CreateLogger(GetType());
_normalizedLocation = PathNormalizer.Normalize(_fileSystem.Path.GetFullPath(libraryLocation.FullName), SteamLibraryPathNormalizeOptions);
_normalizedLocation = PathNormalizer.Normalize(FileSystem.Path.GetFullPath(libraryLocation.FullName), SteamLibraryPathNormalizeOptions);
LibraryLocation = libraryLocation;
}

Expand Down Expand Up @@ -91,7 +91,7 @@ public bool Equals(ISteamLibrary? other)
if (ReferenceEquals(this, other))
return true;

var normalizedOtherPath = PathNormalizer.Normalize(_fileSystem.Path.GetFullPath(other.LibraryLocation.FullName), SteamLibraryPathNormalizeOptions);
var normalizedOtherPath = PathNormalizer.Normalize(FileSystem.Path.GetFullPath(other.LibraryLocation.FullName), SteamLibraryPathNormalizeOptions);
return _normalizedLocation.Equals(normalizedOtherPath);
}

Expand Down
6 changes: 6 additions & 0 deletions src/AET.SteamAbstraction/Linux/LinuxSteamRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.IO.Abstractions;
using AET.SteamAbstraction.Registry;
using AnakinRaW.CommonUtilities;
using AnakinRaW.CommonUtilities.Registry;

namespace AET.SteamAbstraction;

Expand All @@ -16,4 +17,9 @@ internal class LinuxSteamRegistry(IServiceProvider serviceProvider) : Disposable
public IDirectoryInfo? InstallationDirectory { get; }

public int? ProcessId { get; }

public IRegistryKey? OpenSteamRegistryKey()
{
throw new NotImplementedException();
}
}
2 changes: 1 addition & 1 deletion src/AET.SteamAbstraction/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("AET.SteamAbstraction.Test")]
[assembly: InternalsVisibleTo("AET.SteamAbstraction.TestingUtilities")]
[assembly: InternalsVisibleTo("AET.SteamAbstraction.Testing")]

[assembly: InternalsVisibleTo("PG.StarWarsGame.Infrastructure.Clients.Steam.Test")]

9 changes: 8 additions & 1 deletion src/AET.SteamAbstraction/Registry/ISteamRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using AnakinRaW.CommonUtilities.Registry;
using System;
using System.IO.Abstractions;

namespace AET.SteamAbstraction.Registry;
Expand All @@ -22,4 +23,10 @@ internal interface ISteamRegistry : IDisposable
/// The PID of the current Steam Process. 0 or <see langword="null"/> if Steam is not running.
/// </summary>
int? ProcessId { get; }

/// <summary>
/// Opens the Steam registry and returns a writeable key.
/// </summary>
/// <returns>The steam registry key.</returns>
IRegistryKey? OpenSteamRegistryKey();
}
25 changes: 24 additions & 1 deletion src/AET.SteamAbstraction/Utilities/IProcessHelper.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,33 @@
using System.Diagnostics;
using System;
using System.Diagnostics;

namespace AET.SteamAbstraction.Utilities;

/// <summary>
/// Provides utility methods for managing and interacting with system processes.
/// </summary>
internal interface IProcessHelper
{
/// <summary>
/// Determines whether a process with the specified process identifier (PID) is currently running.
/// </summary>
/// <param name="pid">The process identifier (PID) to check.</param>
/// <returns>
/// <see langword="true"/> if a process with the specified PID is running; otherwise, <see langword="false"/>.
/// </returns>
/// <remarks>
/// This method attempts to retrieve the process by its PID. If the process does not exist or cannot be accessed,
/// it returns <see langword="false"/>.
/// </remarks>
bool IsProcessRunning(int pid);

/// <summary>
/// Starts a new process using the specified <see cref="ProcessStartInfo"/> configuration.
/// </summary>
/// <param name="startInfo"> The <see cref="ProcessStartInfo"/> object that specifies the configuration for the process to be started.</param>
/// <returns> A <see cref="Process"/> object that represents the started process, or <see langword="null"/> if the process could not be started.</returns>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="startInfo"/> is <see langword="null"/>.</exception>
/// <exception cref="InvalidOperationException">Thrown if no file name is specified in <paramref name="startInfo"/>.</exception>
/// <exception cref="System.ComponentModel.Win32Exception">Thrown if an error occurs when opening the associated file.</exception>
Process? StartProcess(ProcessStartInfo startInfo);
}
12 changes: 6 additions & 6 deletions src/AET.SteamAbstraction/Windows/WindowsSteamRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ public IDirectoryInfo? InstallationDirectory
}
}

public IRegistryKey? OpenSteamRegistryKey()
{
ThrowIfDisposed();
return _registryKey!.OpenSubKey(string.Empty, true);
}

protected override void DisposeResources()
{
_registryKey?.Dispose();
Expand All @@ -95,10 +101,4 @@ private void WriteToSubKey(string subKeyName, Action<IRegistryKey> keyAction)
if (subKey is not null)
keyAction(subKey);
}

internal IRegistryKey GetSteamRegistryKey()
{
ThrowIfDisposed();
return _registryKey!.OpenSubKey(string.Empty, true)!;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,16 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AlamoEngineTools.Modinfo" Version="8.0.1" />
<PackageReference Include="AnakinRaW.CommonUtilities" Version="12.3.9" />
<PackageReference Include="AnakinRaW.CommonUtilities.FileSystem" Version="12.3.9" />
<PackageReference Include="AnakinRaW.CommonUtilities.Registry" Version="12.3.9" />
<PackageReference Include="AlamoEngineTools.Modinfo" Version="8.0.2" />
<PackageReference Include="AnakinRaW.CommonUtilities" Version="13.0.1" />
<PackageReference Include="AnakinRaW.CommonUtilities.FileSystem" Version="13.0.1" />
<PackageReference Include="AnakinRaW.CommonUtilities.Registry" Version="13.0.1" />
<PackageReference Include="semver" Version="3.0.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.12.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.2" />
<PackageReference Include="QuikGraph" Version="2.5.0" PrivateAssets="compile" />
<PackageReference Include="System.Text.Json" Version="10.0.2" />
<PackageReference Include="IsExternalInit" Version="1.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand All @@ -34,11 +40,5 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="semver" Version="3.0.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.12.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" />
<PackageReference Include="QuikGraph" Version="2.5.0" PrivateAssets="compile" />
<PackageReference Include="System.Text.Json" Version="10.0.1" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public sealed class CompositeGameDetector : IGameDetector
/// <param name="sortedDetectors">The sorted list of detectors which shall get used.</param>
/// <param name="serviceProvider">The service provider.</param>
/// <param name="disposeDetectors">
/// When <see langword="true"/>after a detector was used, it will get disposed if it implements <see cref="IDisposable"/>.
/// If <see langword="true"/>, a detector that implements <see cref="IDisposable"/> gets disposed after usage.
/// Default is <see langword="false"/>
/// </param>
public CompositeGameDetector(IList<IGameDetector> sortedDetectors, IServiceProvider serviceProvider, bool disposeDetectors = false)
Expand All @@ -49,7 +49,10 @@ public CompositeGameDetector(IList<IGameDetector> sortedDetectors, IServiceProvi
/// <param name="gameType">The game type to detect.</param>
/// <param name="platforms">Collection of the platforms to search for.</param>
/// <returns>Data which holds the game's location or error information.</returns>
/// <exception cref="AggregateException"></exception>
/// <exception cref="AggregateException">
/// All exceptions that occurred during an unsuccessful game detection.
/// The exception is not thrown when any detector returns an installed game result.
/// </exception>
public GameDetectionResult Detect(GameType gameType, params ICollection<GamePlatform> platforms)
{
var errors = new List<Exception>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@ internal static bool DataAndMegaFilesXmlExists(IDirectoryInfo directory)
/// </summary>
/// <param name="gameType">The game type to detect.</param>
/// <returns>Information about a found game installation.</returns>
/// <remarks>This method may throw arbitrary exceptions.</remarks>
protected abstract GameLocationData FindGameLocation(GameType gameType);

private static bool MatchesOptionsPlatform(ICollection<GamePlatform> platforms, GamePlatform identifiedPlatform)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public interface IModGameTypeResolver
/// <param name="gameTypes">When this method returns <see langword="true"/>, the assured game types will be stored in this variable.</param>
/// <returns><see langword="true"/> when the game type could be determined; <see langword="false"/> if there is no clear evidence of the actual game type.</returns>
/// <exception cref="ArgumentNullException"><paramref name="modInformation"/> is <see langword="null"/>.</exception>
public bool TryGetGameType(DetectedModReference modInformation, out ReadOnlyFrugalList<GameType> gameTypes);
public bool TryGetGameType(DetectedModReference modInformation, out ImmutableFrugalList<GameType> gameTypes);

/// <summary>
/// Tries to determine the <see cref="GameType"/> from a specified modinfo data.
Expand All @@ -32,7 +32,7 @@ public interface IModGameTypeResolver
/// <param name="modinfo">The modinfo data.</param>
/// <param name="gameTypes">When this method returns <see langword="true"/>, the assured game types will be stored in this variable.</param>
/// <returns><see langword="true"/> when the game type could be determined; <see langword="false"/> if there is no clear evidence of the actual game type.</returns>
public bool TryGetGameType(IModinfo? modinfo, out ReadOnlyFrugalList<GameType> gameTypes);
public bool TryGetGameType(IModinfo? modinfo, out ImmutableFrugalList<GameType> gameTypes);

/// <summary>
/// Determines whether the specified mod information are definitely not compatible to a game type.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using System.IO.Abstractions;
using System.Linq;
using AET.Modinfo.File;
using AET.Modinfo.Spec;
using AET.Modinfo.Utilities;
using AnakinRaW.CommonUtilities.FileSystem;
using Microsoft.Extensions.DependencyInjection;
Expand Down Expand Up @@ -83,8 +82,7 @@ private IEnumerable<DetectedModReference> GetModsFromDirectory(

_logger?.LogTrace("Searching for mods at location '{Location}'", modDirectory.FullName);

ModinfoFinderCollection modinfoFiles;
modinfoFiles = ModinfoFileFinder.FindModinfoFiles(modDirectory);
var modinfoFiles = ModinfoFileFinder.FindModinfoFiles(modDirectory);

foreach (var modRef in ModReferenceBuilder.CreateIdentifiers(modinfoFiles, locationKind))
{
Expand Down
Loading