Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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));
                }
            }
        }
Example #6
0
 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);
             });
         }
     }
 }