Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 7
0
 private void filterChanged(FilterCriteria criteria, bool debounce = true)
 {
     carousel.Filter(criteria, debounce);
 }