GameMetaData.TryGetGameLocation()

Added choice of nullable return or not
This commit is contained in:
Justin Swanson 2020-04-09 13:57:02 -05:00
parent 86641d01df
commit 5a38f40a66
6 changed files with 17 additions and 11 deletions

View File

@ -21,12 +21,12 @@ namespace Wabbajack.BuildServer.Models.Jobs
Utils.Log($"Indexing game files"); Utils.Log($"Indexing game files");
var states = GameRegistry.Games.Values var states = GameRegistry.Games.Values
.Where(game => game.GameLocation() != null && game.MainExecutable != null) .Where(game => game.GameLocation() != null && game.MainExecutable != null)
.SelectMany(game => game.GameLocation().Value.EnumerateFiles() .SelectMany(game => game.GameLocation().EnumerateFiles()
.Select(file => new GameFileSourceDownloader.State .Select(file => new GameFileSourceDownloader.State
{ {
Game = game.Game, Game = game.Game,
GameVersion = game.InstalledVersion, GameVersion = game.InstalledVersion,
GameFile = file.RelativeTo(game.GameLocation().Value), GameFile = file.RelativeTo(game.GameLocation()),
})) }))
.ToList(); .ToList();
@ -40,7 +40,7 @@ namespace Wabbajack.BuildServer.Models.Jobs
await states.PMap(queue, async state => await states.PMap(queue, async state =>
{ {
var path = state.Game.MetaData().GameLocation().Value.Combine(state.GameFile); var path = state.Game.MetaData().GameLocation().Combine(state.GameFile);
Utils.Log($"Hashing Game file {path}"); Utils.Log($"Hashing Game file {path}");
try try
{ {

View File

@ -99,9 +99,16 @@ namespace Wabbajack.Common
public string? MainExecutable { get; internal set; } public string? MainExecutable { get; internal set; }
public AbsolutePath? GameLocation() public AbsolutePath? TryGetGameLocation()
{ {
return Consts.TestMode ? AbsolutePath.GetCurrentDirectory() : StoreHandler.Instance.GetGamePath(Game); return Consts.TestMode ? AbsolutePath.GetCurrentDirectory() : StoreHandler.Instance.TryGetGamePath(Game);
}
public AbsolutePath GameLocation()
{
var ret = TryGetGameLocation();
if (ret == null) throw new ArgumentNullException();
return ret.Value;
} }
} }

View File

@ -52,7 +52,7 @@ namespace Wabbajack.Common.StoreHandlers
} }
} }
public AbsolutePath? GetGamePath(Game game) public AbsolutePath? TryGetGamePath(Game game)
{ {
return StoreGames.FirstOrDefault(g => g.Game == game)?.Path; return StoreGames.FirstOrDefault(g => g.Game == game)?.Path;
} }

View File

@ -68,7 +68,7 @@ namespace Wabbajack.Lib.Downloaders
public static async Task<BethesdaNetData> Login(Game game) public static async Task<BethesdaNetData> Login(Game game)
{ {
var metadata = game.MetaData(); var metadata = game.MetaData();
var gamePath = metadata.GameLocation()?.Combine(metadata.MainExecutable); var gamePath = metadata.GameLocation().Combine(metadata.MainExecutable);
var info = new ProcessStartInfo var info = new ProcessStartInfo
{ {
FileName = @"Downloaders\BethesdaNet\bethnetlogin.exe", FileName = @"Downloaders\BethesdaNet\bethnetlogin.exe",

View File

@ -20,10 +20,9 @@ namespace Wabbajack.Lib.Downloaders
var game = GameRegistry.GetByFuzzyName(gameName); var game = GameRegistry.GetByFuzzyName(gameName);
if (game == null) return null; if (game == null) return null;
var path = game.GameLocation(); var path = game.TryGetGameLocation();
var filePath = path?.Combine(gameFile); var filePath = path?.Combine(gameFile);
if (!filePath?.Exists ?? false) if (!filePath?.Exists ?? false)
return null; return null;
@ -52,7 +51,7 @@ namespace Wabbajack.Lib.Downloaders
public string GameVersion { get; set; } public string GameVersion { get; set; }
[JsonIgnore] [JsonIgnore]
internal AbsolutePath SourcePath => Game.MetaData().GameLocation().Value.Combine(GameFile); internal AbsolutePath SourcePath => Game.MetaData().GameLocation().Combine(GameFile);
[JsonIgnore] [JsonIgnore]
public override object[] PrimaryKey { get => new object[] {Game, GameVersion, GameFile}; } public override object[] PrimaryKey { get => new object[] {Game, GameVersion, GameFile}; }

View File

@ -415,7 +415,7 @@ namespace Wabbajack.Test
await converted.Download(new Archive { Name = "Update.esm" }, filename.Path); await converted.Download(new Archive { Name = "Update.esm" }, filename.Path);
Assert.Equal(Hash.FromBase64("/DLG/LjdGXI="), await Utils.FileHashAsync(filename.Path)); Assert.Equal(Hash.FromBase64("/DLG/LjdGXI="), await Utils.FileHashAsync(filename.Path));
Assert.Equal(await filename.Path.ReadAllBytesAsync(), await Game.SkyrimSpecialEdition.MetaData().GameLocation()?.Combine("Data/Update.esm").ReadAllBytesAsync()); Assert.Equal(await filename.Path.ReadAllBytesAsync(), await Game.SkyrimSpecialEdition.MetaData().GameLocation().Combine("Data/Update.esm").ReadAllBytesAsync());
Consts.TestMode = true; Consts.TestMode = true;
} }