Add NoMatchInclude support to the UI

This commit is contained in:
Timothy Baldridge 2022-05-25 23:21:12 -06:00
parent 0a2abfa1be
commit 06674a22f8
5 changed files with 73 additions and 3 deletions

View File

@ -87,6 +87,7 @@ namespace Wabbajack
[Reactive] public bool IsMO2Compilation { get; set; } [Reactive] public bool IsMO2Compilation { get; set; }
[Reactive] public RelativePath[] AlwaysEnabled { get; set; } = Array.Empty<RelativePath>(); [Reactive] public RelativePath[] AlwaysEnabled { get; set; } = Array.Empty<RelativePath>();
[Reactive] public RelativePath[] NoMatchInclude { get; set; } = Array.Empty<RelativePath>();
[Reactive] public string[] OtherProfiles { get; set; } = Array.Empty<string>(); [Reactive] public string[] OtherProfiles { get; set; } = Array.Empty<string>();
@ -181,6 +182,7 @@ namespace Wabbajack
SelectedProfile = settings.Profile; SelectedProfile = settings.Profile;
OtherProfiles = settings.OtherProfiles; OtherProfiles = settings.OtherProfiles;
AlwaysEnabled = settings.AlwaysEnabled; AlwaysEnabled = settings.AlwaysEnabled;
NoMatchInclude = settings.NoMatchInclude;
} }
@ -204,6 +206,7 @@ namespace Wabbajack
Profile = SelectedProfile, Profile = SelectedProfile,
OtherProfiles = OtherProfiles, OtherProfiles = OtherProfiles,
AlwaysEnabled = AlwaysEnabled, AlwaysEnabled = AlwaysEnabled,
NoMatchInclude = NoMatchInclude,
UseGamePaths = true UseGamePaths = true
}; };
@ -264,8 +267,9 @@ namespace Wabbajack
Profile = SelectedProfile, Profile = SelectedProfile,
UseGamePaths = true, UseGamePaths = true,
OutputFile = OutputLocation.TargetPath.Combine(SelectedProfile).WithExtension(Ext.Wabbajack), OutputFile = OutputLocation.TargetPath.Combine(SelectedProfile).WithExtension(Ext.Wabbajack),
AlwaysEnabled = AlwaysEnabled.ToArray(), AlwaysEnabled = AlwaysEnabled,
OtherProfiles = OtherProfiles.ToArray() OtherProfiles = OtherProfiles,
NoMatchInclude = NoMatchInclude,
}; };
} }
@ -291,6 +295,16 @@ namespace Wabbajack
AlwaysEnabled = AlwaysEnabled.Where(p => p != path).ToArray(); AlwaysEnabled = AlwaysEnabled.Where(p => p != path).ToArray();
} }
public void AddNoMatchInclude(RelativePath path)
{
NoMatchInclude = (NoMatchInclude ?? Array.Empty<RelativePath>()).Append(path).Distinct().ToArray();
}
public void RemoveNoMatchInclude(RelativePath path)
{
NoMatchInclude = NoMatchInclude.Where(p => p != path).ToArray();
}
#endregion #endregion
} }
} }

View File

@ -144,6 +144,19 @@
ToolTip="If this box has a value the modlist will be published to this MachineUrl after compilation" /> ToolTip="If this box has a value the modlist will be published to this MachineUrl after compilation" />
<TextBox x:Name="MachineUrl" Style="{StaticResource ValueStyle}" /> <TextBox x:Name="MachineUrl" Style="{StaticResource ValueStyle}" />
<StackPanel Orientation="Horizontal">
<Button Name="AddNoMatchInclude">
<icon:Material Kind="Plus"></icon:Material>
</Button>
<Label>No Match Include</Label>
</StackPanel>
<ListBox x:Name="NoMatchInclude">
<ListBox.ItemTemplate>
<DataTemplate>
<controls1:RemovableItemView ViewModel="{Binding}" ></controls1:RemovableItemView>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<Button Name="AddOtherProfile"> <Button Name="AddOtherProfile">

View File

@ -113,6 +113,7 @@ namespace Wabbajack
AddAlwaysEnabled.Command = ReactiveCommand.CreateFromTask(async () => await AddAlwaysEnabledCommand()); AddAlwaysEnabled.Command = ReactiveCommand.CreateFromTask(async () => await AddAlwaysEnabledCommand());
ViewModel.WhenAnyValue(vm => vm.OtherProfiles) ViewModel.WhenAnyValue(vm => vm.OtherProfiles)
.WhereNotNull() .WhereNotNull()
.Select(itms => itms.Select(itm => new RemovableItemViewModel(itm.ToString(), () => ViewModel.RemoveProfile(itm))).ToArray()) .Select(itms => itms.Select(itm => new RemovableItemViewModel(itm.ToString(), () => ViewModel.RemoveProfile(itm))).ToArray())
@ -121,6 +122,14 @@ namespace Wabbajack
AddOtherProfile.Command = ReactiveCommand.CreateFromTask(async () => await AddOtherProfileCommand()); AddOtherProfile.Command = ReactiveCommand.CreateFromTask(async () => await AddOtherProfileCommand());
ViewModel.WhenAnyValue(vm => vm.NoMatchInclude)
.WhereNotNull()
.Select(itms => itms.Select(itm => new RemovableItemViewModel(itm.ToString(), () => ViewModel.RemoveNoMatchInclude(itm))).ToArray())
.BindToStrict(this, view => view.NoMatchInclude.ItemsSource)
.DisposeWith(disposables);
AddNoMatchInclude.Command = ReactiveCommand.CreateFromTask(async () => await AddNoMatchIncludeCommand());
}); });
@ -199,5 +208,31 @@ namespace Wabbajack
ViewModel.AddOtherProfile(selectedPath.FileName.ToString()); ViewModel.AddOtherProfile(selectedPath.FileName.ToString());
} }
public async Task AddNoMatchIncludeCommand()
{
var dlg = new CommonOpenFileDialog
{
Title = "Please select a profile folder",
IsFolderPicker = true,
InitialDirectory = ViewModel!.Source.ToString(),
AddToMostRecentlyUsedList = false,
AllowNonFileSystemItems = false,
DefaultDirectory = ViewModel!.Source.ToString(),
EnsureFileExists = true,
EnsurePathExists = true,
EnsureReadOnly = false,
EnsureValidNames = true,
Multiselect = false,
ShowPlacesList = true,
};
if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return;
var selectedPath = dlg.FileNames.First().ToAbsolutePath();
if (!selectedPath.InFolder(ViewModel.Source)) return;
ViewModel.AddNoMatchInclude(selectedPath.RelativeTo(ViewModel!.Source));
}
} }
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -53,6 +54,13 @@ public class CompilerSettingsInferencer
if (cs.Downloads == default) if (cs.Downloads == default)
cs.Downloads = cs.Source.Combine("downloads"); cs.Downloads = cs.Source.Combine("downloads");
cs.NoMatchInclude = Array.Empty<RelativePath>();
foreach (var file in mo2Folder.EnumerateFiles())
{
if (file.FileName == Consts.WABBAJACK_NOMATCH_INCLUDE_FILES)
cs.NoMatchInclude = cs.NoMatchInclude.Add(file.Parent.RelativeTo(mo2Folder));
}
_logger.LogInformation("Finding Always Enabled mods"); _logger.LogInformation("Finding Always Enabled mods");
cs.AlwaysEnabled = Array.Empty<RelativePath>(); cs.AlwaysEnabled = Array.Empty<RelativePath>();
// Find Always Enabled mods // Find Always Enabled mods

View File

@ -26,7 +26,7 @@ public class Consts
public static string WABBAJACK_ALWAYS_DISABLE = "WABBAJACK_ALWAYS_DISABLE"; public static string WABBAJACK_ALWAYS_DISABLE = "WABBAJACK_ALWAYS_DISABLE";
public static string WABBAJACK_NOMATCH_INCLUDE = "WABBAJACK_NOMATCH_INCLUDE"; public static string WABBAJACK_NOMATCH_INCLUDE = "WABBAJACK_NOMATCH_INCLUDE";
public static string WABBAJACK_IGNORE = "WABBAJACK_IGNORE"; public static string WABBAJACK_IGNORE = "WABBAJACK_IGNORE";
public static string WABBAJACK_NOMATCH_INCLUDE_FILES = "WABBAJACK_NOMATCH_INCLUDE_FILES.txt"; public static RelativePath WABBAJACK_NOMATCH_INCLUDE_FILES = "WABBAJACK_NOMATCH_INCLUDE_FILES.txt".ToRelativePath();
public static string WABBAJACK_IGNORE_FILES = "WABBAJACK_IGNORE_FILES.txt"; public static string WABBAJACK_IGNORE_FILES = "WABBAJACK_IGNORE_FILES.txt";
public static string WABBAJACK_INCLUDE_SAVES = "WABBAJACK_INCLUDE_SAVES"; public static string WABBAJACK_INCLUDE_SAVES = "WABBAJACK_INCLUDE_SAVES";