public IDeck Transform(IDeck input) { Deck result = new Deck(); ICardEdition minimal = cardDb.Editions.First(); foreach (var c in input.Sections.SelectMany(s => input[s])) { var minEd = cardDb.GetEarliestEditionOfCard(c.Name); if (minEd.CompareTo(minimal) > 0) { minimal = minEd; } } foreach (var s in input.Sections) { var sa = result.EnsureSection(s); foreach (var c in input[s]) { sa.Add(cardDb.CardByName(c.Name, cardDb.GetLatestEditionForCard(c.Name, minimal))); } } return(result); }
static MtgJsonReaderTest_M10() { Dictionary <string, ICardRules> rules = new Dictionary <string, ICardRules>(); MtgJsonSetReader reader = new MtgJsonSetReader(GetPathForEdition("M10"), rules); cards = reader.Cards.ToArray(); edition = reader.Edition; }
public ICardEdition GetLatestEditionForCard(string name, ICardEdition latestAllowedEdition = null) { if (!CardPrintingsByName.TryGetValue(name, out List <ICardEdition> list)) { return(null); } return(latestAllowedEdition == null?list.Last() : list.Last(l => l.CompareTo(latestAllowedEdition) <= 0)); }
private void RemoveFromReferential(ICardInCollectionCount cardInCollectionCount) { //No call to private ICardEdition GetCardEdition(int idGatherer) because call in CheckReferentialLoaded() ICardEdition cardEdition = _cardEditions.GetOrDefault(cardInCollectionCount.IdGatherer); if (_allCardInCollectionCount.TryGetValue(cardEdition.IdCard, out IList <ICardInCollectionCount> list)) { list.Remove(cardInCollectionCount); } }
private void InsertInReferential(ICardEdition cardEdition) { if (_fakeGathererId > cardEdition.IdGatherer) { _fakeGathererId = cardEdition.IdGatherer; } _cardEditions.Add(cardEdition.IdGatherer, cardEdition); _cacheForAllDbInfos = null; }
public IEdition GetEdition(int idGatherer) { using (new ReaderLock(_lock)) { ICardEdition cardEdition = GetCardEdition(idGatherer); if (cardEdition == null) { return(null); } return(_editions.FirstOrDefault(e => e.Id == cardEdition.IdEdition)); } }
public ICard GetCard(int idGatherer) { using (new ReaderLock(_lock)) { ICardEdition cardEdition = GetCardEdition(idGatherer); if (cardEdition == null) { return(null); } return(_cardsbyId.GetOrDefault(cardEdition.IdCard)); } }
private ICardInCollectionCount GetCardCollection(int idCollection, int idGatherer, int idLanguage) { using (new ReaderLock(_lock)) { ICardEdition cardEdition = GetCardEdition(idGatherer); if (_allCardInCollectionCount.TryGetValue(cardEdition.IdCard, out IList <ICardInCollectionCount> list)) { return(list.FirstOrDefault(cicc => cicc.IdCollection == idCollection && cicc.IdGatherer == idGatherer && cicc.IdLanguage == idLanguage)); } return(null); } }
private ICollection <ICardInCollectionCount> GetCardCollection(int idCollection, int idGatherer) { using (new ReaderLock(_lock)) { ICardEdition cardEdition = GetCardEdition(idGatherer); if (_allCardInCollectionCount.TryGetValue(cardEdition.IdCard, out IList <ICardInCollectionCount> list)) { return(list.Where(cicc => cicc.IdCollection == idCollection && cicc.IdGatherer == idGatherer).ToArray()); } return(null); } }
public int GetIdGatherer(ICard card, IEdition edition) { if (card == null || edition == null) { return(0); } CheckReferentialLoaded(); using (new ReaderLock(_lock)) { ICardEdition cardEdition = _cardEditions.Values.FirstOrDefault(ce => ce.IdCard == card.Id && ce.IdEdition == edition.Id); return(cardEdition == null ? 0 : cardEdition.IdGatherer); } }
public IEnumerable <IPrintedCard> CardsByName(string name, int amount, string code = null) { ICardEdition edition = code == null?GetLatestEditionForCard(name) : GetEditionByCode(code); if (null == edition || !CardsInEdition[edition].TryGetValue(name, out List <IPrintedCard> list)) { throw new KeyNotFoundException("Card not found in database: " + name + " | " + code); } int len = list.Count; for (int i = 0; i < amount; i++) { yield return(list[selectVariant.Next(len)]); } }
private void InsertInReferential(ICardInCollectionCount cardInCollectionCount) { //No call to private ICardEdition GetCardEdition(int idGatherer) because call in CheckReferentialLoaded() ICardEdition cardEdition = _cardEditions.GetOrDefault(cardInCollectionCount.IdGatherer); if (!_allCardInCollectionCount.TryGetValue(cardEdition.IdCard, out IList <ICardInCollectionCount> list)) { list = new List <ICardInCollectionCount>(); _allCardInCollectionCount.Add(cardEdition.IdCard, list); } if (list.Contains(cardInCollectionCount)) { throw new Exception("Invalid addition"); } list.Add(cardInCollectionCount); }
public IPrintedCard CardByName(string name, ICardEdition edition, int index = -1) { if (null == edition) { return(null); } if (!CardsInEdition[edition].TryGetValue(name, out List <IPrintedCard> list)) { return(null); } if (index < 0) { index = selectVariant.Next(list.Count); } else { index = index % list.Count; } return(list[index]); }
//Ensembly Get public ICollection <ICardAllDbInfo> GetAllInfos(int onlyInCollectionId = -1) { CheckReferentialLoaded(); using (new ReaderLock(_lock)) { ICollection <ICardInCollectionCount> collection = null; if (onlyInCollectionId != -1) { collection = GetCardCollection(onlyInCollectionId); } if (collection == null && _cacheForAllDbInfos != null) { //No filter and no change since last call but recalculate statistics foreach (CardAllDbInfo cardAllDbInfo in _cacheForAllDbInfos.Cast <CardAllDbInfo>()) { cardAllDbInfo.SetStatistics(GetCardCollectionStatistics(cardAllDbInfo.Card)); } return(_cacheForAllDbInfos.AsReadOnly()); } List <ICardAllDbInfo> ret = new List <ICardAllDbInfo>(); foreach (ICardEdition cardEdition in _cardEditions.Values) { CardAllDbInfo cardAllDbInfo = new CardAllDbInfo(); if (collection != null) { if (collection.All(cicc => cicc.IdGatherer != cardEdition.IdGatherer)) { continue; } } ICardEdition edition = cardEdition; ICard card = _cardsbyId.GetOrDefault(edition.IdCard); cardAllDbInfo.Card = card; cardAllDbInfo.Edition = _editions.FirstOrDefault(e => e.Id == edition.IdEdition); cardAllDbInfo.Rarity = _rarities.Values.FirstOrDefault(r => r.Id == edition.IdRarity); cardAllDbInfo.IdGatherer = cardEdition.IdGatherer; cardAllDbInfo.IdGathererPart2 = 0; IList <IPrice> prices = _prices.GetOrDefault(cardEdition.IdGatherer); cardAllDbInfo.Prices = prices == null ? new List <IPrice>() : new List <IPrice>(prices); cardAllDbInfo.SetStatistics(GetCardCollectionStatistics(card)); if (_cardEditionVariations.TryGetValue(cardEdition.IdGatherer, out IList <ICardEditionVariation> other)) { cardAllDbInfo.VariationIdGatherers = other.Select(cev => cev.OtherIdGatherer).ToArray(); } else { cardAllDbInfo.VariationIdGatherers = Array.Empty <int>(); } cardAllDbInfo.VariationIdGatherers2 = Array.Empty <int>(); //For Multipart card if (_multiPartCardManager.HasMultiPart(card)) { //This is the reverse side of a recto-verso card no need to do anything if (_multiPartCardManager.ShouldIgnore(card)) { continue; } ICard cardPart2 = _multiPartCardManager.GetOtherPartCard(card, GetCard); cardAllDbInfo.CardPart2 = cardPart2; //Be sure to get the other part (Up/Down, Splitted and Adventure have the same gatherer id so no return) ICardEdition cardEdition2 = _cardEditions.Values.FirstOrDefault(ce => ce.IdEdition == edition.IdEdition && ce.IdCard == cardPart2.Id && ce.IdGatherer != edition.IdGatherer); //Verso of Reserse Card and Multi-card if (cardEdition2 != null) { cardAllDbInfo.IdGathererPart2 = cardEdition2.IdGatherer; if (_cardEditionVariations.TryGetValue(cardEdition2.IdGatherer, out IList <ICardEditionVariation> other2)) { cardAllDbInfo.VariationIdGatherers2 = other2.Select(cev => cev.OtherIdGatherer).ToArray(); } } } ret.Add(cardAllDbInfo); } //Push in cache in no filter if (collection == null) { _cacheForAllDbInfos = ret; } return(ret.AsReadOnly()); } }
public IEnumerable <IPrintedCard> CardsByEdition(ICardEdition edition) { return(edition == null || CardsInEdition.TryGetValue(edition, out MultiMap <string, IPrintedCard> cards) ? Enumerable.Empty <IPrintedCard>() : cards.ManyValues); }
public IPrintedCard CardByName(string name, string code = null) { ICardEdition edition = code == null?GetLatestEditionForCard(name) : GetEditionByCode(code); return(CardByName(name, edition)); }