コード例 #1
0
        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"]);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
            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++;
                    }
                }
            }
コード例 #5
0
        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();
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        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();
        }
コード例 #8
0
        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);
        }
コード例 #9
0
            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++;
                    }
                }
            }
コード例 #10
0
        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));
        }
コード例 #11
0
        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);
            }
        }