Merge pull request #237 from wabbajack-tools/set-screen-size

Implement screen size auto-set for MO2 games
This commit is contained in:
Timothy Baldridge 2019-12-05 22:28:09 -07:00 committed by GitHub
commit ceebe0b745
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 2 deletions

View File

@ -3,6 +3,9 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using Alphaleonis.Win32.Filesystem;
using IniParser;
using IniParser.Parser;
using Wabbajack.Common;
using Wabbajack.Lib.CompilationSteps.CompilationErrors;
using Wabbajack.Lib.Downloaders;
@ -34,7 +37,7 @@ namespace Wabbajack.Lib
protected override bool _Begin()
{
ConfigureProcessor(17, RecommendQueueSize());
ConfigureProcessor(18, RecommendQueueSize());
var game = GameRegistry.Games[ModList.GameType];
if (GameFolder == null)
@ -112,6 +115,9 @@ namespace Wabbajack.Lib
UpdateTracker.NextStep("Generating Merges");
zEditIntegration.GenerateMerges(this);
UpdateTracker.NextStep("Updating System-specific ini settings");
SetScreenSizeInPrefs();
UpdateTracker.NextStep("Installation complete! You may exit the program.");
return true;
}
@ -256,6 +262,23 @@ namespace Wabbajack.Lib
}
}
private void SetScreenSizeInPrefs()
{
foreach (var file in Directory.EnumerateFiles(Path.Combine(OutputFolder, "profiles"), "*refs.ini",
DirectoryEnumerationOptions.Recursive))
{
var parser = new FileIniDataParser();
var data = parser.ReadFile(file);
if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null)
{
data.Sections["Display"]["iSize W"] = SystemParameters.PrimaryScreenWidth.ToString();
data.Sections["Display"]["iSize H"] = SystemParameters.PrimaryScreenHeight.ToString();
}
parser.WriteFile(file, data);
}
}
private void WriteRemappedFile(RemappedInlineFile directive)
{
var data = Encoding.UTF8.GetString(LoadBytesFromPath(directive.SourceDataID));

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Wabbajack.Common;
using Wabbajack.Lib;
using Wabbajack.Lib.CompilationSteps.CompilationErrors;
using File = Alphaleonis.Win32.Filesystem.File;
@ -109,7 +110,6 @@ namespace Wabbajack.Test
[TestMethod]
public void CleanedESMTest()
{
var profile = utils.AddProfile();
var mod = utils.AddMod("Cleaned ESMs");
var update_esm = utils.AddModFile(mod, @"Update.esm", 10);
@ -131,6 +131,29 @@ namespace Wabbajack.Test
Assert.IsInstanceOfType(exception.InnerExceptions.First(), typeof(InvalidGameESMError));
}
[TestMethod]
public void SetScreenSizeTest()
{
var profile = utils.AddProfile();
var mod = utils.AddMod("dummy");
utils.Configure();
File.WriteAllLines(Path.Combine(utils.MO2Folder, "profiles", profile, "somegameprefs.ini"),
new List<string>
{
"[Display]",
"iSize H=3",
"iSize W=-200"
});
var modlist = CompileAndInstall(profile);
var ini = Path.Combine(utils.InstallFolder, "profiles", profile, "somegameprefs.ini").LoadIniFile();
Assert.AreEqual(System.Windows.SystemParameters.PrimaryScreenHeight.ToString(), ini?.Display?["iSize H"]);
Assert.AreEqual(System.Windows.SystemParameters.PrimaryScreenWidth.ToString(), ini?.Display?["iSize W"]);
}
[TestMethod]
public void UnmodifiedInlinedFilesArePulledFromArchives()
{