private static void FixArkhamDbCardImageSource(ArkhamDbCard arkhamDbCard) { string arkhamDbPrefix = "https://arkhamdb.com/"; if (!string.IsNullOrEmpty(arkhamDbCard.ImageSrc) && !arkhamDbCard.ImageSrc.StartsWith(arkhamDbPrefix)) { arkhamDbCard.ImageSrc = arkhamDbPrefix + arkhamDbCard.ImageSrc; } if (!string.IsNullOrEmpty(arkhamDbCard.BackImageSrc) && !arkhamDbCard.BackImageSrc.StartsWith(arkhamDbPrefix)) { arkhamDbCard.BackImageSrc = arkhamDbPrefix + arkhamDbCard.BackImageSrc; } }
public void LoadPlayerCards(Player player) { if (player.Slots == null) { _logger.LogWarning($"{player.ID} has no cards in deck."); return; } _logger.LogMessage($"Loading cards for player {player.ID}."); // TODO: Consider alternatives to loading all cards var localCards = _localCardsService.LoadLocalCards(); player.CardGroup.Loading = true; try { var cards = new List <CardInfo>(); foreach (var slot in player.Slots) { ArkhamDbCard arkhamDbCard = _arkhamDbService.GetCard(slot.Key); if (arkhamDbCard != null) { // Override card image with local card if possible FindCardImageSource(arkhamDbCard, localCards); var card = new CardInfo(arkhamDbCard, slot.Value, true); _cardImageService.LoadImage(card); cards.Add(card); // Look for bonded cards if present cards.AddRange(GetBondedCards(arkhamDbCard, localCards)); } else { _logger.LogError($"Could not find player {player.ID} card: {slot.Key}"); } } Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { player.CardGroup.LoadCards(cards); })); } catch (Exception ex) { _logger.LogException(ex, $"Error loading cards for player {player.ID}."); } finally { player.CardGroup.Loading = false; } _logger.LogMessage($"Finished loading cards for player {player.ID}."); }
private static void FindCardImageSource(ArkhamDbCard arkhamDbCard, List <LocalManifestCard> localCards, bool removeLocalCard = false) { FixArkhamDbCardImageSource(arkhamDbCard); var localCard = localCards.FirstOrDefault(c => c.ArkhamDbId == arkhamDbCard.Code); if (localCard != null) { arkhamDbCard.ImageSrc = localCard.FilePath; if (localCard.HasBack) { arkhamDbCard.BackImageSrc = localCard.BackFilePath; } if (removeLocalCard) { localCards.Remove(localCard); } } }
public Dictionary <ArkhamDbCard, int> GetBondedCards(ArkhamDbCard card) { Initialize(); if (!(card is ArkhamDbFullCard mainCard)) { mainCard = allCards.FirstOrDefault(c => c.Code.Equals(card.Code)); } var bondedCards = new Dictionary <ArkhamDbCard, int>(); if (mainCard != null && mainCard.Bonded_Cards != null) { foreach (var bondedCard in mainCard.Bonded_Cards) { bondedCards.Add(allCards.FirstOrDefault(c => c.Code.Equals(bondedCard.Code)), bondedCard.Count); } } return(bondedCards); }
private IEnumerable <CardInfo> GetBondedCards(ArkhamDbCard arkhamDbCard, List <LocalManifestCard> localCards) { if (arkhamDbCard is ArkhamDbFullCard fullCard && fullCard.Bonded_Cards?.Any() == true) { foreach (var bondedCardInfo in fullCard.Bonded_Cards) { ArkhamDbCard bondedArkhamDbCard = _arkhamDbService.GetCard(bondedCardInfo.Code); if (bondedArkhamDbCard != null) { // Override card image with local card if possible FindCardImageSource(bondedArkhamDbCard, localCards); var bondedCard = new CardInfo(bondedArkhamDbCard, bondedCardInfo.Count, isPlayerCard: true, isBonded: true); _cardImageService.LoadImage(bondedCard); yield return(bondedCard); } else { _logger.LogError($"Could not find bonded card: {bondedCardInfo.Code}, bonded to: {arkhamDbCard.Code}"); } } } }