using System; using System.Collections.Generic; using System.Linq; using System.Text.Json.Serialization; using Wabbajack.DTOs; using Wabbajack.Paths; namespace Wabbajack.Compiler; public class CompilerSettings { public bool ModlistIsNSFW { get; set; } public AbsolutePath Source { get; set; } public AbsolutePath Downloads { get; set; } public Game Game { get; set; } public AbsolutePath OutputFile { get; set; } public AbsolutePath ModListImage { get; set; } public bool UseGamePaths { get; set; } public bool UseTextureRecompression { get; set; } = false; public Game[] OtherGames { get; set; } = Array.Empty<Game>(); public TimeSpan MaxVerificationTime { get; set; } = TimeSpan.FromMinutes(1); public string ModListName { get; set; } = ""; public string ModListAuthor { get; set; } = ""; public string ModListDescription { get; set; } = ""; public string ModListReadme { get; set; } = ""; public Uri? ModListWebsite { get; set; } public Version ModlistVersion { get; set; } = Version.Parse("0.0.1.0"); public bool PublishUpdate { get; set; } = false; public string MachineUrl { get; set; } = ""; /// <summary> /// The main (default) profile /// </summary> public string Profile { get; set; } = ""; /// <summary> /// Secondary profiles to include in the modlist /// </summary> public string[] AdditionalProfiles { get; set; } = Array.Empty<string>(); /// <summary> /// All profiles to be added to the compiled modlist /// </summary> [JsonIgnore] public IEnumerable<string> AllProfiles => AdditionalProfiles.Append(Profile); [JsonIgnore] public bool IsMO2Modlist => AllProfiles.Any(p => !string.IsNullOrWhiteSpace(p)); /// <summary> /// This file, or files in these folders, are automatically included if they don't match /// any other step /// </summary> public RelativePath[] NoMatchInclude { get; set; } = Array.Empty<RelativePath>(); /// <summary> /// These files are inlined into the modlist /// </summary> public RelativePath[] Include { get; set; } = Array.Empty<RelativePath>(); /// <summary> /// These files are ignored when compiling the modlist /// </summary> public RelativePath[] Ignore { get; set; } = Array.Empty<RelativePath>(); public RelativePath[] AlwaysEnabled { get; set; } = Array.Empty<RelativePath>(); public Version Version { get; set; } public string Description { get; set; } }