private NewThreadRequest GenerateNewThreadRequest(WebGetDocumentArgs document) { if (document == null || document.Document == null) return null; NewThreadRequest request = new NewThreadRequest(); HtmlNode parent = document.Document.DocumentNode; if (this._requestThread.CancellationPending) return null; this.SetRequestFormInfo(request, document.Document); var icons = parent.Descendants("div") .Where(node => node.GetAttributeValue("class", "").Equals("posticon")); request.Icons = new List<SAThreadIcon>(30); request.Icons.Add(SAThreadIcon.Empty); foreach (var icon in icons) { try { if (this._requestThread.CancellationPending) return null; var inputNode = icon.Descendants("input").SingleOrDefault(); var imgNode = icon.Descendants("img").SingleOrDefault(); string title = imgNode.GetAttributeValue("alt", ""); string value = inputNode.GetAttributeValue("value", ""); string uri = imgNode.GetAttributeValue("src", ""); request.Icons.Add(new SAThreadIcon(title, value, uri)); } catch (Exception ex) { Awful.Core.Event.Logger.AddEntry(string.Format("There was an error while parsing post icons. [{0}] {1}", ex.Message, ex.StackTrace)); } } request.SelectedIcon = SAThreadIcon.Empty; return request; }
private void SetRequestFormInfo(NewThreadRequest data, HtmlDocument doc) { var formNodes = doc.DocumentNode.Descendants("input").ToArray(); var formKeyNode = formNodes .Where(node => node.GetAttributeValue("name", "").Equals("formkey")) .FirstOrDefault(); var formCookieNode = formNodes .Where(node => node.GetAttributeValue("name", "").Equals("form_cookie")) .FirstOrDefault(); try { data.FormKey = formKeyNode.GetAttributeValue("value", ""); data.FormCookie = formCookieNode.GetAttributeValue("value", ""); } catch (Exception) { throw new InvalidOperationException("Could not parse newReply form data."); } }
protected override void InitializeForDesignMode() { var req = new NewThreadRequest(); req.Forum = new SAForum() { ForumName = "Sample Forum" }; req.Icons = new SampleThreadIcons(); req.Title = "Sample Thread Title"; req.Text = "Sample Thread Text"; this.Request = req; this.Forum = req.Forum; this.IsEnabled = false; this.IsLoading = true; }