private void ProcessPage(HtmlNode node, int level, ProcessPass pass, CardDetails cardDetails, AttributeCardType attributeType) { if (VisitedNodes.Contains(node)) return; VisitedNodes.Add(node); switch (pass) { case ProcessPass.Details: if (NodeHasCardAttributeOfValue(node,attributeType)) { var resultNodes = new List<HtmlNode>(); HtmlNodeHelpers.FindChildNodesInOrderBelowLevel(node.ChildNodes.First(), 0, new List<HtmlNode>(), resultNodes); CardDetailEntry entry = ExtractCardFieldFromNodeListHelper.Extract(resultNodes); cardDetails.AddEntry(entry); } break; case ProcessPass.Image: if (NodeHasAssetAttributeOfInterest(node,attributeType)) { //((CardDetailEntryString)cardDetails.GetEntry(CardFieldName.CardName)).Value CardDetailEntry entry = ExtractImagePathFromHtmlHelper.ExtractImagePath(node.OuterHtml); cardDetails.AddEntry(entry); } break; } foreach (HtmlNode child in node.ChildNodes) { ProcessPage(child, level + 1, pass, cardDetails,attributeType); } if (node.NextSibling != null) { ProcessPage(node.NextSibling, level, pass, cardDetails,attributeType); } }
public void Handle(HtmlNode node, int level, CardDetails cardDetails, AttributeCardType attributeType) { VisitedNodes.Clear(); ProcessPage(node, 0, ProcessPass.Details, cardDetails,attributeType); Debug.WriteLine("Processing: " + cardDetails.Expansion.Value + " " + cardDetails.CardName.Value); VisitedNodes.Clear(); ProcessPage(node, 0, ProcessPass.Image, cardDetails,attributeType); DownloadAllImages(cardDetails); }
private bool NodeHasCardAttributeOfValue(HtmlNode node,AttributeCardType attrCardType) { foreach (string str in standardCardAttributes) { var compareAttribute = cardAttributeStart + cardTypeAttributeMiddle[(int)attrCardType] + str; if (node.Attributes.Any(a => a.Value.Contains(compareAttribute))) { return true; } } return false; }