Esempio n. 1
0
        private SearchResult FindUnique(string search, IndexFilter filter)
        {
            search = search ?? "";

            // Try searching for partial string first -- if this gives an unique result, go with it
            var characterItems = _index.Where(x => x.Owner.ToLower().Contains(search.ToLower()) && FilterMatch(x, filter));

            // Otherwise, match the full character name
            if (characterItems.Select(x => x.Owner.ToLower()).Distinct().Count() > 1)
            {
                characterItems = _index.Where(x => x.Owner.ToLower() == search.ToLower() && FilterMatch(x, filter));
            }

            search = characterItems.FirstOrDefault()?.Owner ?? search;

            List <IndexItem> results = new List <IndexItem>();

            foreach (var item in characterItems)
            {
                var itemName = ItemHelper.GetFullItemName(item.SourceInstance, item.Source);
                var dupe     = _index.Where(x => x.ItemName.ToLower() == itemName.ToLower() && x.Owner.ToLower() != search.ToLower());

                if (dupe.Count() == 0)
                {
                    results.Add(item);
                    item.DuplicatesOnCharacters = dupe.Select(x => x.Owner).ToList();
                }
            }
            return(new SearchResult(results.OrderBy(x => x.Bag).ToList()));
        }
Esempio n. 2
0
        private bool FilterMatch(IndexItem item, IndexFilter filter)
        {
            if (filter.MaxLevel != null && item.LevelRequirement > filter.MaxLevel)
            {
                return(false);
            }

            if (filter.MinLevel != null && item.LevelRequirement < filter.MinLevel)
            {
                return(false);
            }

            if (filter.IncludeEquipped != null && (!filter.IncludeEquipped.Value && item.IsEquipped))
            {
                return(false);
            }

            if (filter.ItemQualities != null && !filter.ItemQualities.Contains(item.Rarity))
            {
                return(false);
            }

            if (filter.ItemTypes != null && !filter.ItemTypes.Contains(item.ItemType))
            {
                return(false);
            }

            return(true);
        }
Esempio n. 3
0
        private SearchResult Find(string search, IndexFilter filter)
        {
            search = search ?? "";

            var result = _index.Where(x => x.Searchable.Contains(search.ToLower()) && FilterMatch(x, filter));

            if (filter.PageSize != null)
            {
                return(new SearchResult(result.Take(filter.PageSize.Value).ToList(), result.Count()));
            }

            return(new SearchResult(result.ToList()));
        }
Esempio n. 4
0
 public async Task <SearchResult> FindUniqueAsync(string search, IndexFilter filter)
 {
     return(await Task.Run(() => FindUnique(search, filter)).ConfigureAwait(false));
 }