2020-04-01 19:14:21 +00:00
|
|
|
|
using Newtonsoft.Json;
|
2019-11-06 03:22:38 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Reactive;
|
|
|
|
|
using System.Reactive.Subjects;
|
2019-11-14 05:28:27 +00:00
|
|
|
|
using Wabbajack.Common;
|
2020-01-05 03:09:02 +00:00
|
|
|
|
using Wabbajack.Lib;
|
2019-11-06 03:22:38 +00:00
|
|
|
|
|
|
|
|
|
namespace Wabbajack
|
|
|
|
|
{
|
|
|
|
|
[JsonObject(MemberSerialization.OptOut)]
|
2020-01-06 04:49:11 +00:00
|
|
|
|
public class MainSettings
|
2019-11-06 03:22:38 +00:00
|
|
|
|
{
|
2020-03-04 11:21:44 +00:00
|
|
|
|
public byte Version { get; set; }
|
|
|
|
|
|
2019-11-06 03:22:38 +00:00
|
|
|
|
public double PosX { get; set; }
|
|
|
|
|
public double PosY { get; set; }
|
|
|
|
|
public double Height { get; set; }
|
|
|
|
|
public double Width { get; set; }
|
2019-11-14 05:28:27 +00:00
|
|
|
|
public InstallerSettings Installer { get; set; } = new InstallerSettings();
|
|
|
|
|
public CompilerSettings Compiler { get; set; } = new CompilerSettings();
|
2020-01-06 04:49:11 +00:00
|
|
|
|
public PerformanceSettings Performance { get; set; } = new PerformanceSettings();
|
2019-11-06 03:22:38 +00:00
|
|
|
|
|
|
|
|
|
private Subject<Unit> _saveSignal = new Subject<Unit>();
|
2020-01-05 03:09:02 +00:00
|
|
|
|
[JsonIgnore]
|
2019-11-06 03:22:38 +00:00
|
|
|
|
public IObservable<Unit> SaveSignal => _saveSignal;
|
|
|
|
|
|
2019-12-01 22:20:26 +00:00
|
|
|
|
public static bool TryLoadTypicalSettings(out MainSettings settings)
|
2019-11-06 03:22:38 +00:00
|
|
|
|
{
|
2020-03-28 20:04:22 +00:00
|
|
|
|
if (!Consts.SettingsFile.Exists)
|
2019-12-01 22:20:26 +00:00
|
|
|
|
{
|
|
|
|
|
settings = default;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2020-03-04 10:56:35 +00:00
|
|
|
|
|
2020-03-04 11:21:44 +00:00
|
|
|
|
// Version check
|
2020-04-01 19:14:21 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
2020-04-06 20:48:54 +00:00
|
|
|
|
settings = Consts.SettingsFile.FromJson<MainSettings>();
|
2020-04-01 19:14:21 +00:00
|
|
|
|
if (settings.Version == Consts.SettingsVersion)
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Utils.Error(ex, "Error loading settings");
|
|
|
|
|
}
|
2020-03-04 11:21:44 +00:00
|
|
|
|
|
2020-04-01 19:12:02 +00:00
|
|
|
|
var backup = Consts.SettingsFile.AppendToName("-backup");
|
2020-03-28 20:04:22 +00:00
|
|
|
|
backup.Delete();
|
2020-03-04 11:21:44 +00:00
|
|
|
|
|
2020-03-28 20:04:22 +00:00
|
|
|
|
Consts.SettingsFile.CopyTo(backup);
|
|
|
|
|
Consts.SettingsFile.Delete();
|
2020-03-04 11:21:44 +00:00
|
|
|
|
|
|
|
|
|
settings = default;
|
|
|
|
|
return false;
|
2019-11-06 03:22:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SaveSettings(MainSettings settings)
|
|
|
|
|
{
|
|
|
|
|
settings._saveSignal.OnNext(Unit.Default);
|
|
|
|
|
|
|
|
|
|
// Might add this if people are putting save work on other threads or other
|
|
|
|
|
// things that delay the operation.
|
|
|
|
|
//settings._saveSignal.OnCompleted();
|
|
|
|
|
//await settings._saveSignal;
|
|
|
|
|
|
2020-03-28 20:04:22 +00:00
|
|
|
|
Consts.SettingsFile.WriteAllText(JsonConvert.SerializeObject(settings, Formatting.Indented));
|
2019-11-06 03:22:38 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-14 05:28:27 +00:00
|
|
|
|
public class InstallerSettings
|
|
|
|
|
{
|
2020-03-28 20:04:22 +00:00
|
|
|
|
public AbsolutePath LastInstalledListLocation { get; set; }
|
|
|
|
|
public Dictionary<AbsolutePath, Mo2ModlistInstallationSettings> Mo2ModlistSettings { get; } = new Dictionary<AbsolutePath, Mo2ModlistInstallationSettings>();
|
2019-11-14 05:28:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-12-03 02:38:33 +00:00
|
|
|
|
public class Mo2ModlistInstallationSettings
|
2019-11-06 03:22:38 +00:00
|
|
|
|
{
|
2020-03-28 20:04:22 +00:00
|
|
|
|
public AbsolutePath InstallationLocation { get; set; }
|
|
|
|
|
public AbsolutePath DownloadLocation { get; set; }
|
2019-12-10 00:46:44 +00:00
|
|
|
|
public bool AutomaticallyOverrideExistingInstall { get; set; }
|
2019-11-06 03:22:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-11-14 05:28:27 +00:00
|
|
|
|
public class CompilerSettings
|
|
|
|
|
{
|
|
|
|
|
public ModManager LastCompiledModManager { get; set; }
|
2020-03-28 20:04:22 +00:00
|
|
|
|
public AbsolutePath OutputLocation { get; set; }
|
2019-11-14 05:28:27 +00:00
|
|
|
|
public MO2CompilationSettings MO2Compilation { get; } = new MO2CompilationSettings();
|
|
|
|
|
public VortexCompilationSettings VortexCompilation { get; } = new VortexCompilationSettings();
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-06 04:49:11 +00:00
|
|
|
|
[JsonObject(MemberSerialization.OptOut)]
|
|
|
|
|
public class PerformanceSettings : ViewModel
|
|
|
|
|
{
|
2020-03-04 11:21:44 +00:00
|
|
|
|
private bool _manual;
|
|
|
|
|
public bool Manual { get => _manual; set => RaiseAndSetIfChanged(ref _manual, value); }
|
2020-01-06 04:49:11 +00:00
|
|
|
|
|
2020-03-04 11:21:44 +00:00
|
|
|
|
private byte _maxCores = byte.MaxValue;
|
|
|
|
|
public byte MaxCores { get => _maxCores; set => RaiseAndSetIfChanged(ref _maxCores, value); }
|
2020-01-06 04:49:11 +00:00
|
|
|
|
|
2020-03-04 11:21:44 +00:00
|
|
|
|
private Percent _targetUsage = Percent.One;
|
|
|
|
|
public Percent TargetUsage { get => _targetUsage; set => RaiseAndSetIfChanged(ref _targetUsage, value); }
|
2020-01-10 04:55:57 +00:00
|
|
|
|
|
|
|
|
|
public void AttachToBatchProcessor(ABatchProcessor processor)
|
|
|
|
|
{
|
|
|
|
|
processor.Add(
|
|
|
|
|
this.WhenAny(x => x.Manual)
|
|
|
|
|
.Subscribe(processor.ManualCoreLimit));
|
|
|
|
|
processor.Add(
|
|
|
|
|
this.WhenAny(x => x.MaxCores)
|
|
|
|
|
.Subscribe(processor.MaxCores));
|
|
|
|
|
processor.Add(
|
|
|
|
|
this.WhenAny(x => x.TargetUsage)
|
|
|
|
|
.Subscribe(processor.TargetUsagePercent));
|
|
|
|
|
}
|
2020-01-06 04:49:11 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-11-14 05:28:27 +00:00
|
|
|
|
public class CompilationModlistSettings
|
2019-11-06 03:22:38 +00:00
|
|
|
|
{
|
|
|
|
|
public string ModListName { get; set; }
|
|
|
|
|
public string Author { get; set; }
|
|
|
|
|
public string Description { get; set; }
|
|
|
|
|
public string Website { get; set; }
|
2019-12-20 07:14:43 +00:00
|
|
|
|
public bool ReadmeIsWebsite { get; set; }
|
2019-11-06 03:22:38 +00:00
|
|
|
|
public string Readme { get; set; }
|
2020-03-28 20:04:22 +00:00
|
|
|
|
public AbsolutePath SplashScreen { get; set; }
|
2019-11-14 05:28:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class MO2CompilationSettings
|
|
|
|
|
{
|
2020-03-28 20:04:22 +00:00
|
|
|
|
public AbsolutePath DownloadLocation { get; set; }
|
|
|
|
|
public AbsolutePath LastCompiledProfileLocation { get; set; }
|
|
|
|
|
public Dictionary<AbsolutePath, CompilationModlistSettings> ModlistSettings { get; } = new Dictionary<AbsolutePath, CompilationModlistSettings>();
|
2019-11-14 05:28:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class VortexCompilationSettings
|
|
|
|
|
{
|
|
|
|
|
public Game LastCompiledGame { get; set; }
|
2019-11-16 23:10:17 +00:00
|
|
|
|
public Dictionary<Game, VortexGameSettings> ModlistSettings { get; } = new Dictionary<Game, VortexGameSettings>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class VortexGameSettings
|
|
|
|
|
{
|
|
|
|
|
public string GameLocation { get; set; }
|
2019-11-17 03:09:46 +00:00
|
|
|
|
public string DownloadLocation { get; set; }
|
|
|
|
|
public string StagingLocation { get; set; }
|
2019-11-16 23:10:17 +00:00
|
|
|
|
public CompilationModlistSettings ModlistSettings { get; } = new CompilationModlistSettings();
|
2019-11-06 03:22:38 +00:00
|
|
|
|
}
|
|
|
|
|
}
|