public static Deck Parse(CardsManager manager, string filename) { Deck deck = new Deck(); XmlReader xmlReader = XmlReader.Create(filename); while (xmlReader.Read()) { if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "card")) { if (xmlReader.HasAttributes) { int amount = int.Parse(xmlReader.GetAttribute("number")); string name = xmlReader.GetAttribute("name"); ImageAble image_able = manager.GetNewest(name); if (image_able == null) { Console.WriteLine("[W] WARNING: Cannot find card \"" + name + "\""); continue; } if (amount < 1) { Console.WriteLine("[W] WARNING: Amount = 0, card \"" + name + "\""); continue; } deck.Add(image_able, amount); } } } return(deck); }
private static string GetCardImage(ImageAble card) { if (card == null) { return(null); } if (File.Exists(cache_image_dir + card.GetImageFileName())) { return(cache_image_dir + card.GetImageFileName()); } List <ImageAble> banned = new List <ImageAble>(); while (true) { foreach (string url in card.GetImageUrls()) { if (File.Exists(cache_image_dir + card.GetImageFileName())) { return(cache_image_dir + card.GetImageFileName()); } } banned.Add(card); card = manager.ReNew(card, banned); if (card == null) { break; } } return(null); }
public ImageAble GetNewest(string name) { ImageAble newest = GetNewestCard(name); if (newest == null) { return(GetNewestToken(name)); } return(newest); }
private static void ProcessCard(ImageAble card, int amount) { if (card == null) { return; } if (File.Exists(cache_image_dir + card.GetImageFileName())) { imaged_cards.Add(card, amount); card.SetCachedImage(cache_image_dir + card.GetImageFileName()); return; } List <ImageAble> banned = new List <ImageAble>(); bool downloaded = false; while (!downloaded) { foreach (string url in card.GetImageUrls()) { try { Thread.Sleep(100); Download(url, cache_image_dir + card.GetImageFileName()); imaged_cards.Add(card, amount); card.SetCachedImage(cache_image_dir + card.GetImageFileName()); downloaded = true; break; } catch (Exception) { continue; } } if (!downloaded) { banned.Add(card); card = manager.ReNew(card, banned); } if (card == null) { Console.WriteLine("[E] Error: Failed to download card \"" + card.GetName() + "\""); break; } } }
public void Add(ImageAble image_able, int amount) { if (image_able == null) { return; } if (cards.ContainsKey(image_able)) { cards[image_able] += amount; } else { cards.Add(image_able, amount); } }
public ImageAble ReNew(ImageAble current, List <ImageAble> banned) { if (current as Card != null) { List <Card> banned_cards = new List <Card>(); if (banned != null) { banned_cards = banned.ConvertAll(x => (Card)x); } if (!banned_cards.Contains(current)) { banned_cards.Add(current as Card); } return(GetNewestCard(current.GetName(), banned_cards)); } if (current as Token != null) { List <Token> banned_cards = new List <Token>(); if (banned != null) { banned_cards = banned.ConvertAll(x => (Token)x); } if (!banned_cards.Contains(current)) { banned_cards.Add(current as Token); } return(GetNewestToken(current.GetName(), banned_cards)); } return(null); }