public ParsedSongQuery ParseTextQuery(SearchTextQuery textQuery) { var query = textQuery.OriginalQuery; if (string.IsNullOrWhiteSpace(query)) { return(new ParsedSongQuery()); } var trimmed = query.Trim(); var term = GetTerm(trimmed, "id", "tag", "artist-tag", "artist-type", "publish-date"); return((term?.PropertyName) switch { "tag" => new ParsedSongQuery { TagName = term.Value }, "artist-tag" => new ParsedSongQuery { ArtistTag = term.Value }, "artist-type" => new ParsedSongQuery { ArtistType = EnumVal <ArtistType> .ParseSafe(term.Value, ArtistType.Unknown) }, "id" => new ParsedSongQuery { Id = PrimitiveParseHelper.ParseIntOrDefault(term.Value, 0) }, "publish-date" => ParseDateRange(term.Value), _ => ParseReferenceQuery(trimmed, query) ?? new ParsedSongQuery { Name = textQuery }, });
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 }); }
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 }); }
private ParsedSongQuery ParseTextQuery(string query) { if (string.IsNullOrWhiteSpace(query)) { return(new ParsedSongQuery()); } var trimmed = query.Trim(); var term = GetTerm(trimmed, "id", "tag", "artist-tag", "artist-type"); if (term == null) { // Optimization: check prefix, in most cases the user won't be searching by URL if (trimmed.StartsWith("/s/", StringComparison.InvariantCultureIgnoreCase) || trimmed.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { var nicoId = VideoService.NicoNicoDouga.GetIdByUrl(query); if (!string.IsNullOrEmpty(nicoId)) { return new ParsedSongQuery { NicoId = nicoId } } ; var entryId = entryUrlParser.Parse(trimmed, allowRelative: true); if (entryId.EntryType == EntryType.Song) { return new ParsedSongQuery { Id = entryId.Id } } ; } } else { switch (term.PropertyName) { case "tag": return(new ParsedSongQuery { TagName = term.Value }); case "artist-tag": return(new ParsedSongQuery { ArtistTag = term.Value }); case "artist-type": return(new ParsedSongQuery { ArtistType = EnumVal <ArtistType> .ParseSafe(term.Value, ArtistType.Unknown) }); case "id": return(new ParsedSongQuery { Id = PrimitiveParseHelper.ParseIntOrDefault(term.Value, 0) }); } } return(new ParsedSongQuery { Name = trimmed }); }
public ParsedSongQuery ParseTextQuery(SearchTextQuery textQuery) { var query = textQuery.OriginalQuery; if (string.IsNullOrWhiteSpace(query)) { return(new ParsedSongQuery()); } var trimmed = query.Trim(); var term = GetTerm(trimmed, "id", "tag", "artist-tag", "artist-type", "publish-date"); if (term == null) { // Optimization: check prefix, in most cases the user won't be searching by URL if (trimmed.StartsWith("/s/", StringComparison.InvariantCultureIgnoreCase)) { var entryId = entryUrlParser.Parse(trimmed, allowRelative: true); if (entryId.EntryType == EntryType.Song) { return new ParsedSongQuery { Id = entryId.Id } } ; } else if (trimmed.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { // Test PV URL with services that don't require a web call var videoParseResult = VideoServiceHelper.ParseByUrl(query, false, null, VideoService.NicoNicoDouga, VideoService.Youtube, VideoService.Bilibili, VideoService.File, VideoService.LocalFile, VideoService.Vimeo); if (videoParseResult.IsOk) { if (videoParseResult.Service == Domain.PVs.PVService.NicoNicoDouga) { return(new ParsedSongQuery { NicoId = videoParseResult.Id }); } else { return(new ParsedSongQuery { PV = new PVContract { PVId = videoParseResult.Id, Service = videoParseResult.Service } }); } } var entryId = entryUrlParser.Parse(trimmed, allowRelative: false); if (entryId.EntryType == EntryType.Song) { return new ParsedSongQuery { Id = entryId.Id } } ; } } else { switch (term.PropertyName) { case "tag": return(new ParsedSongQuery { TagName = term.Value }); case "artist-tag": return(new ParsedSongQuery { ArtistTag = term.Value }); case "artist-type": return(new ParsedSongQuery { ArtistType = EnumVal <ArtistType> .ParseSafe(term.Value, ArtistType.Unknown) }); case "id": return(new ParsedSongQuery { Id = PrimitiveParseHelper.ParseIntOrDefault(term.Value, 0) }); case "publish-date": return(ParseDateRange(term.Value)); } } return(new ParsedSongQuery { Name = textQuery }); }