private async Task WriteFilter(Filter baseFilter, bool isGeneratingStylesAndSeed, string outputFolder = null) { if (File.Exists(outputFolder + "RESULTS.zip")) { File.Delete(outputFolder + "RESULTS.zip"); } var oldSeedVersion = baseFilter.GetHeaderMetaData("version:"); var newVersion = LocalConfiguration.GetInstance().YieldConfiguration().First(x => x.Key == "Version Number").Value; if (oldSeedVersion == newVersion) { var isStopping = !InfoPopUpMessageDisplay.DisplayQuestionMessageBox("Error: \n\nVersion did not change!\nDo you want to continue the filter generation?"); if (isStopping) { return; } } else { baseFilter.SetHeaderMetaData("version:", newVersion); } await FilterWriter.WriteFilter(baseFilter, isGeneratingStylesAndSeed, outputFolder, Configuration.AppSettings["StyleSheet Folder"]); }
public Dictionary <string, ItemList <FilterEconomy.Model.NinjaItem> > PerformRequest(string league, string variation, string branchKey, string url, string prefix, RequestType requestType, string baseStoragePath, string ninjaUrl) { var economySegmentBranch = url; var directoryPath = $"{baseStoragePath}/{variation}/{league}/{StringWork.GetDateString()}"; var fileName = $"{branchKey}.txt"; var fileFullPath = $"{directoryPath}/{fileName}"; string responseString; try { if (File.Exists(fileFullPath) && requestType != RequestType.ForceOnline) { // Load existing file responseString = FileWork.ReadFromFile(fileFullPath); } else { // Request online file var urlRequest = $"{ninjaUrl}{economySegmentBranch}{prefix}league={variation}"; responseString = new RestRequest(urlRequest).Execute(); // poeNinja down -> use most recent local file if (responseString == null || responseString.Length < 400) { var recentFile = Directory.EnumerateDirectories(directoryPath.Replace(StringWork.GetDateString(), "")).OrderByDescending(Directory.GetCreationTime).FirstOrDefault(); if (recentFile != null) { responseString = FileWork.ReadFromFile(recentFile + "/" + fileName); if (responseString != null && responseString.Length >= 400) { if (!didShowNinjaOfflineMessage) { InfoPopUpMessageDisplay.ShowInfoMessageBox("Could not connect to poeNinja. used recent local file instead: " + recentFile + "/" + fileName); this.didShowNinjaOfflineMessage = true; } } } } // Store locally Task.Run(() => FileWork.WriteTextAsync(fileFullPath, responseString)); } if (responseString == null || responseString.Length < 400) { InfoPopUpMessageDisplay.ShowError("poeNinja web request or file content is null/short:\n\n\n" + responseString); responseString = ""; } } catch { throw new Exception("Failed to load economy file: " + branchKey); } var result = NinjaParser.CreateOverviewDictionary(NinjaParser.ParseNinjaString(responseString).ToList()); return(result); }
private static bool VerifyFilter(Filter baseFilter) { var errorMsg = new List <string>(); var oldSeedVersion = baseFilter.GetHeaderMetaData("version:"); var newVersion = LocalConfiguration.GetInstance().YieldConfiguration().First(x => x.Key == "Version Number").Value; if (oldSeedVersion == newVersion) { errorMsg.Add("Version did not change!"); } else { baseFilter.SetHeaderMetaData("version:", newVersion); } // add missing UP command tags // currently unused/unnecessary plus bug: trinkets/amulets/... should not be affected by this!! // foreach (var entry in baseFilter.FilterEntries) // { // if (entry.Header.Type != FilterConstants.FilterEntryType.Content) continue; // // if (!(entry?.Content?.Content?.ContainsKey("ItemLevel") ?? false)) continue; // if (entry.Content.Content["ItemLevel"]?.Count != 1) continue; // var ilvl = entry.Content.Content["ItemLevel"].Single().Value as NumericValueContainer; // if (ilvl == null) continue; // if (ilvl.Value != "65" || ilvl.Operator != ">=") continue; // // if (!(entry?.Content?.Content?.ContainsKey("SetTextColor") ?? false)) continue; // // if (entry.Header.HeaderValue == "Hide") continue; // // if (!entry.Content.Content.ContainsKey("Rarity")) continue; // var rarity = entry.Content.Content["Rarity"].Single().Value as NumericValueContainer; // if (rarity.Value != "Rare") continue; // if (!string.IsNullOrEmpty(rarity.Operator)) // { // if (rarity.Operator.Contains("<") || rarity.Operator.Contains(">")) continue; // } // // if (entry.Header.GenerationTags.Any(tag => tag is RaresUpEntryCommand)) continue; // // InfoPopUpMessageDisplay.ShowInfoMessageBox("Adding UP tag to this entry:\n\n\n" + string.Join("\n", entry.Serialize())); // entry.Header.GenerationTags.Add(new RaresUpEntryCommand(entry as FilterEntry) { Value = "UP", Strictness = -1}); // } // FilterStyleVerifyer.Run(baseFilter); // todo: re-enable this when the filter doesnt have the tons of errors anymore if (errorMsg.Count > 0) { var isStopping = !InfoPopUpMessageDisplay.DisplayQuestionMessageBox("Error: \n\n" + string.Join("\n", errorMsg) + "\n\nDo you want to continue the filter generation?"); return(isStopping); } return(false); }
private void FixStyleValues() { foreach (var pair in nameToValuesDic.Where(x => x.Value.Count > 1)) { var index = 0; while (true) { var msg = pair.Key + " has multiple values:\n"; var i = 0; string selectedValue = null; foreach (var valueData in pair.Value) { msg += "#" + i + ": " + valueData.Key + " (used " + valueData.Value + " times) "; if (index == i) { msg += "<--"; selectedValue = valueData.Key; } msg += " \n"; i++; } msg += "Do you want to select value #" + index + " as style value?"; var res = InfoPopUpMessageDisplay.DisplayQuestionMessageBox(msg); if (res) { var removed = new List <KeyValuePair <string, int> >(pair.Value.Where(x => x.Key != selectedValue)); foreach (var keyValuePair in removed) { var oldValue = keyValuePair.Key; this.nameToValuesDic.Values.ToList().ForEach(x => x.Remove(oldValue)); this.valueToNamesDic.Remove(oldValue); if (this.valueToNamesDic[selectedValue].ContainsKey(pair.Key)) { this.valueToNamesDic[selectedValue][pair.Key] += keyValuePair.Value; } else { throw new Exception("unexpected error in filterStyleVerifyer"); } } break; } index++; } } }
public MainWindow() { InfoPopUpMessageDisplay.InitExceptionHandling(); ConcreteEnrichmentProcedures.Initialize(); // Loads and Parses filter, then loads economy, tierlists, aspects, suggestions this.FilterAccessFacade.PrimaryFilter = this.PerformFilterWork(); LoadAllComponents(); // Initialize Settings this.InitializeComponent(); this.DataContext = new MainWindowViewModel(); }
public MainWindow() { InfoPopUpMessageDisplay.InitExceptionHandling(); ConcreteEnrichmentProcedures.Initialize(); // Initialize Modules this.FilterAccessFacade.PrimaryFilter = this.PerformFilterWork(); LoadAllComponents(); // Initialize Settings this.InitializeComponent(); this.DataContext = new MainWindowViewModel(); Closing += this.OnWindowClose; }
private void SelectSeedFilterFile(object sender, RoutedEventArgs e) { var fd = new OpenFileDialog(); if (fd.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } var filePath = fd.FileName; var lineList = FileWork.ReadLinesFromFile(filePath); if (lineList == null || lineList.Count < 4500) { InfoPopUpMessageDisplay.ShowError("Warning: (seed) filter result line count: " + lineList?.Count); } this.FilterAccessFacade.PrimaryFilter = new Filter(lineList); this.ResetAllComponents(); this.LoadAllComponents(); this.EventGrid.Publish(); }
public void LoadFromSaveFile(string branchKey) { var filePath = this.GetItemInfoSaveFilePath(branchKey); if (File.Exists(filePath)) { var fileText = File.ReadAllText(filePath); if (fileText.Length < 2) { InfoPopUpMessageDisplay.ShowError("ItemAspect saveFile empty for: " + branchKey); } this.Deserialize(branchKey, fileText); } else { InfoPopUpMessageDisplay.ShowError("no ItemAspect saveFile for: " + branchKey); } var economyData = EconomyRequestFacade.GetInstance(); this.MigrateAspectDataToEcoData(economyData, branchKey); }
private void FixStyleNames() { foreach (var pair in valueToNamesDic.Where(x => x.Value.Count > 1)) { var index = 0; while (true) { var msg = ident + " " + pair.Key + " has multiple style names:\n"; var i = 0; string selectedName = null; foreach (var nameData in pair.Value) { msg += "#" + i + ": " + nameData.Key + " (used " + nameData.Value + " times) "; if (index == i) { msg += "<--"; selectedName = nameData.Key; } msg += " \n"; i++; } msg += "Do you want to select the name #" + index + " as style name?"; var res = InfoPopUpMessageDisplay.DisplayQuestionMessageBox(msg); if (res) { pair.Value.RemoveAll(x => x.Key != selectedName); break; } index++; } } }
private Filter PerformFilterWork() { var outputFolder = Configuration.AppSettings["Output Folder"]; var defaultPath = outputFolder + "\\Unnamed filter - SEED (SeedFilter) .filter"; string filePath; if (System.IO.File.Exists(defaultPath)) { // InfoPopUpMessageDisplay.ShowInfoMessageBox("unnamed seed used"); filePath = defaultPath; } else { this.SelectSeedFilterFile(null, null); return(this.FilterAccessFacade.PrimaryFilter); } this.FilterRawString = FileWork.ReadLinesFromFile(filePath); if (this.FilterRawString == null || this.FilterRawString.Count < 4500) { InfoPopUpMessageDisplay.ShowError("Warning: (seed) filter result line count: " + this.FilterRawString?.Count); } return(new Filter(this.FilterRawString)); }
public static async Task WriteFilter(Filter baseFilter, bool isGeneratingStylesAndSeed, string outputFolder = null) { var isStopping = VerifyFilter(baseFilter); if (isStopping) { return; } new FilterTableOfContentsCreator(baseFilter).Run(); const string filterName = "NeverSink's"; if (outputFolder == null) { outputFolder = Configuration.AppSettings["Output Folder"]; } var styleSheetFolderPath = Configuration.AppSettings["StyleSheet Folder"]; var generationTasks = new List <Task>(); var seedFilterString = baseFilter.Serialize(); if (isGeneratingStylesAndSeed) { var seedPath = outputFolder + "ADDITIONAL-FILES\\SeedFilter\\"; if (!Directory.Exists(seedPath)) { Directory.CreateDirectory(seedPath); } seedPath += filterName + " filter - SEED (SeedFilter) .filter"; generationTasks.Add(FileWork.WriteTextAsync(seedPath, seedFilterString)); } baseFilter = new Filter(seedFilterString); // we do not want to edit the seedFilter directly and execute its tag commands baseFilter.ExecuteCommandTags(); var baseFilterString = baseFilter.Serialize(); if (baseFilterString == null || baseFilterString.Count < 4500) { InfoPopUpMessageDisplay.ShowError("Warning: (seed) filter result line count: " + baseFilterString?.Count); } for (var strictnessIndex = 0; strictnessIndex < FilterConstants.FilterStrictnessLevels.Count; strictnessIndex++) { if (isGeneratingStylesAndSeed) { foreach (var style in FilterConstants.FilterStyles) { if (style.ToLower() == "default" || style.ToLower() == "backup" || style.ToLower() == "streamsound") { continue; } generationTasks.Add(GenerateFilter_Inner(style, strictnessIndex)); } } // default style generationTasks.Add(GenerateFilter_Inner("", strictnessIndex)); } if (isGeneratingStylesAndSeed) { generationTasks.Add(GenerateFilter_Inner("", 3, 2, explicitName: "NeverSink's filter - 1X-ConStrict")); generationTasks.Add(GenerateFilter_Inner("", 4, 2, explicitName: "NeverSink's filter - 2X-ConStrict")); generationTasks.Add(GenerateFilter_Inner("", 4, 3, explicitName: "NeverSink's filter - 3X-ConStrict")); generationTasks.Add(GenerateFilter_Inner("", 5, 3, explicitName: "NeverSink's filter - 4X-ConStrict")); generationTasks.Add(GenerateFilter_Inner("", 6, 3, explicitName: "NeverSink's filter - 5X-ConStrict")); } await Task.WhenAll(generationTasks); InfoPopUpMessageDisplay.ShowInfoMessageBox("Filter generation successfully done!"); // local func async Task GenerateFilter_Inner(string style, int strictnessIndex, int?consoleStrictness = null, string explicitName = null) { var filePath = outputFolder; var fileName = filterName + " filter - " + strictnessIndex + "-" + FilterConstants.FilterStrictnessLevels[strictnessIndex].ToUpper(); var filter = new Filter(baseFilterString); new FilterTableOfContentsCreator(filter).Run(); filter.ExecuteStrictnessCommands(strictnessIndex, consoleStrictness); if (style != "") { new StyleGenerator(filter, styleSheetFolderPath + style + ".fsty", style).Apply(); filePath += "(STYLE) " + style.ToUpper() + "\\"; fileName += " (" + style + ") "; } if (consoleStrictness.HasValue) { // little dirty fix filePath += "(Console-Strictness)\\"; fileName += " Console-Strictness "; } if (explicitName != null) { fileName = explicitName; } if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } var result = filter.Serialize(); if (result.Count <= seedFilterString?.Count) { InfoPopUpMessageDisplay.ShowError("Error: style/strictness variant is smaller size than seed"); } await FileWork.WriteTextAsync(filePath + "\\" + fileName + ".filter", result); } }