public async Task <List <IconDto> > ExploreIconsAsync(string query, int count, int skip) { query = query.ToLower().Trim(); query = query.RemovePolish(); var counter = new ExploreCounter(count); var foundIcons = new List <IconDto>(); List <Action <List <IconDto>, string, int, ExploreCounter, int> > ListOfActions = new List <Action <List <IconDto>, string, int, ExploreCounter, int> >() { FillFromSongs, FillFromArchSongs, FillFromUsersYouTubes, FillBestSellers, FillFromTvMoviesArchive, FillFromUsersSpotify }; int deep = 0; if (query.Length > 7) { //deep = 5; deep = 2; await this.GoFindInDeepAsync(foundIcons, query, deep, counter, ListOfActions, skip); } else { for (int i = 1; i < 3; i++) { if (counter.count > 0) { deep = i; await this.GoFindInDeepAsync(foundIcons, query, i, counter, ListOfActions, skip); } else { break; } } } foundIcons.Reverse(); //var results = new ExploreResultsDto(foundIcons, deep, counter.count); return(foundIcons); }
private void FillFromUsersSpotify(List <IconDto> listToFill, string query, int deep, ExploreCounter count, int skip) { string pattern = $@"^{query}[/w]*"; var regStart = new Regex(pattern); var exploreSongs = _liveContext.Folders.Where(x => x.IsShared).Include(x => x.UserSpotify).SelectMany(x => x.UserYouTubes).ToList() //var exploreSongs = _liveContext.UserYoutubes .Where(x => x.GetTitle().Match(query, regStart, deep) || x.GetTags().Any(t => t.Match(query, regStart, deep))) .Where(x => !listToFill.Select(y => y.id).Contains(x.VideoId)) .Distinct(new UserYTComparer()) .Skip(skip).Take(count.count) .Select(s => _autoMapper.Map <IconDto>(s)); count.count -= exploreSongs.Count(); listToFill.AddRange(exploreSongs); }
private void FillBestSellers(List <IconDto> listToFill, string query, int deep, ExploreCounter count, int skip) { string pattern = $@"^{query}[/w]*"; var regStart = new Regex(pattern); var exploreBooks = _liveContext.Bestsellers.ToList() .Where(x => x.getTags().Any(t => t.Match(query, regStart, deep))) .Where(x => !listToFill.Select(y => y.groupBook).Contains(x.GroupNo)) .Distinct(new BookComparer()) .Skip(skip).Take(count.count) .Select(s => _autoMapper.Map <IconDto>(s)); count.count -= exploreBooks.Count(); foreach (var bookIcon in exploreBooks) { bookIcon.setLocation(false); listToFill.Add(bookIcon); } }
private void FillFromArchSongs(List <IconDto> listToFill, string query, int deep, ExploreCounter count, int skip) { string pattern = $@"^{query}[/w]*"; var regStart = new Regex(pattern); var exploreSongs = _liveContext.ArchiveSongs.Include(x => x.YouTube).ToList() .Where(x => x.YouTube.HasYTId()) .Where(x => x.getTags().Any(t => t.Match(query, regStart, deep))) .Where(x => !listToFill.Select(y => y.id).Contains(x.YouTube.VideoID)) .Distinct(new ArchiveComparer()) .Skip(skip).Take(count.count) .Select(s => _autoMapper.Map <IconDto>(s)); count.count -= exploreSongs.Count(); listToFill.AddRange(exploreSongs); }
private void FillFromTvMovies(List <IconDto> listToFill, string query, int deep, ExploreCounter count, int skip) { string pattern = $@"^{query}[/w]*"; var regStart = new Regex(pattern); var exploreMovies = _liveContext.TVMovies.Include(x => x.YouTube).ToList() .Where(x => x.YouTube.HasYTId()) .Where(x => x.getTags().Any(t => t.Match(query, regStart, deep))) .Where(x => !listToFill.Select(y => y.id).Contains(x.YouTube.VideoID)) .ToList(); if (exploreMovies.Count > 0) { var hashVideos = new HashSet <string>(exploreMovies.Select(x => x.YouTube.VideoID)).ToList(); hashVideos = hashVideos.Skip(skip).Take(count.count).ToList(); count.count -= hashVideos.Count; foreach (var vidId in hashVideos) { var songToAdd = exploreMovies.FirstOrDefault(x => x.YouTube.VideoID == vidId); listToFill.Add(_autoMapper.Map <IconDto>(songToAdd)); } } }
private async Task GoFindInDeepAsync(List <IconDto> listToFill, string query, int deep, ExploreCounter count, List <Action <List <IconDto>, string, int, ExploreCounter, int> > ListOfActions, int skip) { foreach (var findAction in ListOfActions) { if (count.count > 0) { await Task.Run(() => { findAction.Invoke(listToFill, query, deep, count, skip); }); } } }