internal static void ApplyQueries(FilterCriteria criteria, string query) { foreach (Match match in query_syntax_regex.Matches(query)) { var key = match.Groups["key"].Value.ToLower(); var op = match.Groups["op"].Value; var value = match.Groups["value"].Value; parseKeywordCriteria(criteria, key, value, op); query = query.Replace(match.ToString(), ""); } criteria.SearchText = query; }
public FilterCriteria CreateCriteria() { var query = searchTextBox.Text; var criteria = new FilterCriteria { Group = groupMode.Value, Sort = sortMode.Value, AllowConvertedBeatmaps = showConverted.Value, Ruleset = ruleset.Value }; FilterQueryParser.ApplyQueries(criteria, query); return(criteria); }
public void Filter(FilterCriteria newCriteria = null, bool debounce = true) { if (newCriteria != null) { criteria = newCriteria; } Action perform = delegate { filterTask = null; criteria.Filter(groups); var filtered = new List <BeatmapGroup>(groups); scrollableContent.Clear(false); panels.Clear(); groups.Clear(); foreach (var g in filtered) { addGroup(g); } computeYPositions(); if (selectedGroup == null || selectedGroup.State == BeatmapGroupState.Hidden) { SelectNext(); } else { selectGroup(selectedGroup, selectedPanel); } }; filterTask?.Cancel(); filterTask = null; if (debounce) { filterTask = Scheduler.AddDelayed(perform, 250); } else { perform(); } }
private static bool tryParseKeywordCriteria(FilterCriteria criteria, string key, string value, Operator op) { switch (key) { case "star": case "stars": return(TryUpdateCriteriaRange(ref criteria.StarDifficulty, op, value, 0.01d / 2)); case "ar": return(TryUpdateCriteriaRange(ref criteria.ApproachRate, op, value)); case "dr": case "hp": return(TryUpdateCriteriaRange(ref criteria.DrainRate, op, value)); case "cs": return(TryUpdateCriteriaRange(ref criteria.CircleSize, op, value)); case "od": return(TryUpdateCriteriaRange(ref criteria.OverallDifficulty, op, value)); case "bpm": return(TryUpdateCriteriaRange(ref criteria.BPM, op, value, 0.01d / 2)); case "length": return(tryUpdateLengthRange(criteria, op, value)); case "divisor": return(TryUpdateCriteriaRange(ref criteria.BeatDivisor, op, value, tryParseInt)); case "status": return(TryUpdateCriteriaRange(ref criteria.OnlineStatus, op, value, (string s, out BeatmapSetOnlineStatus val) => Enum.TryParse(value, true, out val))); case "creator": return(TryUpdateCriteriaText(ref criteria.Creator, op, value)); case "artist": return(TryUpdateCriteriaText(ref criteria.Artist, op, value)); default: return(criteria.RulesetCriteria?.TryParseCustomKeywordCriteria(key, op, value) ?? false); } }
internal static void ApplyQueries(FilterCriteria criteria, string query) { foreach (Match match in query_syntax_regex.Matches(query)) { var keyTextual = match.Groups["keyTextual"].Value.ToLower(); var opTextual = match.Groups["opTextual"].Value; var valueTextual = match.Groups["valueTextual"].Value; var keyNumerical = match.Groups["keyNumerical"].Value; /*Operator used before the key needs to be inverted because when e.g. "4<stars<5" * is decomposited it actually means "stars<4" and "stars<5", but in order for * the expression to be correct we need the first bit to be "stars>4". */ var opPreNumerical = invertPreNumericalOperator(match.Groups["opPreNumerical"].Value); var valuePreNumerical = match.Groups["valuePreNumerical"].Value; var opPostNumerical = match.Groups["opPostNumerical"].Value; var valuePostNumerical = match.Groups["valuePostNumerical"].Value; if (opTextual.Length != 0 || valueTextual.Length != 0) { parseKeywordCriteria(criteria, keyTextual, valueTextual, opTextual); } if (opPreNumerical.Length != 0 || valuePreNumerical.Length != 0) { parseKeywordCriteria(criteria, keyNumerical, valuePreNumerical, opPreNumerical); } if (opPostNumerical.Length != 0 || valuePostNumerical.Length != 0) { parseKeywordCriteria(criteria, keyNumerical, valuePostNumerical, opPostNumerical); } query = query.Replace(match.ToString(), ""); } criteria.SearchText = query; }
public FilterCriteria CreateCriteria() { var query = searchTextBox.Text; var criteria = new FilterCriteria { Group = groupMode.Value, Sort = sortMode.Value, AllowConvertedBeatmaps = showConverted.Value, Ruleset = ruleset.Value, Collection = collectionDropdown?.Current.Value.Collection }; if (!minimumStars.IsDefault) criteria.UserStarDifficulty.Min = minimumStars.Value; if (!maximumStars.IsDefault) criteria.UserStarDifficulty.Max = maximumStars.Value; FilterQueryParser.ApplyQueries(criteria, query); return criteria; }
private void filterChanged(FilterCriteria criteria, bool debounce = true) { carousel.Filter(criteria, debounce); }