Пример #1
0
        private ParsedArtistQuery ParseTextQuery(string query)
        {
            if (string.IsNullOrWhiteSpace(query))
            {
                return(new ParsedArtistQuery());
            }

            var trimmed = query.Trim();

            var term = SearchWord.GetTerm(trimmed, "id");

            if (term == null)
            {
                var trimmedLc = trimmed.ToLowerInvariant();

                // Optimization: check prefix, in most cases the user won't be searching by URL
                if (trimmedLc.StartsWith("/ar/") || trimmedLc.StartsWith("http"))
                {
                    var entryId = entryUrlParser.Parse(trimmed, allowRelative: true);

                    if (entryId.EntryType == EntryType.Artist)
                    {
                        return new ParsedArtistQuery {
                                   Id = entryId.Id
                        }
                    }
                    ;
                }

                if (trimmedLc.StartsWith("http") || trimmedLc.StartsWith("mylist/") || trimmedLc.StartsWith("user/"))
                {
                    var extUrl = new ArtistExternalUrlParser().GetExternalUrl(trimmed);

                    if (extUrl != null)
                    {
                        return new ParsedArtistQuery {
                                   ExternalLinkUrl = extUrl
                        }
                    }
                    ;
                }
            }
            else
            {
                switch (term.PropertyName)
                {
                case "id":
                    return(new ParsedArtistQuery {
                        Id = PrimitiveParseHelper.ParseIntOrDefault(term.Value, 0)
                    });
                }
            }

            return(new ParsedArtistQuery {
                Name = trimmed
            });
        }
Пример #2
0
        private ParsedArtistQuery ParseTextQuery(SearchTextQuery textQuery)
        {
            if (textQuery.IsEmpty)
            {
                return(new ParsedArtistQuery());
            }

            var trimmed = textQuery.OriginalQuery.Trim();

            var term = SearchWord.GetTerm(trimmed, "id");

            if (term == null)
            {
                var trimmedLc = trimmed.ToLowerInvariant();

                // Optimization: check prefix, in most cases the user won't be searching by URL
                var result = FindInternalUrl(trimmed, trimmedLc);

                if (result != null)
                {
                    return(result);
                }

                result = FindExternalUrl(trimmed, trimmedLc);

                if (result != null)
                {
                    return(result);
                }
            }
            else
            {
                switch (term.PropertyName)
                {
                case "id":
                    return(new ParsedArtistQuery {
                        Id = PrimitiveParseHelper.ParseIntOrDefault(term.Value, 0)
                    });
                }
            }

            return(new ParsedArtistQuery {
                Name = textQuery.Query
            });
        }
Пример #3
0
 private SearchWord GetTerm(string query, params string[] testTerms)
 {
     return(SearchWord.GetTerm(query, testTerms));
 }