public MixinManager() { MemoryAnalyzer.AddTrackedMemoryItem(@"Mixin Library Panel", new WeakReference(this)); DataContext = this; MixinHandler.LoadME3TweaksPackage(); AvailableOfficialMixins.ReplaceAll(MixinHandler.ME3TweaksPackageMixins.OrderBy(x => x.PatchName)); var backupPath = Utilities.GetGameBackupPath(Mod.MEGame.ME3); if (backupPath != null) { var dlcPath = MEDirectories.DLCPath(backupPath, Mod.MEGame.ME3); var headerTranslation = ModJob.GetHeadersToDLCNamesMap(Mod.MEGame.ME3); foreach (var mixin in AvailableOfficialMixins) { mixin.UIStatusChanging += MixinUIStatusChanging; if (mixin.TargetModule == ModJob.JobHeader.TESTPATCH) { string biogame = MEDirectories.BioGamePath(backupPath); var sfar = Path.Combine(biogame, @"Patches", @"PCConsole", @"Patch_001.sfar"); if (File.Exists(sfar)) { mixin.CanBeUsed = true; } } else if (mixin.TargetModule != ModJob.JobHeader.BASEGAME) { //DLC var resolvedPath = Path.Combine(dlcPath, headerTranslation[mixin.TargetModule]); if (Directory.Exists(resolvedPath)) { mixin.CanBeUsed = true; } } else { //BASEGAME mixin.CanBeUsed = true; } } } else { BottomLeftMessage = M3L.GetString(M3L.string_noGameBackupOfME3IsAvailableMixinsCannotBeUsedWithoutABackup); } ResetMixinsUIState(); LoadCommands(); InitializeComponent(); }
public void TestMixins() { GlobalTest.Init(); var me3BackupPath = BackupService.GetGameBackupPath(MEGame.ME3); if (me3BackupPath != null) { GlobalTest.CreateScratchDir(); MixinHandler.LoadME3TweaksPackage(); // We can conduct this test var mixins = MixinHandler.ME3TweaksPackageMixins.Where(x => !x.IsFinalizer).ToList(); MixinHandler.LoadPatchDataForMixins(mixins); List <string> failedMixins = new List <string>(); void failedApplicationCallback(string str) { failedMixins.Add(str); } var compilingListsPerModule = MixinHandler.GetMixinApplicationList(mixins, failedApplicationCallback); //Mixins are ready to be applied var outdir = Path.Combine(Path.Combine(GlobalTest.GetScratchDir(), "MixinTest")); Utilities.DeleteFilesAndFoldersRecursively(outdir); Directory.CreateDirectory(outdir); foreach (var mapping in compilingListsPerModule) { MixinManager.ApplyMixinsToModule(mapping, outdir, null, failedApplicationCallback); } MixinHandler.FreeME3TweaksPatchData(); GlobalTest.DeleteScratchDir(); if (failedMixins.Any()) { Assert.Fail($"MixinTests failed. {failedMixins.Count} mixins failed to apply."); } } else { Console.WriteLine(@"No backup for ME3 is available. MixinTests will be skipped."); } }