コード例 #1
0
        private ActionResult TryRedirect(string filter, EntryType searchType)
        {
            var matchMode = NameMatchMode.Auto;

            filter = FindHelpers.GetMatchModeAndQueryForSearch(filter, ref matchMode);

            switch (searchType)
            {
            case EntryType.Undefined: {
                var result = services.Find(filter, 1, true);

                if (result.OnlyOneItem)
                {
                    if (result.Albums.TotalCount == 1)
                    {
                        return(RedirectToAlbum(result.Albums.Items[0].Id));
                    }

                    if (result.Artists.TotalCount == 1)
                    {
                        return(RedirectToArtist(result.Artists.Items[0].Id));
                    }

                    if (result.Songs.TotalCount == 1)
                    {
                        return(RedirectToSong(result.Songs.Items[0].Id));
                    }

                    if (result.Tags.TotalCount == 1)
                    {
                        return(RedirectToAction("Details", "Tag", new { id = result.Tags.Items[0].Name }));
                    }
                }
            }
            break;

            case EntryType.Artist:
                var artist = artistService.FindArtists(new ArtistQueryParams(filter, null, 0, 2, false, false, matchMode, ArtistSortRule.None, false));
                if (artist.Items.Length == 1)
                {
                    return(RedirectToArtist(artist.Items[0].Id));
                }
                break;

            case EntryType.Album:
                var album = albumService.Find(new AlbumQueryParams(filter, DiscType.Unknown, 0, 2, false, false, matchMode, AlbumSortRule.None, false));
                if (album.Items.Length == 1)
                {
                    return(RedirectToAlbum(album.Items[0].Id));
                }
                break;

            case EntryType.Song:
                var song = songService.Find(new SongQueryParams(filter, null, 0, 2, false, false, matchMode, SongSortRule.None, false, false, null));
                if (song.Items.Length == 1)
                {
                    return(RedirectToSong(song.Items[0].Id));
                }
                break;

            default: {
                var action     = "Index";
                var controller = searchType.ToString();
                return(RedirectToAction(action, controller, new { filter }));
            }
            }

            return(null);
        }
コード例 #2
0
ファイル: QueryService.svc.cs プロジェクト: lordofire/vocadb
 public AllEntriesSearchResult FindAll(string term, int maxResults)
 {
     return(otherService.Find(term, maxResults, true));
 }