private static List <ImportedDeck> GetImportedDecks(IEnumerable <HearthMirror.Objects.Deck> decks) { var importedDecks = new List <ImportedDeck>(); var hsDecks = decks.ToList(); foreach (var deck in hsDecks) { var otherDecks = hsDecks.Except(new[] { deck }); var existing = DeckList.Instance.Decks.Where(x => otherDecks.All(d => d.Id != x.HsId)).Select(x => new { Deck = x, IdMatch = x.HsId == deck.Id, CardMatch = x.VersionsIncludingSelf.Select(x.GetVersion).Where(v => v.Cards.Sum(c => c.Count) == 30) .Any(v => deck.Cards.All(c => v.Cards.Any(c2 => c.Id == c2.Id && c.Count == c2.Count))) }).Where(x => x.IdMatch || x.CardMatch).ToList(); if (!existing.Any()) { var iDeck = new ImportedDeck(deck, null); if (!string.IsNullOrEmpty(iDeck.Class)) { importedDecks.Add(iDeck); } } else if (!existing.Any(x => x.IdMatch && x.CardMatch) && existing.Any(x => x.IdMatch ^ x.CardMatch)) { var iDeck = new ImportedDeck(deck, existing.Select(x => x.Deck).ToList()); if (!string.IsNullOrEmpty(iDeck.Class)) { importedDecks.Add(iDeck); } } } return(importedDecks); }
public static List <ImportedDeck> GetImportedDecks(IEnumerable <HearthMirror.Objects.Deck> decks, IList <Deck> localDecks) { var importedDecks = new List <ImportedDeck>(); var hsDecks = decks.ToList(); foreach (var deck in hsDecks) { if (deck.Cards.Count == 1 && deck.Cards.Single().Id == CardIds.Collectible.Neutral.WhizbangTheWonderful) { var data = RemoteConfig.Instance.Data; if (data != null) { var whizbangDecks = data.WhizbangDecks.Select(x => { if (!Hearthstone.CardIds.CardClassHero.TryGetValue(x.Class, out var hero)) { return(null); } return(new HearthMirror.Objects.Deck { Id = x.DeckId, Name = x.Title, Cards = x.Cards.Select(c => new HearthMirror.Objects.Card(Database.GetCardFromDbfId(c.DbfId).Id, c.Count, false)).ToList(), Hero = hero, }); }).Where(x => x != null); importedDecks.AddRange(GetImportedDecks(whizbangDecks, localDecks)); continue; } } var otherDecks = hsDecks.Except(new[] { deck }); var existing = localDecks.Where(x => otherDecks.All(d => d.Id != x.HsId)).Select(x => new { Deck = x, IdMatch = x.HsId == deck.Id, CardMatch = x.VersionsIncludingSelf.Select(x.GetVersion).Where(v => v.Cards.Sum(c => c.Count) == 30) .Any(v => deck.Cards.All(c => v.Cards.Any(c2 => c.Id == c2.Id && c.Count == c2.Count))) }).Where(x => x.IdMatch || x.CardMatch).ToList(); if (!existing.Any()) { var iDeck = new ImportedDeck(deck, null, localDecks); if (!string.IsNullOrEmpty(iDeck.Class)) { importedDecks.Add(iDeck); } } else if (!existing.Any(x => x.IdMatch && x.CardMatch) && existing.Any(x => x.IdMatch ^ x.CardMatch)) { var iDeck = new ImportedDeck(deck, existing.Select(x => x.Deck).ToList(), localDecks); if (!string.IsNullOrEmpty(iDeck.Class)) { importedDecks.Add(iDeck); } } } return(importedDecks); }