From b069e48fab91d578c01fe3947078e985239a2728 Mon Sep 17 00:00:00 2001 From: mikx Date: Sat, 30 Mar 2019 01:14:55 -0400 Subject: [PATCH] 6.0.1 commit --- .vs/PoE-MxFilterGen/v15/.suo | Bin 94208 -> 98304 bytes PoE-MxFilterGen/main.cs | 189 ++++++++++++---------- PoE-MxFilterGen/obj/Debug/mxfiltergen.exe | Bin 304128 -> 305152 bytes PoE-MxFilterGen/obj/Debug/mxfiltergen.pdb | Bin 44544 -> 46592 bytes 4 files changed, 106 insertions(+), 83 deletions(-) diff --git a/.vs/PoE-MxFilterGen/v15/.suo b/.vs/PoE-MxFilterGen/v15/.suo index bc99a0c4fd548f91307edbd03ef4e9de0770f3cb..4c6950c62c8bacd24c9d83517d004ae05f12767c 100644 GIT binary patch delta 5335 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 diff --git a/PoE-MxFilterGen/main.cs b/PoE-MxFilterGen/main.cs index f289a89..51c834e 100644 --- a/PoE-MxFilterGen/main.cs +++ b/PoE-MxFilterGen/main.cs @@ -17,7 +17,7 @@ namespace PoE_MxFilterGen { private static DateTime dt = DateTime.Now; - public static string version = "5.2.1"; + public static string version = "6.0.1"; public static string fDate = string.Format("{0}-{1}-{2}", dt.Day, dt.Month, dt.Year); public static string section = ""; @@ -30,6 +30,8 @@ namespace PoE_MxFilterGen public static int sprog = 0; public static int stotal = 0; + public static bool deb = false; + private static string giturl = ""; public class REMVAR @@ -87,7 +89,7 @@ namespace PoE_MxFilterGen // Check for updates string remote_version = web.ReadString(@"https://data.mxnet.xyz/poe/txt/mxfiltergen_version.txt"); - if (version != remote_version) + if (version != remote_version && deb == false) { Process.Start("PoE-MxFilterGen-Updater.exe"); //Process.GetCurrentProcess().Kill(); @@ -110,25 +112,13 @@ namespace PoE_MxFilterGen // Clean all generated data msg.CMW($"Cleaning the base dirs...", true, 1); - DirectoryInfo dataDir = new DirectoryInfo(@"data\"); - DirectoryInfo genDir = new DirectoryInfo(@"gen\"); - DirectoryInfo strucDir = new DirectoryInfo(@"structure\"); - foreach (FileInfo file in dataDir.GetFiles()) - { - file.Delete(); - } - foreach (FileInfo file in genDir.GetFiles()) - { - file.Delete(); - } - foreach (FileInfo file in strucDir.GetFiles()) - { - file.Delete(); - } + CleanDirData(); // Clean the latest generated filter from settings path msg.CMW($"Cleaning the last filter from path...", true, 1); - File.Delete($@"{path}\My Games\Path of Exile\MxFilter.filter"); + File.Delete($@"{path}\My Games\Path of Exile\MxFilter_Normal.filter"); + File.Delete($@"{path}\My Games\Path of Exile\MxFilter_Strict.filter"); + if (File.Exists($@"{path}\My Games\Path of Exile\MxFilter.filter")) { File.Delete($@"{path}\My Games\Path of Exile\MxFilter.filter"); } // Get latest poe.ninja api msg.CMW($"Downloading the latest API data from poe.ninja...", true, 1); @@ -136,75 +126,82 @@ namespace PoE_MxFilterGen web.SaveString(json.settings.GetAPI() + "GetUniqueWeaponOverview?league=" + league, "data/ninja.weapon.json"); web.SaveString(json.settings.GetAPI() + "GetUniqueAccessoryOverview?league=" + league, "data/ninja.accessory.json"); web.SaveString(json.settings.GetAPI() + "GetUniqueMapOverview?league=" + league, "data/ninja.map.json"); - web.SaveString(json.settings.GetAPI() + "GetDivinationCardsOverview?league=" + league, "data/ninja.card.json"); - - // Setup basic variable - string structure_name = $"{league}"; - string filter_name = "MxFilter"; - - // Get the structure list - var js = web.ReadString($@"{giturl}/PoE-MxFilter-Structure/master/{structure_name}.json"); - RootStructure j = JsonConvert.DeserializeObject(js); + web.SaveString(json.settings.GetAPI() + "GetDivinationCardsOverview?league=" + league, "data/ninja.card.json"); // Get Theme File(s) - web.DownloadFile($@"{giturl}/PoE-MxFilter-Structure/master/{structure_name}/Chancing.json", @"structure\Chancing.json"); + web.DownloadFile($@"{giturl}/PoE-MxFilter-Structure/master/Chancing.json", @"structure\Chancing.json"); - // Read the structure one by one to process gen - // Generator (dlls) are downloaded from the web and executed in a separate AppDomain before the AD is unloaded to execute a new generator. - // As we CAN'T unload an assembly, using AppDomains is the only way we can load/unload multiple assembly in a row. - msg.CMW($@"Generating the filter using {j.structures.Count} source(s)...", true, 1); - ftotal = j.structures.Count; - foreach (var sec in j.structures) + string[] filters = { "Normal", "Strict" }; + + foreach(string f in filters) { - if (sec.gen == true) - { - fprog = fprog + 1; - msg.drawProgress(fprog, ftotal); - //msg.CMW(string.Format("REMOTE_GEN {0}", sec.section), true, 1); - web.DownloadFile($@"{giturl}/PoE-MxFilter-Structure/master/{structure_name}/{sec.section}.dll", $@"structure\{sec.section}.dll"); - json.settings.WriteSection(sec.section); - var bytes = GenerateAssemblyAndGetRawBytes(sec.section); + // Setup basic variable + string filter_name = "MxFilter"; - var appDomain = AppDomain.CreateDomain(sec.section, null, new AppDomainSetup + // Get the structure list + var js = web.ReadString($@"{giturl}/PoE-MxFilter-Structure/master/{f}.json"); + RootStructure j = JsonConvert.DeserializeObject(js); + + // Read the structure one by one to process gen + // Generator (dlls) are downloaded from the web and executed in a separate AppDomain before the AD is unloaded to execute a new generator. + // As we CAN'T unload an assembly, using AppDomains is the only way we can load/unload multiple assembly in a row. + msg.CMW($@"Generating the {f} filter using {j.structures.Count} source(s)...", true, 1); + ftotal = j.structures.Count; + foreach (var sec in j.structures) + { + if (sec.gen == true) { - ShadowCopyFiles = "true", - LoaderOptimization = LoaderOptimization.MultiDomainHost - }); + fprog = fprog + 1; + msg.drawProgress(fprog, ftotal); + //msg.CMW(string.Format("REMOTE_GEN {0}", sec.section), true, 1); + web.DownloadFile($@"{giturl}/PoE-MxFilter-Structure/master/{f}/{sec.section}.dll", $@"structure\{sec.section}.dll"); + json.settings.WriteSection(sec.section); + var bytes = GenerateAssemblyAndGetRawBytes(sec.section); - var assmblyLoaderType = typeof(AssmeblyLoader); - var assemblyLoader = (IAssemblyLoader)appDomain.CreateInstanceFromAndUnwrap(assmblyLoaderType.Assembly.Location, assmblyLoaderType.FullName); - assemblyLoader.Load(bytes); + var appDomain = AppDomain.CreateDomain(sec.section, null, new AppDomainSetup + { + ShadowCopyFiles = "true", + LoaderOptimization = LoaderOptimization.MultiDomainHost + }); - AppDomain.Unload(appDomain); - } - else - { - fprog = fprog + 1; - msg.drawProgress(fprog, ftotal); - //msg.CMW($@"REMOTE_GET {sec.section}", true, 1); - web.SaveString($@"{giturl}/PoE-MxFilter-Structure/master/{structure_name}/{sec.section}.filter", $"structure/{sec.section}.filter"); - } - } + var assmblyLoaderType = typeof(AssmeblyLoader); + var assemblyLoader = (IAssemblyLoader)appDomain.CreateInstanceFromAndUnwrap(assmblyLoaderType.Assembly.Location, assmblyLoaderType.FullName); + assemblyLoader.Load(bytes); - // Create the final filter. - msg.CMW($@"Creating the final filter...", true, 1); - foreach (var sec in j.structures) - { - if (sec.gen == true) - { - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", File.ReadAllText(string.Format("gen\\{0}.filter", sec.section))); - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", "" + Environment.NewLine); - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", "" + Environment.NewLine); + AppDomain.Unload(appDomain); + } + else + { + fprog = fprog + 1; + msg.drawProgress(fprog, ftotal); + //msg.CMW($@"REMOTE_GET {sec.section}", true, 1); + web.SaveString($@"{giturl}/PoE-MxFilter-Structure/master/{f}/{sec.section}.filter", $"structure/{sec.section}.filter"); + } } - else + + // Create the final filter. + msg.CMW($@"Creating the final filter...", true, 1); + foreach (var sec in j.structures) { - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", string.Format("# Section: {0}", sec.section) + Environment.NewLine); - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", "" + Environment.NewLine); - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", File.ReadAllText(string.Format("structure\\{0}.filter", sec.section))); - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", "" + Environment.NewLine); - File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}.filter", "" + Environment.NewLine); + if (sec.gen == true) + { + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", File.ReadAllText(string.Format("gen\\{0}.filter", sec.section))); + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", "" + Environment.NewLine); + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", "" + Environment.NewLine); + } + else + { + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", string.Format("# Section: {0}", sec.section) + Environment.NewLine); + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", "" + Environment.NewLine); + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", File.ReadAllText(string.Format("structure\\{0}.filter", sec.section))); + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", "" + Environment.NewLine); + File.AppendAllText($@"{path}\My Games\Path of Exile\{filter_name}_{f}.filter", "" + Environment.NewLine); + } } - } + ftotal = 0; + fprog = 0; + CleanDir(); + } // Download the sounds from the remote list msg.CMW($@"Downloading the latest sound...", true, 1); @@ -220,14 +217,7 @@ namespace PoE_MxFilterGen } // Clean all generated data - foreach (FileInfo file in genDir.GetFiles()) - { - file.Delete(); - } - foreach (FileInfo file in strucDir.GetFiles()) - { - file.Delete(); - } + CleanDirData(); } } @@ -237,6 +227,39 @@ namespace PoE_MxFilterGen var path = $@"{lp}\structure\{dll}.dll"; return File.ReadAllBytes(path); } + + public static void CleanDirData() + { + DirectoryInfo dataDir = new DirectoryInfo(@"data\"); + DirectoryInfo genDir = new DirectoryInfo(@"gen\"); + DirectoryInfo strucDir = new DirectoryInfo(@"structure\"); + foreach (FileInfo file in dataDir.GetFiles()) + { + file.Delete(); + } + foreach (FileInfo file in genDir.GetFiles()) + { + file.Delete(); + } + foreach (FileInfo file in strucDir.GetFiles()) + { + file.Delete(); + } + } + + public static void CleanDir() + { + DirectoryInfo genDir = new DirectoryInfo(@"gen\"); + DirectoryInfo strucDir = new DirectoryInfo(@"structure\"); + foreach (FileInfo file in genDir.GetFiles()) + { + file.Delete(); + } + foreach (FileInfo file in strucDir.GetFiles()) + { + file.Delete(); + } + } } public interface IAssemblyLoader diff --git a/PoE-MxFilterGen/obj/Debug/mxfiltergen.exe b/PoE-MxFilterGen/obj/Debug/mxfiltergen.exe index 344b262ca2242fda4a64e285826f9af81dd3b9bc..c85c6580dd78e45efbdaf57bbf0c0af6d74d7ed2 100644 GIT binary patch delta 10846 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 Wzh|eJ<;QPU?&{om-97w|?7sor*)g>M diff --git a/PoE-MxFilterGen/obj/Debug/mxfiltergen.pdb b/PoE-MxFilterGen/obj/Debug/mxfiltergen.pdb index 964f4b7897355e0cae74843a1d4a234d87545b5d..39817bcd561202d7dc32f87faddba18d149d6d94 100644 GIT binary patch delta 8453 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 BfSLdR delta 7554 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 I>+VSZ0MBklYXATM