diff --git a/Wabbajack.Common/Paths.cs b/Wabbajack.Common/Paths.cs index f9b8ee1c..e68deda8 100644 --- a/Wabbajack.Common/Paths.cs +++ b/Wabbajack.Common/Paths.cs @@ -114,10 +114,11 @@ namespace Wabbajack.Common public bool IsFile => File.Exists(_path); public bool IsDirectory => Directory.Exists(_path); - public async Task DeleteDirectory() + public async Task DeleteDirectory(bool dontDeleteIfNotEmpty = false) { if (IsDirectory) { + if (dontDeleteIfNotEmpty && (EnumerateFiles().Any() || EnumerateDirectories().Any())) return; await Utils.DeleteDirectory(this); } } diff --git a/Wabbajack.Lib/AInstaller.cs b/Wabbajack.Lib/AInstaller.cs index e82c7781..d7107480 100644 --- a/Wabbajack.Lib/AInstaller.cs +++ b/Wabbajack.Lib/AInstaller.cs @@ -356,6 +356,10 @@ namespace Wabbajack.Lib var indexed = ModList.Directives.ToDictionary(d => d.To); + + var profileFolder = OutputFolder.Combine("profiles"); + var savePath = (RelativePath)"saves"; + UpdateTracker.NextStep("Looking for files to delete"); await OutputFolder.EnumerateFiles() .PMap(Queue, UpdateTracker, async f => @@ -365,6 +369,8 @@ namespace Wabbajack.Lib if (indexed.ContainsKey(relativeTo) || f.InFolder(DownloadFolder)) return; + if (f.InFolder(profileFolder) && f.Parent.FileName == savePath) return; + Utils.Log($"Deleting {relativeTo} it's not part of this ModList"); await f.DeleteAsync(); }); @@ -394,7 +400,7 @@ namespace Wabbajack.Lib .ToList(); foreach (var dir in toDelete) { - await dir.DeleteDirectory(); + await dir.DeleteDirectory(dontDeleteIfNotEmpty:true); } } catch (Exception) diff --git a/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs b/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs index e00ac6e7..7f2925e3 100644 --- a/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs +++ b/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs @@ -12,6 +12,5 @@ namespace Wabbajack.Lib.CompilationSteps } public abstract ValueTask Run(RawSourceFile source); - public abstract IState GetState(); } } diff --git a/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs b/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs index daa6abc9..ee6600ae 100644 --- a/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs +++ b/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs @@ -46,11 +46,6 @@ namespace Wabbajack.Lib.CompilationSteps }; } - public override IState GetState() - { - return new State(); - } - public override async ValueTask Run(RawSourceFile source) { if (!Consts.SupportedBSAs.Contains(source.Path.Extension)) return null; @@ -108,14 +103,5 @@ namespace Wabbajack.Lib.CompilationSteps await _cleanup(); return directive; } - - [JsonObject("DeconstructBSAs")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new DeconstructBSAs(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/DirectMatch.cs b/Wabbajack.Lib/CompilationSteps/DirectMatch.cs index 75973753..71746f74 100644 --- a/Wabbajack.Lib/CompilationSteps/DirectMatch.cs +++ b/Wabbajack.Lib/CompilationSteps/DirectMatch.cs @@ -40,19 +40,5 @@ namespace Wabbajack.Lib.CompilationSteps return result; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("DirectMatch")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new DirectMatch(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/DropAll.cs b/Wabbajack.Lib/CompilationSteps/DropAll.cs index bcbc32f3..90f15976 100644 --- a/Wabbajack.Lib/CompilationSteps/DropAll.cs +++ b/Wabbajack.Lib/CompilationSteps/DropAll.cs @@ -16,19 +16,5 @@ namespace Wabbajack.Lib.CompilationSteps result.Reason = "No Match in Stack"; return result; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("DropAll")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new DropAll(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/ICompilationStep.cs b/Wabbajack.Lib/CompilationSteps/ICompilationStep.cs index eafa5914..155b7c47 100644 --- a/Wabbajack.Lib/CompilationSteps/ICompilationStep.cs +++ b/Wabbajack.Lib/CompilationSteps/ICompilationStep.cs @@ -5,11 +5,5 @@ namespace Wabbajack.Lib.CompilationSteps public interface ICompilationStep { ValueTask Run(RawSourceFile source); - IState GetState(); - } - - public interface IState - { - ICompilationStep CreateStep(ACompiler compiler); } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs b/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs index 3fd9912b..814e8e4a 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs @@ -35,11 +35,6 @@ namespace Wabbajack.Lib.CompilationSteps return r; } - public override IState GetState() - { - return new State(); - } - public static bool IsAlwaysEnabled(dynamic data) { if (data == null) @@ -53,14 +48,5 @@ namespace Wabbajack.Lib.CompilationSteps return true; return false; } - - [JsonObject("IgnoreDisabledMods")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreDisabledMods(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs b/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs index b9918d95..c560ee70 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs @@ -21,26 +21,5 @@ namespace Wabbajack.Lib.CompilationSteps result.Reason = _reason; return result; } - - public override IState GetState() - { - return new State(_postfix); - } - - [JsonObject("IgnoreEndsWith")] - public class State : IState - { - public string Postfix { get; set; } - - public State(string postfix) - { - Postfix = postfix; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreEndsWith(compiler, Postfix); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs b/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs index 7581c566..47f423d0 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs @@ -20,19 +20,5 @@ namespace Wabbajack.Lib.CompilationSteps i.Reason = "Default game file"; return i; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IgnoreGameFiles")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreGameFiles(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs b/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs index 4191184e..29dac1fc 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs @@ -26,18 +26,5 @@ namespace Wabbajack.Lib.CompilationSteps return result; } - - public override IState GetState() - { - return new State(); - } - - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreGameFilesIfGameFolderFilesExist(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs b/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs index eac01fe7..7f9d54df 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs @@ -21,26 +21,5 @@ namespace Wabbajack.Lib.CompilationSteps result.Reason = _reason; return result; } - - public override IState GetState() - { - return new State(_pattern); - } - - [JsonObject("IgnorePathContains")] - public class State : IState - { - public string Pattern { get; set; } - - public State(string pattern) - { - Pattern = pattern; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnorePathContains(compiler, Pattern); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs b/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs index 739ad00c..0a0bc526 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs @@ -24,26 +24,5 @@ namespace Wabbajack.Lib.CompilationSteps result.Reason = _reason; return result; } - - public override IState GetState() - { - return new State(_pattern); - } - - [JsonObject("IgnorePattern")] - public class State : IState - { - public string Pattern { get; set; } - - public State(string pattern) - { - Pattern = pattern; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreRegex(compiler, Pattern); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreSaveFiles.cs b/Wabbajack.Lib/CompilationSteps/IgnoreSaveFiles.cs new file mode 100644 index 00000000..13747f85 --- /dev/null +++ b/Wabbajack.Lib/CompilationSteps/IgnoreSaveFiles.cs @@ -0,0 +1,27 @@ +using System.Linq; +using System.Threading.Tasks; +using Wabbajack.Common; + +namespace Wabbajack.Lib.CompilationSteps +{ + public class IgnoreSaveFiles : MO2CompilationStep + { + private AbsolutePath[] _profilePaths; + + public IgnoreSaveFiles(ACompiler compiler) : base(compiler) + { + _profilePaths = + MO2Compiler.SelectedProfiles.Select(p => MO2Compiler.MO2Folder.Combine("profiles", p, "saves")).ToArray(); + } + + public override async ValueTask Run(RawSourceFile source) + { + if (!_profilePaths.Any(p => source.File.AbsoluteName.InFolder(p))) + return null; + + var result = source.EvolveTo(); + result.Reason = "Ignore Save files"; + return result; + } + } +} diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs b/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs index 5abad699..46ada94c 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs @@ -26,26 +26,5 @@ namespace Wabbajack.Lib.CompilationSteps return result; } - - public override IState GetState() - { - return new State(_prefix); - } - - [JsonObject("IgnoreStartsWith")] - public class State : IState - { - public string Prefix { get; set; } - - public State(string prefix) - { - Prefix = prefix; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreStartsWith(compiler, Prefix); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs b/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs index f2632c21..20646f11 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs @@ -25,19 +25,5 @@ namespace Wabbajack.Lib.CompilationSteps result.Reason = "Wabbajack Cruft file"; return result; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IgnoreWabbajackInstallCruft")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreWabbajackInstallCruft(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeAll.cs b/Wabbajack.Lib/CompilationSteps/IncludeAll.cs index 1152e99c..3b4c8b5b 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeAll.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeAll.cs @@ -18,19 +18,5 @@ namespace Wabbajack.Lib.CompilationSteps inline.SourceDataID = await _compiler.IncludeFile(await file.ReadAllAsync()); return inline; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludeAll")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeAll(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs b/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs index 9bf53920..b01cc5b0 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs @@ -18,19 +18,5 @@ namespace Wabbajack.Lib.CompilationSteps result.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); return result; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludeAllConfigs")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeAllConfigs(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs b/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs index f251e625..4630fc16 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs @@ -25,20 +25,5 @@ namespace Wabbajack.Lib.CompilationSteps inline.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); return inline; } - - public override IState GetState() - { - return new State(); - } - - - [JsonObject("IncludeDummyESPs")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeDummyESPs(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeGenericGamePlugin.cs b/Wabbajack.Lib/CompilationSteps/IncludeGenericGamePlugin.cs index 02d9fc22..c6f67331 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeGenericGamePlugin.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeGenericGamePlugin.cs @@ -42,19 +42,5 @@ namespace Wabbajack.Lib.CompilationSteps res.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); return res; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludeGenericGamePlugin")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeGenericGamePlugin(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs b/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs index 5a89a131..f4ef372d 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs @@ -21,19 +21,5 @@ namespace Wabbajack.Lib.CompilationSteps result.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); return result; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludeLootFiles")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeLootFiles(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs b/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs index f1def248..09e4c7b3 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs @@ -18,19 +18,5 @@ namespace Wabbajack.Lib.CompilationSteps e.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); return e; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludeModIniData")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeModIniData(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs b/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs index 9c89d361..16de3c9c 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs @@ -31,19 +31,5 @@ namespace Wabbajack.Lib.CompilationSteps c.Reason = "File not for selected profiles"; return c; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IgnoreOtherProfiles")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IgnoreOtherProfiles(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludePatches.cs b/Wabbajack.Lib/CompilationSteps/IncludePatches.cs index 74e8476d..ae2e2300 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludePatches.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludePatches.cs @@ -109,19 +109,5 @@ namespace Wabbajack.Lib.CompilationSteps return file.RelativeTo(((MO2Compiler)_compiler).MO2ModsFolder).TopParent .RelativeTo(((MO2Compiler)_compiler).MO2ModsFolder); } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludePatches")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludePatches(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs b/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs index bea17a87..33db6697 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs @@ -33,20 +33,6 @@ namespace Wabbajack.Lib.CompilationSteps } return result; - } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludePropertyFiles")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludePropertyFiles(compiler); - } } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs b/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs index edd9128c..89bfb178 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs @@ -24,26 +24,5 @@ namespace Wabbajack.Lib.CompilationSteps result.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); return result; } - - public override IState GetState() - { - return new State(_pattern); - } - - [JsonObject("IncludeRegex")] - public class State : IState - { - public string Pattern { get; set; } - - public State(string pattern) - { - Pattern = pattern; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeRegex(compiler, Pattern); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs b/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs index 1bcbef60..f4f5ddbe 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs @@ -48,25 +48,5 @@ namespace Wabbajack.Lib.CompilationSteps return null; } } - - public override IState GetState() - { - return new State(_game); - } - - public class State : IState - { - private readonly SteamGame _game; - - public State(SteamGame game) - { - _game = game; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeSteamWorkshopItems(compiler, _game); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs b/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs index 392cb1b3..c98738cf 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs @@ -19,12 +19,6 @@ namespace Wabbajack.Lib.CompilationSteps { return Consts.ConfigFileExtensions.Contains(source.Path.Extension) ? await RemapFile(source) : null; } - - public override IState GetState() - { - return new State(); - } - private async Task RemapFile(RawSourceFile source) { var data = await source.AbsolutePath.ReadAllTextAsync(); @@ -49,14 +43,5 @@ namespace Wabbajack.Lib.CompilationSteps result.SourceDataID = await _compiler.IncludeFile(Encoding.UTF8.GetBytes(data)); return result; } - - [JsonObject("IncludeStubbedConfigFiles")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeStubbedConfigFiles(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs b/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs index 7635b477..503f2d3b 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs @@ -39,26 +39,5 @@ namespace Wabbajack.Lib.CompilationSteps return null; } - - public override IState GetState() - { - return new State(_tag); - } - - [JsonObject("IncludeTaggedMods")] - public class State : IState - { - public string Tag { get; set; } - - public State(string tag) - { - Tag = tag; - } - - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeTaggedMods(compiler, Tag); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs b/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs index 3fb95abb..13ea2df3 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs @@ -34,11 +34,6 @@ namespace Wabbajack.Lib.CompilationSteps } - public override IState GetState() - { - return new State(); - } - private async Task ReadAndCleanModlist(AbsolutePath absolutePath) { var alwaysEnabled = _mo2Compiler.ModInis.Where(f => IgnoreDisabledMods.IsAlwaysEnabled(f.Value)) @@ -53,14 +48,5 @@ namespace Wabbajack.Lib.CompilationSteps }).ToArray(); return Encoding.UTF8.GetBytes(string.Join("\r\n", lines)); } - - [JsonObject("IncludeThisProfile")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeThisProfile(compiler); - } - } } } diff --git a/Wabbajack.Lib/CompilationSteps/MO2CompilationStep.cs b/Wabbajack.Lib/CompilationSteps/MO2CompilationStep.cs new file mode 100644 index 00000000..187c667d --- /dev/null +++ b/Wabbajack.Lib/CompilationSteps/MO2CompilationStep.cs @@ -0,0 +1,12 @@ +namespace Wabbajack.Lib.CompilationSteps +{ + public abstract class MO2CompilationStep : ACompilationStep + { + protected MO2CompilationStep(ACompiler compiler) : base(compiler) + { + + } + + public MO2Compiler MO2Compiler => (MO2Compiler)_compiler; + } +} diff --git a/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs b/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs deleted file mode 100644 index 8da10542..00000000 --- a/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Newtonsoft.Json; -using Wabbajack.Common; -using File = Alphaleonis.Win32.Filesystem.File; -using Path = Alphaleonis.Win32.Filesystem.Path; - -namespace Wabbajack.Lib.CompilationSteps -{ - public class PatchStockESMs : ACompilationStep - { - private readonly MO2Compiler _mo2Compiler; - - public PatchStockESMs(ACompiler compiler) : base(compiler) - { - _mo2Compiler = (MO2Compiler) compiler; - } - - public override async ValueTask Run(RawSourceFile source) - { - var filename = source.Path.FileName; - var gameFile = _mo2Compiler.GamePath.Combine((RelativePath)"Data", filename); - if (!Consts.GameESMs.Contains(filename) || !source.Path.StartsWith("mods\\") || - !gameFile.Exists) return null; - - Utils.Log( - $"An ESM named {filename} was found in a mod that shares a name with one of the core game ESMs, it is assumed this is a cleaned ESM and it will be binary patched"); - var result = source.EvolveTo(); - result.SourceESMHash = _compiler.VFS.Index.ByRootPath[gameFile].Hash; - - Utils.Status($"Generating patch of {filename}"); - await using (var ms = new MemoryStream()) - { - await Utils.CreatePatchCached(await gameFile.ReadAllBytesAsync(), await source.AbsolutePath.ReadAllBytesAsync(), ms); - var data = ms.ToArray(); - result.SourceDataID = await _compiler.IncludeFile(data); - Utils.Log($"Generated a {data.Length} byte patch for {filename}"); - } - - return result; - } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("PatchStockESMs")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new PatchStockESMs(compiler); - } - } - } -} diff --git a/Wabbajack.Lib/MO2Compiler.cs b/Wabbajack.Lib/MO2Compiler.cs index 05acfdaf..6ba0d433 100644 --- a/Wabbajack.Lib/MO2Compiler.cs +++ b/Wabbajack.Lib/MO2Compiler.cs @@ -577,6 +577,7 @@ namespace Wabbajack.Lib new IgnoreGameFilesIfGameFolderFilesExist(this), new IncludePropertyFiles(this), new IncludeGenericGamePlugin(this), + new IgnoreSaveFiles(this), new IgnoreStartsWith(this,"logs\\"), new IgnoreStartsWith(this, "downloads\\"), new IgnoreStartsWith(this,"webcache\\"), diff --git a/Wabbajack.Lib/zEditIntegration.cs b/Wabbajack.Lib/zEditIntegration.cs index 9ec63e03..79b315d5 100644 --- a/Wabbajack.Lib/zEditIntegration.cs +++ b/Wabbajack.Lib/zEditIntegration.cs @@ -199,20 +199,6 @@ namespace Wabbajack.Lib return result; } - - public override IState GetState() - { - return new State(); - } - - [JsonObject("IncludeZEditPatches")] - public class State : IState - { - public ICompilationStep CreateStep(ACompiler compiler) - { - return new IncludeZEditPatches((MO2Compiler)compiler); - } - } } public class zEditSettings diff --git a/Wabbajack.Test/SanityTests.cs b/Wabbajack.Test/SanityTests.cs index a4fa2a78..af5c0f13 100644 --- a/Wabbajack.Test/SanityTests.cs +++ b/Wabbajack.Test/SanityTests.cs @@ -180,6 +180,32 @@ namespace Wabbajack.Test Assert.False(extraFolder.Exists); } + [Fact] + public async Task SaveFilesAreIgnored() + { + var profile = utils.AddProfile(); + var mod = await utils.AddMod("dummy"); + + var saveFolder = utils.MO2Folder.Combine("profiles", profile, "saves"); + saveFolder.CreateDirectory(); + await saveFolder.Combine("incompilation").WriteAllTextAsync("ignore this"); + + var installSaveFolderThisProfile = utils.InstallFolder.Combine("profiles", profile, "saves"); + var installSaveFolderOtherProfile = utils.InstallFolder.Combine("profiles", "Other Profile", "saves"); + installSaveFolderThisProfile.CreateDirectory(); + installSaveFolderOtherProfile.CreateDirectory(); + + await installSaveFolderOtherProfile.Combine("otherprofile").WriteAllTextAsync("other profile file"); + await installSaveFolderThisProfile.Combine("thisprofile").WriteAllTextAsync("this profile file"); + + await utils.Configure(); + var modlist = await CompileAndInstall(profile); + + Assert.Equal("other profile file", await installSaveFolderOtherProfile.Combine("otherprofile").ReadAllTextAsync()); + Assert.Equal("this profile file", await installSaveFolderThisProfile.Combine("thisprofile").ReadAllTextAsync()); + Assert.False(installSaveFolderThisProfile.Combine("incompilation").Exists); + } + [Fact] public async Task SetScreenSizeTest() {